写了个程序循环往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个表的数据回滚,不              让其插入,如上代码如何实现?

解决方案 »

  1.   

    数据库使用的是Mysql,用的.Net自带的MySql.Data
      

  2.   

    问题一答案:MYSQL 数据库默认为自动提交,检查命令为 : show variables like 'autocommit' ,
     "autocommit ON " 表示开启
    问题二答案:首先检查数据库表使用的是什么存储引擎(MyISAM引擎不支持事务),查看是否支持事务,如果支持,设置数据库为手动提交(关闭自动提交 ,在配置文件my.ini中加入如以下语句:[mysqld]   
    init_connect='set   autocommit=0  ),并在程序代码中添加事务相关代码
      

  3.   

    数据库引擎是InnoDB,但我按照你提供的show variables like 'autocommit' 没有看到类似"autocommit ON "的数据
      

  4.   

    你的数据库版本是多少 ? 是MYSQL吗 ?  不然使用 命令行试试看(DOS 或  sh )