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