Я пишу процедуру импорта и хочу, чтобы при импорте произошел сбой всего импорта. Я использую базу данных MySQL, которая установлена на InnoDB, и страницу asp для управления импортом. Я хочу начать транзакцию, а затем выполнить откат, если произошла ошибка, или зафиксировать, если она прошла успешно. Моя проблема заключается в том, что при возникновении ошибки в строке 4 первые 3 записи сохраняются в базе данных, а не откатываются.
Вот пример моего кода: -
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 #.
Кто-нибудь знает, как откатить мои транзакции?
Спасибо
Шерил