存儲過程返回值及輸出參數筆記


      在項目中寫了一個存儲過程:    

Create PROCEDURE [dbo].[****] @ParkingAddress nvarchar(50) AS
BEGIN
insert into table(ParkingAddress)
values(@ParkingAddress)
END
if(@@rowcount>0)
return 1
else
return 0
     在程序中我需要調用這個存儲過程並且得到它的返回值。因此需要獲取該存儲過程的返回值。在程序中我通過SqlCommand中的ExecuteNonQuery方法調用成功后,一時不知道怎么得到它的返回值。(沒有用output輸出參數),故查了些資料得到了解決方案,下面是一些記錄,這里整理在一起,便於以后查找方便。

     要點:output是在存儲過程中的參數的返回值(輸出參數),而ReturnValue是存儲過程返回的值(使用return關鍵字),一個存儲過程可以有任意多個依靠參數返回的值,但只有一個ReturnValue。

一、獲取存儲過程的返回值--通過查詢分析器獲得
     存儲過程大體分成三類:

1、返回記錄集的存儲過程:執行結果是一個記錄集,例如,從數據庫中檢索出符合某一個或幾個條件的記錄。

2、返回數值得的存儲過程(也可稱為標量存儲過程),其執行完后返回一個值,例如數據庫中執行一個有返回值的函數或命令。

3、行為存儲過程,用來實現數據庫的某個功能,而沒有返回值,例如在數據庫中的更新和刪除操作。

另外:含有return的存儲過程其返回值為return返回的那個值。

沒有return的存儲過程,無論執行結果又無結果集,其返回值都是0,

帶有輸出參數的存儲過程,如果有RETURN則返回RETURN返回的那個值,如果要SELECT輸出參數,則出現輸出參數的值,和有無RETURN無關。

二、獲取存儲過程的返回值--通過程序獲得

SqlParameter[] cmdParms = { .. ,new SqlParameter("@return",SqlDbType.Int)};
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.ReturnValue;或者
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Output或者
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Input;

得到返回值 object obj = cmdParms[cmdParms.Length - 1].Value;

根據上面的思路,最后在項目中通過 

            SqlParameter p = new SqlParameter("@ReturnValue", SqlDbType.Int);//這里的@ReturnValue可以根據需要自己命名,如果不命名系統將提供默認的一個名稱。
            p.Direction = ParameterDirection.ReturnValue;

            SqlCommand.Parameters.Add(P);

            SqlCommand.ExecuteNonQuery();

            object obj=SqlCommand.Parameters["ReturnValue"].Value;

 就這樣程序就得到存儲過程中的返回值。

問題解決!

           



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM