在 C# 中使用 SMO 从 ExecuteNonQuery 语句获取错误消息

Get error message from ExecuteNonQuery statement with SMO in C#

我正在尝试执行脚本并捕获错误(如果有)并将输出写入某处。

我有这个:

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

当 SQL 中出现问题时,我无法找到查询的实际问题。

我试过了

a.) 捕获 ExecutionFailureException 并处理它 - 错误本身没有与 SQL 问题和

相关的信息

b.) 我试过循环 server.ReadErrorLog() 但这似乎与服务器连接的错误日志有关,而不是 SQL 的上下文执行,并且

b.) 我试过在 ConnectionContext 上添加一个 InfoHandler 事件处理程序,但它似乎永远不会触发。

如何获得详细的错误消息? (即,如果可能的话,如果我要 运行 管理工作室中的 SQL 我会看到的错误将是完美的)

我只是想通了,而不是看 ex.Message 哪个 returns 含糊不清

An exception occurred while executing a Transact-SQL statement or batch.

我只需要参考 ex.GetBaseException().ExecutionFailureException 的消息,我就收到了更有意义的信息:

Invalid object name 'FakeTable' (or whatever the error is)

代码:

...
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); 
}