我正在编写一个导入例程,并希望如果发生错误导致整个导入失败。我正在使用设置为InnoDB的MySQL数据库和一个用于驱动导入的asp页面。我想开始一个事务,然后在发生错误时回滚,或者在成功时提交。我的问题是,当第4行出现错误时,前3个条目保存在数据库中而不是回滚。MySQL和事务不回滚
这里是我的代码示例: -
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = new MySqlCommand();
MySqlTransaction tran = conn.BeginTransaction();
cmd.Connection = conn;
cmd.Transaction = tran;
int ErrorCount = 0;
do while read from file{
try{
if (fail validate){
ErrorCount ++;
break;
}
run store procedure 1 which does insert
run store procedure 2 which does insert
}
catch (exception e){
ErrorCount ++;
break;
}
}
if (ErrorCount == 0){
tran.Commit();
}
else{
tran.RollBack();
}
if (conn != null) conn.Close();
我看了一下自动提交,以及如何你必须将其设置在数据库中。唯一的问题是,如果将其设置为关闭,它将如何影响尚未设置事务的所有其他插入数据库的插入。此外,我无法看到如何设置自动提交打开或关闭从C#。
任何人都知道如何让我的交易回滚?
感谢 谢丽尔
我已经决定编写自己的导入头表,然后如果失败,我可以删除所有已经插入的记录,因为它们现在都会有一个importID。通过这种方式,我还有一个关于正在导入的内容和频率的审计跟踪。 – Cheryl 2010-11-10 20:44:36
出于兴趣,我将此添加到我的功能顶部 cmd.CommandText =“set autocommit = 0”; cmd.CommandType = System.Data.CommandType.Text; cmd.ExecuteNonQuery(); 它仍然没有回滚。 – Cheryl 2010-11-10 20:50:57