Commit d258b479 authored by 潘栩锋's avatar 潘栩锋 🚴

修复 在SQLite 使用 using (SQLiteTransaction tran = connection.BeginTransaction()),解决tran释放问题

parent 6cb82319
......@@ -491,9 +491,9 @@ namespace SQLite
/// <returns></returns>
public bool QueryTran(IEnumerable<string> queryList)
{
if (isHoldQueryTran)
if (isHoldQueryTran)//打包模式
{
holdQueryList.AddRange(queryList);
holdQueryList.AddRange(queryList);//记录SQLs
return true;
}
else
......@@ -504,30 +504,29 @@ namespace SQLite
{
connection.Open();
SQLiteTransaction tran = connection.BeginTransaction();
bool check = false;
try
using (SQLiteTransaction tran = connection.BeginTransaction())
{
foreach (string item in queryList)
bool check = false;
try
{
command.CommandText = item;
command.ExecuteNonQuery();
foreach (string item in queryList)
{
command.CommandText = item;
command.ExecuteNonQuery();
}
tran.Commit();//事务提交
check = true;//执行成功
}
tran.Commit();
check = true;
}
catch (Exception ex)
{
tran.Rollback();
check = false;
logger.Error(ex, Newtonsoft.Json.JsonConvert.SerializeObject(queryList));
throw ex;
}
finally
{
connection.Close();
catch (Exception ex)
{
//异常
tran.Rollback();//事务回滚
check = false;//执行失败
logger.Error(ex, Newtonsoft.Json.JsonConvert.SerializeObject(queryList));
throw ex;//抛出异常
}
return check;
}
return check;
}
}
}
......@@ -564,35 +563,36 @@ namespace SQLite
{
connection.Open();
SQLiteTransaction tran = connection.BeginTransaction();
bool check = false;
try
using (SQLiteTransaction tran = connection.BeginTransaction())
{
foreach (string item in holdQueryList)
bool check;
try
{
command.CommandText = item;
command.ExecuteNonQuery();
foreach (string item in holdQueryList)//全部SQL 打包为一个事务执行
{
command.CommandText = item;
command.ExecuteNonQuery();
}
tran.Commit();//事务提交
check = true;//执行成功
}
tran.Commit();
check = true;
}
catch (Exception ex)
{
tran.Rollback();
check = false;
throw ex;
}
finally
{
holdQueryList.Clear();
connection.Close();
isHoldQueryTran = false;
catch (Exception ex)
{
tran.Rollback();//异常出错,事务回滚
check = false;//执行失败
throw ex;//弹出异常
}
finally
{
holdQueryList.Clear();//清除 SQL
isHoldQueryTran = false;//退出打包模式
}
return check;
}
return check;
}
}
}
isHoldQueryTran = false;
isHoldQueryTran = false;//退出打包模式
return true;
}
/// <summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment