对于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时进行分批插入

 

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

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

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

posted @ 2013-02-04 18:09  果果天涯  阅读(1786)  评论(7编辑  收藏  举报