有時,我們會需要獲取某個值在方法中的執行狀態,根據定義的方法,我們僅僅能夠獲得乙個返回值,但是,有時我們也許想獲取多個值,通過返回值就不能返回這樣的資訊,我們可以通過在引數前使用ref或out,以得到多個返回值.
在執行sql儲存過程時,我們可以通過sql語句在儲存過程中的執行狀態,返回相應的值.sql的return只支援int格式的返回值,通過使用ref或out我們就可以獲取多個返回值,並提示給頁面
當方法中的**執行時,需要用到該引數,並且通過該引數返回所需要的值時,我們就需要使用ref.如果僅僅是為了獲取多個返回值,而方法中又不需要使用這些引數時,我們可以使用out.
例1:在asp.net頁面使用ref和outprotected void page_load(object sender, eventargs e)例2:在儲存過程中的引數使用output關鍵字時,對應到c#**中,則是ref和out.public void useout(out string str1, out string str2)
public void useref(ref string s1, ref string s2)
ref和out與output關係如下:
parameterdirection取值
描述對應c#
對應sql
input
輸入inputoutput
輸入輸出
ref對應output
output
輸出out
returnvalue
返回值開始例子:
建立employee表:
表內資料如下:
建立儲存過程如下:
alter procedure dbo.insertemployee( @employeename nvarchar(20),
@employeeage int=null,
@employeedepartmentid int=null,
@employeescore int=null,
@outvalue nvarchar(20) output)as
/* set nocount on */
if exists(select * from employee where employeename=@employeename)
begin
set @outvalue='使用者名稱'
+@employeename+'
重複!'
return
endinsert into employee (employeename,employeeage,employeedeparmentid,employeescore)
values (@employeename,@employeeage,@employeedepartmentid,@employeescore)
set @outvalue='使用者'
+@employeename+'
建立成功!'
return
頁面**如下:string connectionstring = configurationmanager.connectionstrings["dbstconnectionstring"].connectionstring;sqlconnection conn = new
sqlconnection(connectionstring);
sqlcommand cmd = conn.createcommand();
cmd.commandtype = commandtype.storedprocedure;
cmd.commandtext = "insertemployee";
cmd.parameters.addwithvalue("@employeename", "宋八");
cmd.parameters.addwithvalue("@employeeage", 20);
cmd.parameters.addwithvalue("@employeedepartmentid", 1);
cmd.parameters.addwithvalue("@employeescore", 95);
//注意param_outvalue.direction
// 設定param_outvalue.direction=output,引數只需被宣告即可
// 對應資料庫中output
//sqlparameter param_outvalue = new sqlparameter("@outvalue", sqldbtype.nvarchar, 20);
//param_outvalue.direction = parameterdirection.output;
//注意param_outvalue.direction
// 設定為param_outvalue.direction=inputoutput,引數需要被初始化
// 對應資料庫中output
sqlparameter param_outvalue = new
sqlparameter("@outvalue", sqldbtype.nvarchar,20);
param_outvalue.direction = parameterdirection.inputoutput;
param_outvalue.value = string.empty;
cmd.parameters.add(param_outvalue);
conn.open();
cmd.executenonquery();
conn.close();
response.write(param_outvalue.value);
第一次執行輸出結果:使用者宋八建立成功!
第二次執行輸出結果:
使用者名稱宋八重複!
C 中的ref和out與SQL中的output
有時,我們會需要獲取某個值在方法中的執行狀態,根據定義的方法,我們僅僅能夠獲得乙個返回值,但是,有時我們也許想獲取多個值,通過返回值就不能返回這樣的資訊,我們可以通過在引數前使用ref或out,以得到多個返回值.在執行sql儲存過程時,我們可以通過sql語句在儲存過程中的執行狀態,返回相應的值.sq...
c 中ref與out區別
ref 和 out 都是c 中的關鍵字,所實現的功能也差不多,都是指定乙個引數按照引用傳遞。對於編譯後的程式而言,它們之間沒有任何區別,也就是說他們只有語法區別。有如下語法區別 1.ref 傳進去的引數必須在呼叫前初始化,out不必,即 int i somemethod ref i 語法錯誤 som...
C 中out與ref區別
一 ref 參考 與out區別 1 out 只出不進 將方法中的引數傳遞出去,在方法中將該引數傳遞出去之前需要在該方法起始賦初值 在方法外傳遞的該引數可以不用賦值 簡單理解就是 將乙個東西丟擲去之前必須對此東西進行修改,否則就不用丟擲去,修改時的動作必須發生在方法的起始。2 ref 有進有出 在方法...