Я пишу процедуру импорта и хочу, чтобы весь импорт был сбой при возникновении ошибки. Я использую базу данных MySQL, которая настроена на InnoDB и страницу 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();
Я прочитал о AUTOCOMMIT и как вы должны установить его в базу данных. Единственная проблема заключается в том, что если он отключит его, как он повлияет на все другие вставки в базу данных, у которых еще нет установленных транзакций. Также я не вижу, как включить или отключить автокоманду с C#.
Кто-нибудь знает, как вернуть мои транзакции?
Благодаря Шерил
Я решил написать свою собственную таблицу заголовков импорта, а затем, если она не удалась, я смогу удалить все записи, которые были вставлены, поскольку все они будут иметь importID. Таким образом, у меня также есть контрольный журнал о том, что импортируется и как часто. – Cheryl
Просто из интереса я добавил это в начало своей функции cmd.CommandText = "set autocommit = 0"; cmd.CommandType = System.Data.CommandType.Text; cmd.ExecuteNonQuery(); и он все еще не откат. – Cheryl