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

时间:2016-05-30 22:00:06

标签: c# sql-server ado.net smo

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

我有这个:

...
    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,我会看到的错误将是完美的,如果可能的话)

1 个答案:

答案 0 :(得分:3)

我只是想出来,而不是看着返回模糊的ex.Message

  

执行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); 
}
相关问题