C# 用C语言捕获MySQL触发信号#

C# 用C语言捕获MySQL触发信号#,c#,mysql,.net,error-handling,triggers,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)

我想创建一个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
我还尝试了
向sqlstate'01000'发送信号
,但我在C#中的catch语句没有捕获到它(我假设它不是异常/错误信号,而是警告)

请帮助我:

  • 要设置的适当信号不会停止触发器的进一步代码
  • 如何在C#中捕捉这些不同的信号以显示不同的消息
  • 或任何解决办法也将受到赞赏。
    非常感谢。

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

  • 设置信号状态01000,然后检查显示警告查询结果
  • 用于从共享库运行代码。在文档和互联网上查找示例

  • 无法从成功完成的触发器获取警告;MySQL没有保存它们。MySQL bug跟踪系统中至少提到过几次(参见和):

    这不是一个bug。SQLSTATE“01xxx”表示一个警告和多个警告 根据SQL语句,在触发器执行结束时不会保留 标准

    或者,您可以尝试在触发器中设置变量或临时表,并在以后检查:

    SET @wrning = "This is a warning";
    CREATE TEMPORARY TABLE IF NOT EXISTS trigger_warnings (msg VARCHAR(255));
    INSERT INTO trigger_warnings (msg) VALUES ('This is a warning.');
    ...
    SELECT @wrning;
    SELECT * FROM trigger_warnings;
    

    我刚刚发现如何通过MySQL
    SIGNAL sqlstate'45000'
    SET message\u text=msg,MySQL\u errno=1001发送不同的错误号
    this
    mysql\u errno
    我可以用C语言捕获,但这只能在catch块/某些异常中读取。所以我必须使用45000这样的错误信号,但如果我使用01000这样的非错误信号,我无法在catch块中捕捉到它。如果我使用一些不会停止触发代码(比如01000)的
    signal sqlstate
    ,我如何读取C语言中的
    mysql\u errno
    ?Thankshow WARNINGS将显示当前会话的最后消息;如果您将在调用INSERT/UPDATE/DELETE语句的会话中运行它,那么您将看到警告。