c# - 在 C# 中捕获 MySQL 触发信号

标签 c# mysql .net error-handling triggers

我想创建一个 MySQL 触发器来生成不同的信号,并基于这些信号我想通过我的 C# 代码显示一些特定的消息。

如果我设置如下信号:

signal sqlstate '45000' //An error signal which halts my code

我可以在 try catch bock 中捕获这些信号,甚至可以找到 MySQL 异常的数量,但它为各种 sqlstates 提供了相同的数字,比如我尝试了 45000、42000、HY000、42S02 等

catch (MySqlException y)
{            
      Response.Write(y.Number.ToString());
      // All (45000, 42000, HY000, 42S02) printing same number
}

此外,这个东西会停止我想在触发器内执行的进一步代码。

我想做的是,根据特定条件,我只希望触发器发送一些信号消息,以便我可以通过 C# 显示一些消息,并且触发器应该继续处理进一步的语句并发送信号。

例如:

begin
        declare quan int;
        select qoh from products where pid = NEW.pid into quan;

        IF (NEW.qty > quan) THEN
            signal sqlstate 'xxxxx' /*appropriate signal number 1*/
            set message_text = 'Display message 1';
        END IF;

        IF (col2 > col1) THEN
            signal sqlstate 'yyyyy' /*appropriate signal number 2*/
            set message_text = 'Display message 2';
        END IF;
        .
        .
        .
end

我也试过 signal sqlstate '01000' 但我在 C# 中的 catch 语句没有捕获它(我假设它不是异常/错误信号而是警告)。

请帮助我:

  1. 要设置的适当信号不会停止我的触发器的进一步代码。
  2. 如何在 C# 中捕获这些不同的信号以显示不同的消息。

或任何解决方法也将受到赞赏。 非常感谢。

最佳答案

MySQL 中没有特殊的机制。但请尝试这些解决方法:

  1. 设置信号状态01000,然后查看SHOW WARNINGS查询结果。
  2. 使用UDF function从共享库运行代码。在文档和互联网中查找示例。

关于c# - 在 C# 中捕获 MySQL 触发信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20345214/

相关文章:

c# - Asp.Net 中的空对象引用

c# - 统计某个类的对象被实例化的次数

c# - 如果我在未定义为任务的 IQueryable 上使用 await + ToListAsync() 是否正确

c# - 如何将 ScrollBar 添加到 Stackpanel

java - jpa原生查询控制实体(第3部分)

php - 使用php自动发送电子邮件

mysql - 使用 MySQL 导入大型 sql 文件

c# - 通过 C# 修改对象访问属性

.net - 是否有免费的模拟框架可以模拟非虚拟、静态或密封的方法和类?

c# - 异常管理错误