Доступ к SQL Server обменивается сообщениями с помощью ADO.NET

Кажется, что есть различия в режимах совместимости в вашей локальной БД SQL-сервера и БД SQL-сервера Azure. Проверьте уровень совместимости и, если он не соответствует , здесь является ресурсом для решения этой проблемы. Ошибка произошла из-за того, что вы используете версию SSMS 'X' для создания BACPAC для версии Azure SQL 'Y'. Попробуйте сгенерировать тот же BACPAC, используя версию SSMS 'Y', и она работает для меня.

22
задан Jan Zich 19 April 2009 в 09:45
поделиться

2 ответа

Да, в классе SqlConnection есть событие SqlInfoMessage , который вы можете подключить:

SqlConnection _con = 
   new SqlConnection("server=.;database=Northwind;integrated Security=SSPI;");

_con.InfoMessage += new SqlInfoMessageEventHandler(InfoMessageHandler);

Обработчик событий будет выглядеть так:

static void InfoMessageHandler(object sender, SqlInfoMessageEventArgs e)
{
    string myMsg = e.Message;            
}

e.Message - это сообщение, распечатанное в окне сообщений в SQL Server Management Studio.

28
ответ дан 29 November 2019 в 05:13
поделиться

Спасибо за ответ выше. Я только что провел небольшой эксперимент и обнаружил небольшой неожиданный сбой (ошибка?) При чтении сообщений (в данном случае, производимых SET STATISTICS TIME ON) из результата с несколькими наборами записей. Как указано ниже, необходимо вызвать NextResult даже после последнего набора результатов, чтобы получить последнее сообщение. Это не требуется в случае результата с одним набором записей.

using System;
using System.Data.SqlClient;

namespace TimingTest
{
    class Program
    {

        static void Main(string[] args)
        {

            SqlConnection conn = new SqlConnection("some_conn_str");
            conn.Open();

            conn.InfoMessage += new SqlInfoMessageEventHandler(Message);

            SqlCommand cmd = new SqlCommand("some_sp", conn);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            SqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read()) { };

            rdr.NextResult();

            while (rdr.Read()) { };

            // this is needed to print the second message
            rdr.NextResult();

            rdr.Close();

            conn.Close();

        }

        static void Message(object sender, SqlInfoMessageEventArgs e)
        {
            Console.Out.WriteLine(e.Message);
        }

    }
}
3
ответ дан 29 November 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: