• 对于ODP.NET的一点小笔记


    大家应该听说过odp.net,其定义为:

    ODP.NET 是ORACLE公司为.NET开发者发布的一个 .NET 使用 ORACLE 数据库的类库

    相对于传统的ado.net而言 操纵oracle数据库的速度。odp.net要快很多倍。从我自己的使用情况来说,因为odp.net支持批量新增。在向oracle中增加100w条数据(单列,int类型),时间大概在
    1-2秒。这个是我直观判断,并没有用Stopwatch做精确计算。但是从别人的测试中得知,一般情况下100w条单列Int数据插入时间在一秒以内! 这个速度还是比较惊人了。
    但是要注意一点的是,在批量插入数据的时候,一次性插入的数量应该是有一个限值的。
    这是我的代码:
     1         private static void InsertData(string tableName, string[] strID, string[] strGDFType, GDFCheckForm form)
     2         {
     3             try
     4             {
     5                 string connectStr = string.Format("Data Source = {0}; User ID = {1}; Password = {2};Persist Security Info=True", oracleDataSource, databaseUserID, databasePassword.ToLower());
     6                 using (OracleConnection conn = new OracleConnection(connectStr))
     7                 {
     8                     OracleCommand command = new OracleCommand();
     9                     command.Connection = conn;
    10                     command.ArrayBindCount = strID.Length;
    11                     command.CommandText = "insert into " + tableName + " values(:ID,:GDFType)";
    12                     conn.Open();
    13                     command.Parameters.Add(new OracleParameter("ID", OracleDbType.NVarchar2, strID, ParameterDirection.Input));
    14                     command.Parameters.Add(new OracleParameter("GDFType", OracleDbType.NVarchar2, strGDFType, ParameterDirection.Input));
    15                     command.ExecuteNonQuery();
    16                     form.WriteLog("新增table:" + tableName);
    17                 }
    18             }  
    19            catch (Exception e)
    20             {
    21                 string msg = "执行InsertData方法时出错" + e.Message + "tableName:" + tableName;
    22                 Logger.IsSucceed = false;
    23                 form.WriteLog(msg);
    24                 Logger.Write(msg);
    25             }
    26 
    27         }

    当数组strID(我的程序中,strID和strGDFType的长度是相等的)的长度超过200w时,方法

      command.ExecuteNonQuery();

    会发生异常:未将对象引用到对象的实例。

    我在仔细检测代码时发现 应该是批量新增时一次性插入的数据量太大(这是我的主观推断,有待高手验证)  因此最后的解决方案是在数据量大于200w时进行分批插入

    如果有园友也曾遇到类似问题 可以参考 。

    第一次写博,各种问题 敬请谅解!

    最后借用子阳兄的结束语:希望这篇文章能给你带来帮助!

  • 相关阅读:
    条件分支if与else的用法小结
    Pandas的loc,iloc与ix的用法及区别
    决策树参数介绍
    列表,元组,字典三种序列之浅谈
    今日浅谈循环 for与while
    电脑重生
    学而201105期蘑菇班学员成绩单(高级)
    悬赏公告
    学而201005期蘑菇学员成绩单
    学而201011期蘑菇班学员成绩单
  • 原文地址:https://www.cnblogs.com/yeguo/p/odpnet.html
Copyright © 2020-2023  润新知