c# - 从 LINQ ExecuteMethodCall 中提取 SQL 'print' 消息

标签 c# sql sql-server linq stored-procedures

我以相当简单的方式通过 LINQ 调用存储过程:

    [Function(Name = "dbo.add_second_override")]
    public int AddSecondOverride(
        [Parameter(DbType = "numeric(10)")] decimal account_id,
        [Parameter(DbType = "numeric(10)")] decimal security_id,
        [Parameter(DbType = "varchar(255)")] string reason,
        [Parameter(DbType = "numeric(10)")] decimal? order_id,
        [Parameter(DbType = "numeric(10)")] decimal current_user)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), new object[] { account_id, security_id, reason, order_id, current_user });

        if ((int)result.ReturnValue != 0)
        {
            string errorDescription = Sysmessages.FirstOrDefault(x => x.Error == (int)result.ReturnValue).Description;
            throw new Exception(errorDescription);
        }

        return (int)result.ReturnValue;
    }

这工作正常,但如果存储过程中有 SQL 打印语句,我该如何提取此信息? 例如

create procedure dbo.add_second_override
(   
    @account_id numeric(10), 
    @security_id numeric(10), 
    @reason varchar(255) = null output,
    @order_id numeric(10) = null,
    @current_user numeric(10)               
) 
as
begin
    /* Do some other stuff */
    print 'This is a SQL message'
    return 0
end

曾经有一种方法可以使用 SQLClient 检索此消息,但我找不到与 LINQ 相关的任何内容。

请注意,我无法在存储过程中抛出异常而不是使用“打印”。它必须以某种方式获取打印语句。

最佳答案

我没有找到任何特定于 Linq 的内容。但是从这个问题中排队

Capture Stored Procedure print output in .NET (Different model!)

如果您可以连接到 SqlConnection,您就可以对 InfoMessage 事件作出 react 。

如果您正在使用 Entity Framework 和 DbContext - 您可以这样做。

SqlConnection conn = (SqlConnection)context.Database.Connection;
conn.Open();
conn.InfoMessage += (s, e) => Console.WriteLine(e.Message);

正如我所说,我意识到这不是特定于 Linq 的方法 - 但至少您可以通过这样的方法实现您的最终目标。

关于c# - 从 LINQ ExecuteMethodCall 中提取 SQL 'print' 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914916/

相关文章:

c# - 下载和缓存离线数据(图像/视频/3d 模型)的代码架构应该是什么?

sql - Doctrine 中两列的唯一值

sql-server - 远程Powershell访问被拒绝

sql-server - 主键和唯一键约束有什么区别?

c# - C#中的线程安全数据库访问

c# - 如何断言所有选定的属性都已设置(非空或空)

sql - 将 SQL 结果导出到单独的文件

sql - SQL中如何计算两个日期之间 "Tuesdays"的个数?

sql-server - SQL Server 2005 数据类型和 VB.NET

c# - 使用 Xamarin.iOS 访问 iOS 8 中的 tmp 目录