有時,我們會需要獲取某個值在方法中的執行狀態,根據定義的方法,我們僅僅能夠獲得乙個返回值,但是,有時我們也許想獲取多個值,通過返回值就不能返回這樣的資訊,我們可以通過在引數前使用ref或out,以得到多個返回值.
在執行sql儲存過程時,我們可以通過sql語句在儲存過程中的執行狀態,返回相應的值.sql的return只支援int格式的返回值,通過使用ref或out我們就可以獲取多個返回值,並提示給頁面
例1:在asp.net頁面使用ref和out
protectedvoid page_load(object
sender, eventargs e)
public
void useout(out
string str1, out
string
str2)
public
void useref(ref
string s1, ref
string
s2)
根據上面的示例可以看出ref和out的區別:例2:在儲存過程中的引數使用output關鍵字時,對應到c#**中,則是ref和out.當方法中的**執行時,需要用到該引數,並且通過該引數返回所需要的值時,我們就需要使用ref, 同時,ref是需要宣告並賦值的。
如果僅僅是為了獲取多個返回值,而方法中又不需要使用這些引數時,我們可以使用out,同時,out只需要宣告,但可以不用賦值。
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);
使用者宋八建立成功!第二次執行輸出結果:
使用者名稱宋八重複!
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 有進有出 在方法...