Кажется, что есть различия в режимах совместимости в вашей локальной БД SQL-сервера и БД SQL-сервера Azure. Проверьте уровень совместимости и, если он не соответствует , здесь является ресурсом для решения этой проблемы. Ошибка произошла из-за того, что вы используете версию SSMS 'X' для создания BACPAC для версии Azure SQL 'Y'. Попробуйте сгенерировать тот же BACPAC, используя версию SSMS 'Y', и она работает для меня.
Да, в классе 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.
Спасибо за ответ выше. Я только что провел небольшой эксперимент и обнаружил небольшой неожиданный сбой (ошибка?) При чтении сообщений (в данном случае, производимых 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);
}
}
}