日期:2014-05-20  浏览次数:20874 次

方法的事务处理或一个集作为参数传给存储过程
谁能回答?分不够,我再加150分~~

问题一:
A层为表示层-->   B层为数据操作--> C层数据操作通用层--> D数据库
以上层次
我A中调用方法B,注意B没有使用ADO.NET,但现在我的A在操作B的时候,我有可能执行
多个B方法,这些方法是操作数据的,

我想在A中实现事务,还能实现吗?

如果不行,那就请教问题二
问题二:
把一个List <> 之类的集如何作为参数传到存储过程,存储过程又是如何来
遍历它?


------解决方案--------------------
问题一可以实现,它的实现可以来自SqlConnection.BeginTransaction 方法的实现,用这个方法开始一个事务,可以用Commit事务,也可RollBack事件.

第二个问题也可以解决,不过不是直接把List <> 传到存储过程,而是把这个List <> 组织成一个字符串,或Xml字符串,这样用Sql的系统存储过程来分析它.
------解决方案--------------------
我们一般在自己的项目中,使用NHibernate等持久化工具来维持高层的事务支持,类似这些工具,构建事务对象,并将事物对象构造在表示层(其实一般是逻辑层)中,虽然增加了不同层次的耦合,但是并没有太大坏处。
关于向数据库传递复杂对象,我想只要可以序列化,就没有问题吧。
------解决方案--------------------
hbxtlhx(平民百姓) ( ) 信誉:112 Blog 2007-1-23 16:01:06 得分: 0



问题一可以实现,它的实现可以来自SqlConnection.BeginTransaction 方法的实现,用这个方法开始一个事务,可以用Commit事务,也可RollBack事件.

第二个问题也可以解决,不过不是直接把List <> 传到存储过程,而是把这个List <> 组织成一个字符串,或Xml字符串,这样用Sql的系统存储过程来分析它.



这个说的不错
不过第二个 我想 这样的逻辑处理还是不交给Sql为妙
毕竟程序是人写的 易于维护和理解 也很重要 我相信不在Sql里面楼主需要的功能肯定也可以实现
------解决方案--------------------
对于问题一:

能不能用事务还得看具体情况,要保证你的所有方法中用的是同一个Connection,在调用方法之前用这个Connection开启一个事务,方法中的所有Command的Transaction都要设置成同一个事务(即由前面的Connection开启的事务)..只有这样才可以..

也就是说想做在一个事务里的所有Command都共一个Transaction..

for example:

SqlConnection con=new SqlConnection( ".. ");
SqlTransaction tran=con.BeginTransaction();
SqlCommand cmd1=new SqlCommand( ".. ",con);
cmd1.Transaction=tran;
SqlCommand cmd2=new SqlCommand( ".. ",con);
cmd2.Transaction=tran;
....
//执行
....
//如果没有异常tran.Commit();
//如果有异常tran.RollBack();
...


TO:问题二

我也觉得这样的逻辑最好不要交给数据库来处理,效率低,也不利于管理 ...