我正在使用 Mysql 数据库(5.5 版)开发 ac# 应用程序。我面临一个问题,我需要捕获 Mysql 中发生的异常。不管是在Mysql中还是在dotNet中都被抓到了。问题是我想在发生异常/错误时回滚我以前的所有工作;无论是 MySqlException 还是自定义的。是的,我尝试使用TransactionScope
,MySqlTransaction
但它并没有回滚我的工作。如果有人有任何想法或建议,请指导我。谢谢。
编辑:代码
MySqlConnection con = new MySqlConnection(cnstring);
if (con.State == ConnectionState.Open)
{
con.Close();
}
con.Open();
MySqlCommand cmd;
TransactionScope ob = new TransactionScope();
try
{
cmd = new MySqlCommand("testProcedureSignal", con);
cmd.Parameters.Add(new MySqlParameter("pval", 1));
cmd.Parameters.Add(new MySqlParameter("@intException", MySqlDbType.Int32) { Direction = ParameterDirection.Output });
cmd.Parameters.Add(new MySqlParameter("@strErrorMessage", MySqlDbType.VarChar) { Direction = ParameterDirection.Output });
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
}
catch (MySqlException e)
{
con.Close();
ob.Dispose();
return;
}
ob.Complete();
con.Close();
这是程序:
CREATE PROCEDURE `testProcedureSignal`(
pval INT,
OUT intException INT,
OUT strErrorMessage VARCHAR(255)
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN
ROLLBACK;
END;
SET intException = 100;
START TRANSACTION;
INSERT INTO demo (data) values (intException);
SET intException = intException + 10;
INSERT INTO demo (data) values (intException);
DROP TABLE teeeee;-- this table does not exist
INSERT INTO demo2 (data1,data2) values ('demo2',intException + 10);
SET intException = 111;
SET intException = 2;
COMMIT;
END