我在网上找了很多都是调用存储过程返回记录集的例子,但我的需求正好相反,想在C#里面调用Oracle存储过程传入参数为记录集,应用场景为:1 我的程序界面上,用户会输入很多字段值,这些字段值对应我数据库后台的两张表,
2 有张表是要插入一条记录(比如说部门信息),有张表是用户在程序界面上输入了几行就要插入几行(比如说部门下面的员工信息),
3 由于字段太多,我想把这些用户输入的字段值在程序里组织成两个dataSet或者dataTable变量,
4 然后把这两个记录集变量传给Oracle存储过程,然后在存储过程里插入表中。

解决方案 »

  1.   

    CREATE OR REPLACE TYPE "YSTYPE_ARRAY"    AS VARRAY(20000)  of varchar(100);
    CREATE OR REPLACE PROCEDURE "YSP_SAVEEXEDATA" (ai_cellid      in YSTYPE_ARRAY,
                                                as_tempID      in number) is
    BEGIN  FOR ii IN 1 .. ai_cellid.Count LOOP
      /*  insert into yst_savetable
          (cellid, bvalue)
        values
          (ai_cellid(ii), ai_exevalue(ii));*/
      END LOOP;
    end;你也可以用自定义类型的。如上
      

  2.   

    好像数据库是不支持直接传DataTable过来的。
    你可以把参数进行【,】号,或者其它符号来区分就可以直接取到了。。
      

  3.   

    A 把你的结果先行存入临时表,传进去个SQL语句,开启游标。B 把数据类型强制统一,用二维数组,第一层varray() of 第二层table of 
      

  4.   

    c#中对oralce只支持一维数组参数的传递,对于其二维数组的传递目前是没有找到对应的方法,采用一维数组字符串形式将数据传入存储过程,一维数据中的数据是以分隔符连接的字符串,然后在存储过程中分割字符串生成自定义对象实例,然后再做其他的操作。