Получить сообщение об ошибке из оператора 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);
}