2009-02-06 61 views
5

你可以使用你可以使用cmd.ExecuteScalar當存儲過程使用RETURN @value

int blah = Convert.ToInt32(cmd.ExecuteScalar()); 

當存儲過程的最後一條語句的作用:

RETURN @value 

我只能得到它,如果它不工作:

SELECT @Value

而且,這給了我一個對象空例外:

int blah = (int)cmd.ExecuteScalar(); 

不是convert.toint32和(int)相同的東西,但一個是另一個的包裝?

回答

8

不,你不能。 ExecuteScalar()方法被設計爲返回結果集中返回的單個值。基本上,返回第一行第一列的值。

要獲取返回值,需要向SQLCommand對象添加一個參數。使用名稱「@RETURN_VALUE」並在創建參數對象時指定返回的參數方向。然後可以使用ExecuteNonQuery()方法。

我必須注意IMO,存儲過程返回值應該簡單地指出過程的狀態。所有數據應通過結果集或輸出參數返回。

3

要回答你的其他問題,(int)是一個演員,實際上不同於轉換(Convert.ToInt32)。

在演員陣容中,你有點說演員的對象確實是你投射的類型,所以沒有進行真正的轉換/解析。由於int不能爲null,因此當您正在投射的對象爲null時,投射無效,並拋出異常。

隨着轉換一些真正的解析和邏輯發生,它處理的對象被轉換爲null的情況。

還有一些關於此here的更多信息。