ref和out與SQL中的output

2022-02-15 11:28:03 字數 3260 閱讀 2215

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

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

當方法中的**執行時,需要用到該引數,並且通過該引數返回所需要的值時,我們就需要使用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)

例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);

第一次執行輸出結果:

使用者宋八建立成功!

第二次執行輸出結果:

使用者名稱宋八重複!

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 有進有出 在方法...