我有一个无法修改的存储过程,并且我正在尝试获取发生错误时返回的 PRINT
消息。我的存储过程中的代码是。
IF((ISNULL(@ID,''))='')
BEGIN
PRINT N'Error: This ID is invalid.';
RETURN;
END
在我简洁的通话中,我有以下内容:
var storedProcResult = connection.Query("AdventureWorks.dbo.myStoredProcedure", new
{
@ID = null
},
commandType: CommandType.StoredProcedure
);
storedProcResult
的值为 0
,但我有兴趣获取 PRINT
消息。请指教。
最佳答案
根据 Jeroen 和 Marc 的评论,我编写了一个非常基本的代码来获取单个命令的消息:
var infoMessageBuilder = new StringBuilder();
void OnInfoMessageEvent(object _, SqlInfoMessageEventArgs args)
{
infoMessageBuilder.AppendLine(args.Message);
}
// Register message event listener
cn.InfoMessage += OnInfoMessageEvent;
await cn.ExecuteAsync("AdventureWorks.dbo.myStoredProcedure", new {@ID = null}, commandType: CommandType.StoredProcedure);
// Unregister listener to stop fetching events from the connection
cn.InfoMessage -= OnInfoMessageEvent;
// Get messages as string
var message = infoMessageBuilder.ToString();
我在命令执行之前注册了一个事件处理程序,并将 InfoMessage 事件的所有输出写入 StringBuilder。执行后该处理程序将被删除。这对我来说非常有效。希望它能帮助其他来到这里的人。
关于c# - Dapper 从存储过程返回打印消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59737854/