需要在C#中获取SQL Server"PRINT"值

Ami*_*n J 15 .net c# sql sql-server

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

现在不能改变PRINTto SELECT.我试过SqlCommand.ExecuteScalar()但是那没用.

有人知道是否有可能将SP中PRINT命令值重定向到C#

例:

CREATE PROCEDURE doXYZ
AS
BEGIN
   PRINT 'XYZ'
END
Run Code Online (Sandbox Code Playgroud)

现在在C#中我需要获得值'XYZ'....任何想法?

Mar*_*ade 22

您可以使用该SqlConnection.InfoMessage活动.


Tim*_*dge 16

您可以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;              
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,我更喜欢同步解决方案,而不必处理事件。为了实现这一点,我只需将“PRINT”语句转换为简单的“SELECT 'XYZ' AS RetVal”,然后处理返回数据的第一行的第一个字段的值。 (2认同)