gpt4 book ai didi

c# - 使用执行阅读器从 SQL 获取返回值

转载 作者:行者123 更新时间:2023-11-30 14:56:40 27 4
gpt4 key购买 nike

所以我在 SQL Server 中有这个存储过程,里面有这段 SQL

... part of store procedure...
IF @@ERROR = 0 --AND @@ROWCOUNT = 1
BEGIN
.. dO STUFF
SELECT * FROM MyTable
RETURN 0
END
ELSE
BEGIN
RAISERROR('Something went wrong :-(', 16, 1)
RETURN -1
END

END

在我获取数据的 C# 代码中,我是这样做的

//Sql param used to get the return value from the store procedure
SqlParameter returnValueParam = command.Parameters.Add("@return_value", SqlDbType.Int);
returnValueParam.Direction = ParameterDirection.ReturnValue;
using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{
while (reader.Read())
{
SpRetrunValue.EmailAddress = DBNulls.DBNullToString(reader["Email"], string.Empty);
... More stuff
}
reader.NextResult();
SpRetrunValue.ExternalData = new List<ExternalData>();
var ExtData = new ExternalData();
while (reader.Read())
{
ExtData.Id = DBNulls.DBNullToInteger(reader["ID"], 0);
SpRetrunValue.ExternalData.Add(intExtData);
}
//get the return code on the SP 0 for success -1 for error
SpRetrunValue.ResultCode = (int)returnValueParam.Value;
}

我遇到的问题是,如果我将它与 command.ExecuteNonQuery(); 一起使用,那么我可以获得返回值。但是现在按原样使用我无法获得返回值,但我确实得到了结果集。这样获取返回值不就可以了吗?我看过这个帖子here on stackoverflow ,但这需要我向存储过程添加另一个参数,我觉得这违背了像上面我的存储过程那样只返回一个值的目的。

最佳答案

在 try catch 返回值或输出参数之前,您必须完成对所有行集的处理。将 SpRetrunValue.ResultCode = (int)returnValueParam.Value; 放在 using 语句之后。

Understanding SQL Server Return Codes and Output Parameters

此外,this post

关于c# - 使用执行阅读器从 SQL 获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22231881/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com