【发布时间】:2017-07-21 09:47:03
【问题描述】:
我有一个不需要任何参数的存储过程,它返回值 0 和消息:
(94 row(s) affected)
(1 row(s) affected)
我的问题是如何获取消息:
(94 row(s) affected)
(1 row(s) affected)
这是我调用存储过程的 .NET 方法:
public List<MessageClass> ChequesToUpdate()
{
message = new List<MessageClass>();
MessageClass item = new MessageClass();
try
{
using (connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("MyStoredProcedure", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.ExecuteNonQuery();
item.message = "message";
}
}
}
catch (Exception e)
{
item.message = e.Message;
}
finally
{
connection.Close();
}
message.Add(item);
return message;
}
我希望将消息放入item.message,我该如何完成?
【问题讨论】:
-
这通常不是存储过程的工作方式:您应该尝试将业务逻辑限制在您的 C# 代码中。 sproc 应该做它需要做的任何事情,你可以根据返回的标量值或表值来决定生成什么样的消息。话虽如此,您可以在存储过程中执行类似
select 'it worked' as message的操作,并在代码中查询message列。 -
您所说的消息是由sql management studio等执行程序生成的。为什么不使用command.executeNonquery()的返回值,如var recordsAffected=command.executenonquery()并设置消息=$"{recordsAffected} 条记录受影响"
-
仅供参考:
SqlConnection.InfoMessage在 T-SQL 中与print一起工作就像一个魅力,但不幸的是,这些消息没有。 -
您希望返回受命令影响的行数并将其保存到 int 变量中,但由于语句类型为
select,因此它返回-1。阅读这篇文章了解原因:stackoverflow.com/a/38060528/2946329
标签: c# asp.net sql-server stored-procedures