【问题标题】:Need to get the SQL Server "PRINT" value in C#需要在 C# 中获取 SQL Server "PRINT" 值
【发布时间】:2011-08-10 15:02:00
【问题描述】:

我有一个将结果打印到 SQL ServerSP,但我需要在 C# 中使用该值。

现在不能将PRINT 更改为SELECT。我尝试SqlCommand.ExecuteScalar(),但没有奏效。

有人知道是否可以将 SPPRINT 命令的值重定向到 C#

示例:

CREATE PROCEDURE doXYZ
AS
BEGIN
   PRINT 'XYZ'
END

现在在 C# 中,我需要获取值 'XYZ'.... 有什么想法吗?

【问题讨论】:

  • 你是如何连接到数据库的?直接使用 ADO.NET 还是某种 ORM?
  • 直接使用 ADO.NET。 SqlConnection 带有一个 connectionString,然后是 SQLcommand。 USING(SqlConnetion con = new SqlConnection("Server=LOCALHOST; Database=XYZ; Trusted_Connection=Yes;"))
  • @Akram Shahda:非常好的编辑,让问题更具可读性,如果我可以投票我会 =)。
  • @ROMANARMY:没有投票我很满意..

标签: c# .net sql sql-server


【解决方案1】:

您可以使用SqlConnection.InfoMessage 事件。

【讨论】:

【解决方案2】:

您可以像这样使用SqlConnection.InfoMessage 事件:

using System.Data;
using System.Data.SqlClient;

namespace foo
{
    class bar
    {
        static public void ExecuteStoredProc()
        {
            var connectionString = "Data Source=.;Integrated Security=True;Pooling=False;Initial Catalog=YourDatabaseName";
            using (var connection = new SqlConnection(connectionString))
            using (var command = new SqlCommand("dbo.YourStoredProcedure", connection))
            {
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@YourParameterName", "YourParameterValue");

                connection.Open();
                // wire up an event handler to the connection.InfoMessage event
                connection.InfoMessage += connection_InfoMessage;
                var result = command.ExecuteNonQuery();             
                connection.Close();
            }
        }

        static void connection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
        {
            // this gets the print statements (maybe the error statements?)
            var outputFromStoredProcedure = e.Message;              
        }
    }
}

【讨论】:

  • 我更喜欢同步解决方案,而不是在这种情况下必须处理事件。为此,我简单地将PRINT 语句转换为简单的SELECT 'XYZ' AS RetVal,然后处理返回数据的第一行的第一个字段的值。
  • 在不取消其事件的情况下释放对象是否会阻止 GC 清理它,从而导致内存泄漏?
猜你喜欢
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多