2009-06-12 59 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