使用transaction后,链接无法关闭

sky-defender 2010-03-22 04:38:36
下面这段代码,使用transaction之前没有问题,但是使用transaction之后,无法将oleConnection关掉,为什么?



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);
}


正常代码:

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();
}
...全文
102 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky-defender 2010-03-23
  • 打赏
  • 举报
回复
多次尝试,将cmd.Connection设为null就可以了
ACMAIN_CHM 2010-03-22
  • 打赏
  • 举报
回复
1。 connection 先close
2。 connection 对象也要销毁
sky-defender 2010-03-22
  • 打赏
  • 举报
回复
有问题的代码应该是这样的:

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);
}

CloseDB();
}


少帖了
CloseDB();
sky-defender 2010-03-22
  • 打赏
  • 举报
回复
没有错误,就是MR_System_All.mdb这样一个数据库,整个功能完成了,但是还有一个MR_System_All.ldb的临时文件存在
WWWWA 2010-03-22
  • 打赏
  • 举报
回复
提示什么,单机还是网络

7,732

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧