写了个程序循环往10个表中添加数据,循环外面用的事务MySqlTransaction的BeginTransaction,循环完后用的BeginTransaction的commit()方法,而且在此事务外面也写了try...catch(MySqlTransaction.Rollback())
using (MySqlTransaction trans = conn.BeginTransaction())
{
MySqlCommand cmd = new MySqlCommand();
try
{
//循环
foreach (DictionaryEntry myDE in SQLStringList)
{
插入10个表数据
}
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
小弟想问下 在foreach循环中如果出现服务器停机了,没有循环完(例:只循环了5次就OVER了),而后面的trans.Commit()就未执行,但是数据库中却添加了数据问题一:为什么事务没有提交数据照样插入数据库?
问题二:如何出现服务器停机的时候只插入5个表数据(必须往10个表插入数据),我想让这5个表的数据回滚,不 让其插入,如上代码如何实现?
using (MySqlTransaction trans = conn.BeginTransaction())
{
MySqlCommand cmd = new MySqlCommand();
try
{
//循环
foreach (DictionaryEntry myDE in SQLStringList)
{
插入10个表数据
}
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
小弟想问下 在foreach循环中如果出现服务器停机了,没有循环完(例:只循环了5次就OVER了),而后面的trans.Commit()就未执行,但是数据库中却添加了数据问题一:为什么事务没有提交数据照样插入数据库?
问题二:如何出现服务器停机的时候只插入5个表数据(必须往10个表插入数据),我想让这5个表的数据回滚,不 让其插入,如上代码如何实现?
"autocommit ON " 表示开启
问题二答案:首先检查数据库表使用的是什么存储引擎(MyISAM引擎不支持事务),查看是否支持事务,如果支持,设置数据库为手动提交(关闭自动提交 ,在配置文件my.ini中加入如以下语句:[mysqld]
init_connect='set autocommit=0 ),并在程序代码中添加事务相关代码