我正在使用Mysql數據庫(版本5.5)的C#應用程序。 我遇到了一個問題,我需要捕獲Mysql中發生的異常。 不管它是在Mysql還是在dotNet中被捕獲都沒關係。問題是我想在發生異常/錯誤時回滾我以前的所有工作;無論是MySqlException還是自定義的。 是的,我嘗試使用TransactionScope
和MySqlTransaction
,但它並沒有回滾我的工作。 如果有人有任何想法或建議,請指導我。 謝謝。在mysql中的交易
編輯:代碼
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();
這是Procdeure:
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
如果您使用InnoDB表,我看不到任何TransactionScope不起作用的原因。如果你使用MyISAM表,它將不會工作,因爲MyISAM沒有事務。 – 2013-05-09 07:59:53
請與SO分享您的相關代碼。我們不能說沒有什麼可看的東西,爲什麼它不適合你。 – Raxr 2013-05-09 08:00:11
所有的InnoDB表格 – vaibhav 2013-05-09 08:00:20