首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Access >

使用transaction后,链接无法关闭,该如何解决

2012-02-03 
使用transaction后,链接无法关闭下面这段代码,使用transaction之前没有问题,但是使用transaction之后,无法

使用transaction后,链接无法关闭
下面这段代码,使用transaction之前没有问题,但是使用transaction之后,无法将oleConnection关掉,为什么?

C# code
 

public static void OpenDB()
        {
            if (_oleConnection.State != ConnectionState.Open)
            {
                _oleConnection.Open();
            }
        }

        public static void CloseDB()
        {
            if (_oleConnection.State != ConnectionState.Closed)
            {
                _oleConnection.Close();
            }
        }


public static void SaveControl(List <SmartControlData> list)
        {
            string strSqlUpdate = "update SMT_Control_Table set PreviousID=?, NextID=? where ID=?;";


            OpenDB();

            for (int i = 0; i < 1300; i++)
            {
                SmartControlData Folder = list[i];
                OleDbParameter[] parameters = new OleDbParameter[3];

                parameters[0] = new OleDbParameter("PreviousID", OleDbType.VarChar, 50);
                if (Folder.PreviousID == null)
                {
                    Folder.PreviousID = "";
                }
                parameters[0].Value = Folder.PreviousID;

                parameters[1] = new OleDbParameter("NextID", OleDbType.VarChar, 50);
                if (Folder.NextID == null)
                {
                    Folder.NextID = "";
                }
                parameters[1].Value = Folder.NextID;

                parameters[2] = new OleDbParameter("ID", OleDbType.VarChar, 50);
                parameters[2].Value = Folder.ID;
                //OpenDB();
                OleDbCommand cmd = _oleConnection.CreateCommand();

                cmd.CommandText = strSqlUpdate;

                OleDbTransaction transaction = _oleConnection.BeginTransaction();

                cmd.Transaction = transaction;

                cmd.Parameters.Add(parameters[0]);
                cmd.Parameters.Add(parameters[1]);
                cmd.Parameters.Add(parameters[2]);
                cmd.ExecuteNonQuery();
                transaction.Commit();


                //CloseDB();
                //ExecuteNonQuery(strSqlUpdate, parameters);               
            }



正常代码:
C# code
public static void SaveControl(List<SmartControlData> list)        {            string strSqlUpdate = "update SMT_Control_Table set PreviousID=?, NextID=? where ID=?;";            OpenDB();            for (int i = 0; i < 1300; i++)            {                SmartControlData Folder = list[i];                OleDbParameter[] parameters = new OleDbParameter[3];                parameters[0] = new OleDbParameter("PreviousID", OleDbType.VarChar, 50);                if (Folder.PreviousID == null)                {                    Folder.PreviousID = "";                }                parameters[0].Value = Folder.PreviousID;                parameters[1] = new OleDbParameter("NextID", OleDbType.VarChar, 50);                if (Folder.NextID == null)                {                    Folder.NextID = "";                }                parameters[1].Value = Folder.NextID;                parameters[2] = new OleDbParameter("ID", OleDbType.VarChar, 50);                parameters[2].Value = Folder.ID;                ExecuteNonQuery(strSqlUpdate, parameters);                                          }            CloseDB();        }


[解决办法]
提示什么,单机还是网络
[解决办法]
1。 connection 先close
2。 connection 对象也要销毁

热点排行