使用transaction后,链接无法关闭

sky-defender sky-defender 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面这段代码,使用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();
}
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
sky-defender
Access 7,731 成员 28,797 内容