C 中的ref和out與SQL中的output

2022-07-21 02:24:12 字數 3552 閱讀 6385

有時,我們會需要獲取某個值在方法中的執行狀態,根據定義的方法,我們僅僅能夠獲得乙個返回值,但是,有時我們也許想獲取多個值,通過返回值就不能返回這樣的資訊,我們可以通過在引數前使用ref或out,以得到多個返回值.

在執行sql儲存過程時,我們可以通過sql語句在儲存過程中的執行狀態,返回相應的值.sql的return只支援int格式的返回值,通過使用ref或out我們就可以獲取多個返回值,並提示給頁面

例1:在asp.net頁面使用ref和out

protected

void 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的區別:

當方法中的**執行時,需要用到該引數,並且通過該引數返回所需要的值時,我們就需要使用ref, 同時,ref是需要宣告並賦值的。

如果僅僅是為了獲取多個返回值,而方法中又不需要使用這些引數時,我們可以使用out,同時,out只需要宣告,但可以不用賦值。

例2:在儲存過程中的引數使用output關鍵字時,對應到c#**中,則是ref和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 有進有出 在方法...