1、我用OLEDB做PROVIDER,用COMMAND提交INSERT语句,如何一次性把多条INSERT语句提交,每个语句用什么来分割,我尝试了 空格,回车,分号,都不行,错误提示无效语句或者语句没有结束;而这些语句在SQL中都可以的。
2、当我循环调用以下函数插入数据库的时候,数据一多,插入快了,就会报Ora-01000: 超出打开游标的最大数 ,后来我加上myConn.Open和myConn.Close后解决了这个错误信息,但是又出现了性能急剧下降。请问这个问题如何解决?
public bool Insert(string myInsertQuery )
{   
    OleDbCommand myOracleCommand=new OleDbCommand(myInsertQuery);     
    myOracleCommand.Connection = myConn; 
    myOracleCommand.ExecuteNonQuery();     
   return true;
}  
3、开始的时候每次插入都要NEW一个COMMAND实例,但是后来我想是不是把COMMAND对象作为一个全局对象,在初始化时进行NEW了,然后在每次INSERT时用这个COMMAND。可是当我这样做后,发现速度比之前还慢了,而且经常卡死了。
4、我现在多个线程同时进行插入的操作,每个线程单独的COMMAND和CONNECTION对象,如果我把这两个对象作为多个线程共享的全局对象,这样是否会提高性能和速度呢?
5、ORACLE的存储过程能否用数组作为参数传递,这样我可以一此行提交很多记录,让ORACLE在存储过程里进行INSERT,这样 就可以减少数据库往返过程的消耗。不知道我这种想法是否可行。
6、用C#调用SQLLOAD应该怎么写,这种方法比我们自己去INSERT是否快很多?另外在SQLLOAD的CONTROL文件里怎么进行条件判断,比如某个字段为空时这个记录就不插入。

解决方案 »

  1.   

    1 use stored procedures
    2 write to external database (csv files for example)
    3 dispose your command and your connection as soon as possible
    4 see above
    5 see 2
    6 http://www.cnblogs.com/binking/archive/2006/11/21/567587.html
      

  2.   

    你可以把你所有SQL语句作为字符串传递进去,然后在存储过程里面把SQL语句逐条分解出来单独执行可否?在ORACLE里解决的办法应该很多
      

  3.   

    你检查下多条SQL语句是否符合PL/SQL的语法,应该可以向ORACLE提交PL/SQL块
      

  4.   

    TO jiangsheng(蒋晟.Net[MVP]) :
    TKS,but how to batch insert using stored procedure? andy sample code for me ,tks
      

  5.   

    http://forums.oracle.com/forums/thread.jspa?threadID=305918&tstart=0