如何在C#中获取存储过程返回值?

时间:2010-06-26 08:09:18

标签: c# sql-server-2005 stored-procedures ado.net

我有一个存储过程执行某些操作并返回1或0,如下所示

CREATE PROCEDURE dbo.UserCheckUsername11
(
    @Username nvarchar(50)
)
AS
BEGIN
SET NOCOUNT ON;

IF Exists(SELECT UserID FROM User WHERE username =@Username) 
    return 1
ELSE
    return 0
END

并且在C#中我希望获得此返回值我尝试ExcuteScalar但它没有返回任何值(我知道如果我用return 0 Select 0替换ExcuteScalar会抓住它..但是,是否允许我使用return替换select来获得返回值?

注意:我也不想用户存储过程输出参数

4 个答案:

答案 0 :(得分:7)

实质上,您必须使用“direction”返回值定义参数。

您可以在此处找到一些示例:Using ADO.NET with SQL Server和此处:Get the Return Value from an SQL Stored Procedure

以下是引用的第一个链接的相关部分:

  

获取RETURN的值   声明,你需要做的   以下内容:

// add a new parameter, with any name we want - its for our own
// use only
SqlParameter sqlParam = com.Parameters.Add("@ReturnValue", SqlDbType.Int);
// set the direction flag so that it will be filled with the return value
myParm.Direction = ParameterDirection.ReturnValue;
  

然后,在存储过程之后   已被执行,

int returnValue = (int)com.Parameters["@ReturnValue"].Value
  

将检索已设置的值。

答案 1 :(得分:4)

添加参数时,有一个“返回值”参数方向:

var param = cmd.Parameters.Add(cmd.CreateParameter());
param.Direction = System.Data.ParameterDirection.ReturnValue;

在通话(.Value)后检查此参数的ExecuteNonQuery,并且您有返回值。不过要注意一点;当使用SELECT结果时,返回值仅在全部数据从结果中读取后才可用(返回/输出位于结束 TDS流。)

答案 2 :(得分:2)

您需要添加一个方向= ReturnValue:

的参数
using (var command = new SqlCommand("dbo.CheckUsername11", conn) 
            { CommandType = CommandType.StoredProcedure })
{
  command.Parameters.Add(new SqlParameter("@result") { ParameterDirection.ReturnValue });
  command.Parameters.AddWithValue("@Username", username);

  command.ExecuteNonQuery();

  return (int)command.Parameters["@result"].Value;
}

答案 3 :(得分:0)