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

我有一个存储过程执行某些操作并返回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 Select 0 ExcuteScalar会捕获它..但它是否允许我获得返回值的任何方式用select替换return

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

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

您可以在此处找到一些示例: 将ADO.NET与SQL Server一起使用 ,此处: 从SQL存储过程中获取返回值 。

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

要获取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 

将检索已设置的值。

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

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

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

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

检查以下包含相同问题的URL
1- 如何获取存储过程的返回值
2- 从存储过程中获取C#asp.net中的返回值(语法问题)