【问题标题】:How can I get Stored Procedure return value in C#?如何在 C# 中获取存储过程的返回值?
【发布时间】:2010-06-26 08:09:17
【问题描述】:

我有一个存储过程,它执行一些操作并返回 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 但它没有返回任何值(我知道如果我用 Select 0 替换 return 0 ExcuteScalar 将捕获它.. 但它是有什么方法可以让我通过将return 替换为select 来获得返回值?

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

【问题讨论】:

  • 你能发布你的 C# 代码来访问这个存储过程吗?
  • 执行SP的只是sqlcommand类型的存储过程
  • 谢谢,但如果使用 microsoft SQLHelper 2.0 版?我该怎么做?

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


【解决方案1】:

本质上你必须定义一个带有“方向”返回值的参数。

您可以在此处找到一些示例: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

将检索设置的值。

【讨论】:

  • 但如果使用 microsoft SQLHelper 2.0 版?我该怎么做?
  • 你可以看看@marc_s 的回答,也许这就是你要找的。​​span>
【解决方案2】:

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

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

调用后检查这个参数的.Value (ExecuteNonQuery),你就有了返回值。不过,请注意;当将此与SELECT 结果一起使用时,返回值仅在从结果中读取所有数据后可用(返回/输出位于 TDS 的 end流)。

【讨论】:

  • 谢谢,但如果使用 microsoft SQLHelper 2.0 版?我该怎么做?
【解决方案3】:

你需要添加一个方向= 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;
}

【讨论】:

    【解决方案4】:

    【讨论】:

    • 最好将这些保留为 cmets。
    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 2010-12-12
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多