dal: public IDbTransaction BeginTransaction()
{
return SqlHelper.CreateConnection().BeginTransaction();
} public void Insert(IDbTransaction trans, UserInfo user)
{
SqlParameter[] cmdParms = this.GetParameters(user);
string cmdText = @"insert into [Users] (" + FIELDS_NONID + ") values(" + PARMS + "); select @@identity;";
Object val = SqlHelper.ExecuteScalar(trans as SqlTransaction, CommandType.Text, cmdText, cmdParms);
user.UserId = Convert.ToInt32(val);
}bll: public void Insert(UserInfo user)
{
using (var trans = dao.BeginTransaction())
{
try
{
dao.Insert(trans, user);
dao.Insert(trans, user);
dao.Insert(trans, user);
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
}
捕获到异常的时候是否应该显式地关掉连接呢。
{
return SqlHelper.CreateConnection().BeginTransaction();
} public void Insert(IDbTransaction trans, UserInfo user)
{
SqlParameter[] cmdParms = this.GetParameters(user);
string cmdText = @"insert into [Users] (" + FIELDS_NONID + ") values(" + PARMS + "); select @@identity;";
Object val = SqlHelper.ExecuteScalar(trans as SqlTransaction, CommandType.Text, cmdText, cmdParms);
user.UserId = Convert.ToInt32(val);
}bll: public void Insert(UserInfo user)
{
using (var trans = dao.BeginTransaction())
{
try
{
dao.Insert(trans, user);
dao.Insert(trans, user);
dao.Insert(trans, user);
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
}
捕获到异常的时候是否应该显式地关掉连接呢。
还想请教一下,using (var trans = dao.BeginTransaction()) 用了这样的using结构,没抛出异常的情况,
与它关联的Connection会不会关闭,还是只是释放了Transaction?
最后改写成这样,不知道有没有更简洁的办法.. public void Insert(UserInfo user)
{
using (var trans = dao.BeginTransaction())
{
using (var conn = trans.Connection)
{
try
{
dao.Insert(trans, user);
dao.Insert(trans, user);
dao.Insert(trans, user);
// trans.Rollback();
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
finally
{
conn.Close();
}
}
}
}
using (var trans = dao.BeginTransaction())
{
try
{
dao.Insert(trans, user);
dao.Insert(trans, user);
dao.Insert(trans, user);
// trans.Rollback();
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
finally
{
if(!trans.Connection.IsClose())
trans.Connection.Close();
}
}
finally
{
if (trans != null)
{
if (trans.Connection != null)
{
if (trans.Connection.State != System.Data.ConnectionState.Closed)
{
trans.Connection.Close();
}
else
{
Console.WriteLine("Connection is Closed");
}
}
else
{
Console.WriteLine("Connection is Disposed");
}
}
else
{
Console.WriteLine("Transaction is Disposed");
}
}
{
//方法1
//方法2:
scope.Complete();
}
谢谢,如果用了TransactionScope,是否还需要使用Connection.BeginTransaction呢,能否结合主题的代码给个稍微详细点例子..