對於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時進行分批插入

 

如果有園友也曾遇到類似問題 可以參考 。

第一次寫博,各種問題 敬請諒解!

最后借用子陽兄的結束語:希望這篇文章能給你帶來幫助!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM