基于Sqlite和Sql Server中的嵌套事务--TransactionScrope

基于Sqlite:

public void AddTran(LogisInfo.Model.Advertiser model)
{
//事务行为的附加信息
TransactionOptions tranOption = new TransactionOptions();
tranOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
tranOption.Timeout = new TimeSpan(0, 2, 0);

try
{
//事务
using (TransactionScope tranScope = new TransactionScope(TransactionScopeOption.RequiresNew, tranOption))
{
//连接字符串
string connStr = DbHelperSQLite.ConnectionString;
if (connStr == null || connStr.Length == 0)
{
throw new ArgumentNullException("连接字符串为空!");
}

//保证基于同一个连接管道
using (SQLiteConnection conn = new SQLiteConnection(connStr))
{
int advertiserID = 0;

//一.添加广告商
using (SQLiteCommand cmd = new SQLiteCommand(conn))
{
//预备Sql语句和相关参数
StringBuilder strSql = new StringBuilder();
SQLiteParameter[] parameters = new SQLiteParameter[] { };
JoinSql_Advertiser(model, out strSql, out parameters);

//命令对象的预处理
DbHelperSQLite.PrepareCommandTran(cmd, strSql.ToString(), parameters);

//打开连接,紧接着执行命令
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
advertiserID = Convert.ToInt32(cmd.ExecuteScalar());
}

//二.添加广告商图片
if (model.AdvertImages.Count > 0)
{
for (int i = 0; i < model.AdvertImages.Count; i++)
{
LogisInfo.Model.AdvertiserImage advertImageModel = model.AdvertImages[i];
advertImageModel.AdvertiserID = advertiserID;

using (SQLiteCommand cmd = new SQLiteCommand(conn))
{
//预备Sql语句和相关参数
StringBuilder strSql = new StringBuilder();
SQLiteParameter[] parameters = new SQLiteParameter[] { };
JoinSql_AdvertiserImage(advertImageModel, out strSql, out parameters);

//命令对象的预处理
DbHelperSQLite.PrepareCommandTran(cmd, strSql.ToString(), parameters);

//打开连接,紧接着执行命令
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
cmd.ExecuteNonQuery();
}
}
}
}
tranScope.Complete();
}
}
catch (Exception ex)
{
throw ex;
}
}

 

你可能感兴趣的:(transaction)