再问下三层中的事务问题?
在三层中,我想大家也应该有碰到在业务层中调用 多个 数据层的方法吧,这时如果要使多个方法参与事务的话,大家是怎么做的呢
目前我用的是TransactionScope,但是有很多问题,想换种方法,
大家给点意见
[解决办法]
帮顶 jf
[解决办法]
我用的是”SqlTransaction“,你用的那个东西确实有很多问题
[解决办法]
我的部分代码,你看看,我用的没事
sqlTrans = SqlHelper.GetSqlTransaction();
if (SqlHelper.ExecuteNonQuery(sqlTrans, CommandType.Text, strBasicInfoSql, smpBasicInfo) > 0)
{
if (SqlHelper.ExecuteNonQuery(sqlTrans, CommandType.Text, insertBillInfoSql, billInfo) > 0)
{
if (SqlHelper.ExecuteNonQuery(sqlTrans, CommandType.Text, insertDetailInfoSql, detailInfo) > 0)
{
sqlTrans.Commit();
}
else
{
sqlTrans.Rollback();
[解决办法]
事务:
1.在存储过程中控制事务——这个是最简单、高效的方法
2.使用ADO.NET Transaction——如果你没使用存储过程(而是把SQL代码写在DAL层),并且事务是同一个数据库链接,可以使用此方法
3.TransactionScope——在业务层把多个DAL方法组成一个事务,且可以自动跨数据库链接。如果事务跨多个数据库链接这个应该是目前最好的办法。
[解决办法]
SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringProfile);
conn.Open();
SqlTransaction trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
SqlHelper.ExecuteNonQuery(trans, CommandType.Text, sqlDelete, param);
SqlHelper.ExecuteNonQuery(trans, CommandType.Text, sqlInsert, parms);
trans.Commit();
}
catch (Exception e)
{
trans.Rollback();
throw new ApplicationException(e.Message);
}
finally
{
conn.Close();
}
[解决办法]