但是用SqlTransaction 实现事务就比较麻烦了,因为目前的系统是低耦合的设计,数据访问层的方法都是单一功能的,一系列的、实现业务逻辑的操作都在业务逻辑层,用SqlTransaction 的话就破坏了分层。
我苦思冥想,是不是应该把业务逻辑性的方法都返回一个string型的SQL语句,装进一个List<string>中,然后再用SqlTransaction实现事务?这样就是稍微有些复杂,各位高手在事务处理上有什么好办法没?
16 个解决方案
#1
再问一下,用TransactionScope分布式事务必须得安装IIS 吗?
#2
只用过SqlTransaction,没用过你说的TransactionScope...爱莫能助
#3
顶
#4
public void ExeSql(string theSql)
{
using (SqlCommand theCommand2 = new SqlCommand())
{
theConn.Open();
SqlTransaction trans = theConn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
theCommand2.Connection = theConn;
theCommand2.Transaction = trans;
theCommand2.CommandText = theSql;
theCommand2.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw new ApplicationException(ex.Message);
}
finally
{
theConn.Close();
}
}
}
这个事处理类,我一直是这么用,不知道跟你说的有什么区别
#5
顶
#6
回4楼的:你这个方法就是我目前想到的唯一解决方案,不过有点麻烦,尤其是业务逻辑特别复杂的时候
#7
ding
#8
比如我要先查询,根据查询出来的结果再判断是否要添加、或修改其他表的数据等等复杂操作
#9
估计最终还是要用4楼的方法...
#10
vs2005以后不用安装iis
#11
由外面创建一个事务.
#12
在能够使用事务的时候都应该使用事务,不要使用过度
执行的SQL语句通过泛型实现传递List<T>
也可使用sql server分布式事务解决
#13
要运行快就是Sql,想运行超慢就用C#
#14
结贴去了~
#15
22222222222222222222
#16
这太简单了,写存储过程!一下搞定
#1
再问一下,用TransactionScope分布式事务必须得安装IIS 吗?
#2
只用过SqlTransaction,没用过你说的TransactionScope...爱莫能助
#3
顶
#4
public void ExeSql(string theSql)
{
using (SqlCommand theCommand2 = new SqlCommand())
{
theConn.Open();
SqlTransaction trans = theConn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
theCommand2.Connection = theConn;
theCommand2.Transaction = trans;
theCommand2.CommandText = theSql;
theCommand2.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw new ApplicationException(ex.Message);
}
finally
{
theConn.Close();
}
}
}
这个事处理类,我一直是这么用,不知道跟你说的有什么区别
#5
顶
#6
回4楼的:你这个方法就是我目前想到的唯一解决方案,不过有点麻烦,尤其是业务逻辑特别复杂的时候
#7
ding
#8
比如我要先查询,根据查询出来的结果再判断是否要添加、或修改其他表的数据等等复杂操作
#9
估计最终还是要用4楼的方法...
#10
vs2005以后不用安装iis
#11
由外面创建一个事务.
#12
在能够使用事务的时候都应该使用事务,不要使用过度
执行的SQL语句通过泛型实现传递List<T>
也可使用sql server分布式事务解决
#13
要运行快就是Sql,想运行超慢就用C#
#14
结贴去了~
#15
22222222222222222222
#16
这太简单了,写存储过程!一下搞定