现在在做一个项目,C#+Oracle,用的是vs2005,.net2.0的OraceClient.dll,Oracle10g
我想将表,DataTable作为一个参数出入数据库进行批量的处理,因为从数据库中读出的数据在内存中做了很多的处理,需要批量的更新数据库。
我现在不明白的两点:
第一,传入Oracle存储过程中的时候,在C#代码中,怎么写传入的类型?OracleType.Cursor类型吗?还是别的什么类型?
第二,在存储过程中,怎么定义这个表的类型,怎么进行操作这个表?谢谢!

解决方案 »

  1.   

    第二:传的是表名还是整表的数据?若是表名则用动态sql,若是整表数据用cursor,问题是数据还是从数据库得来的,所以传入参数用表名比较合适。
      

  2.   

    是单张表的话,不需要做这么复杂了,直接有程序调用batchupdate的接口就可以了。对于C#不是很清楚了,不过java的jdbc就是提供了batchupdate的功能了,c#有很对都和java比较相似,这里是不是也有这样的接口呀。如果不用这样的形式的话,就用数组作为传入参数,然后遍历这个数组就来update指定的记录就可以了。关于数组的定义和使用可以g一下相关的用法。
      

  3.   

    您说的数组我是知道的,但是数组的处理比较麻烦,我看了10g中可以自定义表,进行相应的处理;您说的batchupdate我可以验证一下,谢谢!
      

  4.   

    可以传入表名,然后在过程里面用游标来做
    type v_tcursor is ref cursor;
    v_cursor v_tcursor;
    begin
    v_sql:='select * from '||p_tname;
    open v_cursor for v_sql;
    end;
      

  5.   

    脚步(表名、字段名、数据库名)作为参数,需要用动态的sql来执行需要用execute immediate来运行
      

  6.   

    实现方案1
    先把数据存入一个临时表中(insert操作)
    然后再存储过程中操作这个临时表的数据实现方案2
    在db中建立一个数组类型(type),每个数组对应你的表的一列数据,这样你才能够将整个表数据传入存储过程处理。在这里你最好控制好你可护短的表的记录数,可能会一样性能。如果数据量大,你最好采用批处理方式。以上2种实现方式仅供参考。