我有一个存储过程执行某些操作并返回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
来获得返回值?
注意:我也不想用户存储过程输出参数
答案 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)