gpt4 book ai didi

c# 和 SMO - 获取消息输出,例如 "Table already exists"以进行日志记录

转载 作者:太空狗 更新时间:2023-10-30 01:28:06 24 4
gpt4 key购买 nike

我正在使用 SQL 管理对象连接到 SQL 服务器。目前,对于我的示例,它们包含简单的“创建表”命令。

我故意运行此代码两次以导致“表已存在”的错误。

但是我下面的事件没有被触发。

任何人有任何想法,除了更改 ExecutionType 以停止导致异常的错误(我不想这样做,我想继续)之外,我如何在我的代码中获取此消息

我的代码:

public void executeSomeSQL() {
FileInfo file = new FileInfo(@"\c:\sqlcommands.sql");
string script = file.OpenText().ReadToEnd();
SqlConnection conn = new SqlConnection(sqlConnectionString);
conn.InfoMessage +=new SqlInfoMessageEventHandler(conn_InfoMessage);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.InfoMessage += new SqlInfoMessageEventHandler(ConnectionContext_InfoMessage);
server.ConnectionContext.ExecuteNonQuery(script,ExecutionTypes.ContinueOnError);
MessageBox.Show("All Done");
}

事件:-

public void conn_InfoMessage(object sender, SqlInfoMessageEventArgs e) {
textBox3.Text += "1:"+DateTime.Now.ToString();
}

public void ConnectionContext_InfoMessage(object sender, SqlInfoMessageEventArgs e) {
textBox3.Text += "2:" + DateTime.Now.ToString();
}

最佳答案

根据 MSDN :

The InfoMessage event occurs when a message with a severity of 10 or less is returned by SQL Server. Messages that have a severity between 11 and 20 raise an error and messages that have a severity over 20 causes the connection to close.

CreateTable 在已存在的表上的错误严重性为 16,这会绕过 InfoMessage 事件。

您可能希望将 TSQL 包装在 Try...Catch block 中并使用 RAISEERROR。 TRY…CATCH 构造捕获所有严重性大于 10 且不会终止数据库连接的执行错误。

或者,您可能想在您的 TSQL 中添加一个检查表是否存在并执行打印,这将引发您的 InfoMessage 事件。

关于c# 和 SMO - 获取消息输出,例如 "Table already exists"以进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com