在項目中寫了一個預存程序:
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;
就這樣程式就得到預存程序中的傳回值。
問題解決!