2009-06-12 29 views
0

我有以下幾個很基本的存儲過程:返回值從存儲過程沒有設置

CREATE PROCEDURE [DBO] [GetNumberToProcess]

AS

RETURN 999

然後我有一些代碼使用企業庫運行並得到返回值:

 Dim cmd As DbCommand 
     Dim ResultValue as String 
     Dim lDBCommand as String = "dbo.GetNumberToProcess" 
     Dim actionDB As Sql.SqlDatabase = New Sql.SqlDatabase(lConnectionString) 
     cmd = actionDB.GetSqlStringCommand(lDBCommand) 

     Dim SQLreturnValue As New SqlParameter("RETURN_VALUE", DbType.Int32) 
     SQLreturnValue.Direction = ParameterDirection.ReturnValue 

     cmd.Parameters.Add(SQLreturnValue) 

     ' Execute the command and put the result into the ResultValue for later processing 
     actionDB.ExecuteNonQuery(cmd).ToString() 
     ResultValue = cmd.Parameters("RETURN_VALUE").Value.ToString 

問題是,當我得到「999」(存儲過程非常簡單,以至於我可以深入瞭解爲什麼它不工作)時,我得到的所有ResultValue都是「0」。

根據我在網上看到的多個例子,這應該工作。

任何人有任何建議,爲什麼它不?

回答

2

你的存儲過程顯然是很好,我不使用EntLib多,我覺得你的問題是該行

cmd = actionDB.GetSqlStringCommand(lDBCommand) 

嘗試使用這個代替

cmd = actionDB.GetStoredProcCommand(lDBCommand) 
+0

這有用,你知道爲什麼嗎?我懷疑GetSQLStringCommand沒有通過返回值。 – 2009-06-14 23:47:06

1

有你試過

ResultValue = SQLreturnValue.Value.ToString() 

我認爲這只是一個語法的事情壽,不應該有差異。

我個人沒有一個名字對於我的迴歸PARAM並能正常工作:

var returnCode = new SqlParameter(); 
returnCode.Direction = System.Data.ParameterDirection.ReturnValue; 
returnCode.DbType = System.Data.DbType.Int32; 

也許名稱RETURN_VALUE與它搞亂?

+0

是的,原來是這樣,並將其改爲現在的情況以防萬一。不幸的是, – 2009-06-12 05:17:51

0

改變你的程序是非常簡單的:

ALTER PROCEDURE [dbo].[GetNumberToProcess] AS RETURN 999 

這種變化後ResultValue還是0?

+1

什麼?這就是我的存儲過程! – 2009-06-14 23:45:59

0

如果你會得到返回一個輸出參數而不是結果集,你需要在你的存儲過程中聲明一個輸出參數並賦值。

CREATE PROCEDURE [DBO]。[GetNumberToProcess] ( @rtInt爲INT OUT ) AS

選擇@rtInt = 999


昏暗SQLreturnValue作爲新的SqlParameter(「@ rtInt 」,DbType.Int32)

ResultValue = cmd.Parameters( 「@ rtInt」)。Value.ToString

+1

其實你不需要設置輸出參數。 ReturnValue是一種內置的輸出參數,您可以從存儲過程獲得,而無需首先聲明它。唯一的限制是它只能是一個整數值。 – 2009-06-14 23:48:22

0

我的猜測是你的代碼不能很好地處理結果。簡短的回答:嘗試改變你的存儲過程來:

CREATE PROCEDURE [dbo].[GetNumberToProcess] 

AS 

SET NOCOUNT ON 
RETURN 999 

GO 

的NOCOUNT設置將prvent SQL從發送「1個結果的影響」,這可能會影響您的返回值。

+1

這有一個答案是去年接受的,問題在於他將sproc作爲SQL語句調用,因此後臺代碼沒有獲取返回值。 – cjk 2010-04-13 09:13:07