我尝试着用SQLServer的方法批量导入了一下,但是Update方法不执行,也不报异常,我的代码如下:    private OracleDataAdapter odad;
   public static int InsertBatch(DataTable dt, List<OracleType> DbTypeList,string strtable)
    {
        getConnection();
        int count = 0;
        string strfields = "";
        string strvalues = "";
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            string strfiled = dt.Columns[i].ColumnName;
            strfields += strfiled + ",";
            strvalues += "@" + strfiled + ",";
        }
        if (strfields != "")
        {
            strfields = strfields.Substring(0, strfields.LastIndexOf(","));
            strvalues = strvalues.Substring(0, strvalues.LastIndexOf(","));
        }        try
        {
            if (ocon.State != ConnectionState.Open) ocon.Open();
            odad = new OracleDataAdapter();
            //建立InsertCommand
            StringBuilder sb = new StringBuilder("");
            sb.Append("INSERT into " + strtable + " (" + strfields + ") VALUES(");
            sb.Append(strvalues + ")");
            odad.InsertCommand = new OracleCommand();
            odad.InsertCommand.CommandText = sb.ToString();
            odad.InsertCommand.Connection = ocon;
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                string filed = dt.Columns[i].ColumnName;
                string strvalue = "@" + filed;
                OracleParameter oparam = new OracleParameter();
                oparam.ParameterName = strvalue;
                oparam.OracleType = DbTypeList[i];
                oparam.SourceVersion = DataRowVersion.Current;
                oparam.SourceColumn = filed;
                odad.InsertCommand.Parameters.Add(oparam);
            }
            count = odad.Update(dt);
        }
        catch (Exception ex)
        {
            count = 0;
        }
        finally
        {
            if (ocon != null)
                ocon.Close();
        }
        return count;
    }
方法中的参数List<OracleType> DbTypeList,是与dt中每一列一一对应的
执行到count = odad.Update(dt);的时候没有异常,也并未将数据插入到数据库中,请问各位,怎么才能执行DataTable的批量导入Oracle数据库操作啊?

解决方案 »

  1.   

    如果是Oracle 11G的话可以引用Oracle.DataAccess.dll中使用OracleBulkCopy批量导入数据,效率很高 catch (Exception ex)
            {
                count = 0;
            }
    异常被捕获掉了,你可以去掉之后看是不是报异常
      

  2.   

    我是走的断点,如果异常的话应该会走catch块的,不过并没有执行catch块…………用的是Oracle10G…………
      

  3.   

    楼主好像忘记设置oparam.Value了
      

  4.   

    呃………………oparam.Value…………在SQLServer中貌似不用设置啊…………要怎么设置?循环提取每一个字段的值并赋值吗?
      

  5.   

    二楼推荐的BulkCopy应该是效率最高的。
      

  6.   

    有比较详细一点的讲解吗?确实没用过OracleBulkCopy,而且我用的是Oracle10g
      

  7.   

    ddddddddddddddddddddddddddddddddddddddddddddddd