c# - Dapper 从存储过程返回打印消息

标签 c# sql sql-server t-sql dapper

我有一个无法修改的存储过程,并且我正在尝试获取发生错误时返回的 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/

相关文章:

c# - 创建递归嵌套实体的类型化工厂设施

java - MyBatis 一次执行多条sql语句,这可能吗?

sql-server - vb.net SQL Server “Incorrect Syntax near' ='.”

sql-server - 在 xml 变量上选择多行和多列

c# - Mysql ODBC 连接在控制台应用程序中工作但在 Window 服务中不起作用

c# - 如何使用 C# 将词汇表解析为数据库?

c# - 如何从两个值创建一个列表?

sql - 查找未订购所有 3 种比萨饼的顾客

mysql - SQL在两个表中搜索结果

sql-server - 尝试列出声明的 XML 命名空间