我想创建一个 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 语句没有捕获它(我假设它不是异常/错误信号而是警告)。
请帮助我:
- 要设置的适当信号不会停止我的触发器的进一步代码。
- 如何在 C# 中捕获这些不同的信号以显示不同的消息。
或任何解决方法也将受到赞赏。 非常感谢。
最佳答案
MySQL 中没有特殊的机制。但请尝试这些解决方法:
- 设置信号状态01000,然后查看SHOW WARNINGS查询结果。
- 使用UDF function从共享库运行代码。在文档和互联网中查找示例。
关于c# - 在 C# 中捕获 MySQL 触发信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20345214/