使用transaction后,链接无法关闭

sky-defender 2010-03-22 04:44:38
下面这段代码,使用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();
}


...全文
61 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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