我有30个用户对象要往数据库里存,有一个存错了,就全部失败,我就想到了事务,可是查了一下,在代码中开事务,好象要用到connection对象,我不想改数据访问层,在业务也又不想引用connection,所以想在存储过程中加事务,但是不知道如何把一个保存了30个对象的集合传过去..存储过程中该用什么类型来接受呢?

解决方案 »

  1.   

    您说的是
    Object[30] obj = {user1,user2...};
    可是user也是可封装了很多数据的对象,我在存储过程中又该怎么取user对象里的值呢?
      

  2.   

      你就是一个 list.count =30 么!?
       直接这样嘛!
      先在外面读出来 直接将 这个list 传进SP
      到SP里面来遍历插入
      循环之前定义一个 savapoint
      遇到异常 直接 回滚! 就ok了
      

  3.   

    sql2008可以接受数据集作为传入参数
    (我记不清是行集还是数据集了,反正可以满足楼主的需要)
      

  4.   

    首先...事务不只是指数据库事务...你查的方法不对,去看看System.Transactions命名空间...其次...现在的主流DBMS基本上都是关系型数据库,无法支持你的业务对象,不可以传递对象参数...最后...较新的DBMS可以使用XML类型,你可以在SP中解析XML,不过得不偿失...
      

  5.   

      把 list 作为 数组传到sp
      那在sp 肯定也要用 数组接受
      create or replace package aa
    is
     type string_array is table of varchar2(100) index by binary_integer;
     type int_array is table of number  index by binary_integer;
    PROCEDURE AddProductVolume
    (
     P_CID in varchar2,
     P_PSID in string_array,
     P_INTEGRAL in int_array,
     P_INTEGRALSTARTDATE in string_array,
     P_INTEGRALENDDATE in string_array,
      P_PRICE in int_array,
     p_ret out int_array 
    );
    end aa;
    这是oracle 的列子!你自己对照这看吧
      

  6.   

    呵呵,好像SqlSv05没什么好办法,你应该历遍行集逐个提交