Получить сообщение об ошибке из оператора ExecuteNonQuery с SMO в C#

Я пытаюсь выполнить сценарий и отловить ошибки (если таковые имеются) и записать вывод куда-нибудь.

У меня есть это:

...
    SqlConnection connection = new SqlConnection(connString);
    Server server = new Server(new ServerConnection(connection));
    server.ConnectionContext.ExecuteNonQuery(script);
...

Когда есть какая-то проблема в SQL, у меня возникают проблемы с получением реальной проблемы запроса.

я пытался

a.) Перехват исключения ExecutionFailureException и его обработка - сама ошибка не содержит информации, связанной с проблемой SQL, и

б.) Я пробовал циклически проходить через server.ReadErrorLog(), но, похоже, это связано с журналом ошибок соединения с сервером, а не с контекстом выполняемого SQL, и

б.) Я попытался добавить обработчик событий InfoHandler в ConnectionContext, который, кажется, никогда не срабатывает.

Как я могу получить подробное сообщение об ошибке? (т.е. ошибка, которую я бы увидел, если бы я запускал SQL в Management Studio, был бы идеальным, если это возможно)

1 ответ

Решение

Я просто понял это, вместо того, чтобы смотреть на бывшее сообщение, которое возвращает неопределенное

Возникла исключительная ситуация при выполнении оператора или пакета Transact-SQL.

Мне просто нужно было сослаться на ex.GetBaseException(). Сообщение ExecutionFailureException, и я получил более значимую информацию:

Неверное имя объекта 'FakeTable' (или какова бы ни была ошибка)

Код:

...
try
{
    SqlConnection connection = new SqlConnection(connString);
    Server server = new Server(new ServerConnection(connection));
    server.ConnectionContext.ExecuteNonQuery(script);
} catch (ExecutionFailureException ex) {
    MessageBox.Show("Error: " + ex.GetBaseException().Message); 
}
Другие вопросы по тегам