Oracle資料庫學習小結(三)---大資料批量插入bulkcopy
上篇文章中說到要跟大家聊聊bulkcopy這個的用法,今天我們就來了解一下這個用法。在之前我們寫程式的時候如果遇到需要往資料庫中插入資料你會怎麼辦?可能第一反應是加個迴圈一條一條插入唄,如果我們的資料僅僅是幾十條或者幾百條完全沒有問題,迴圈使用add對資料庫的效能消耗也不是特別大,但是萬一資料量特別特別大,5位數以上的資料怎麼辦,難道還是要迴圈插入嗎?那樣就太耗費效能了。
SqlBulkCopy和OracleBulkCopy都是存在的,只是應用的資料庫不同。
SqlBulkCopy在.NET Framework 2.0之後的版本中就可以使用了,它位於程式集System.Data中(System.Data.dll中),使用時需要引用System.Data.SqlClient.SqlBulkCopy;其中它的寫入方法WriteToServer()支援多種過載,其中包括DataRow[]、DataTable、DbDataReader和IDbDataReader等等。給大家一個連結:
OracleBulkCopy在.NET Framework 1.0及其以後的版本就可以使用,如果你使用的是PL/SQL的話需要11G版本之後才可以使用,它位於程式集Oracle.DataAccess中(Oracle.DataAccess.dll中),使用是需要引用Oracle.DataAccess.Client,同樣它的寫入方法WriteToServer()也支援那些引數。
我們如果需要大批量的匯入資料時可以考慮使用這個方法。下面給大家一個OracleBulkcopy的C#程式碼,僅供大家參考:
public static void BulkToDB(DataTable dt, string targetTable) { string err = "大批量插入時產生錯誤"; OracleConnection conn = new OracleConnection(conStr); //System.Data.OracleClient.OracleConnection conn = new OracleConnection(conStr); if (conn.State != ConnectionState.Open) { conn.Open(); } OracleBulkCopy bulkCopy = new OracleBulkCopy(conn, OracleBulkCopyOptions.Default); bulkCopy.BatchSize = 100000; bulkCopy.BulkCopyTimeout = 260; bulkCopy.DestinationTableName = targetTable; try { if (conn.State != ConnectionState.Open) { conn.Open(); } // conn.Open(); if (dt != null && dt.Rows.Count != 0) { bulkCopy.WriteToServer(dt); } } catch (Exception ex) { Log.WriteLog(err, ex); } finally { conn.Close(); if (bulkCopy != null) bulkCopy.Close(); } }
小編當時使用的環境是PL/SQL 11G版本,1W條資料也就2秒就完事了,特別快,網上有人說bulkcopy能達到4000條/秒,比較可靠。
網上關於BulkCopy的使用方法挺多的,感興趣的可以搜一下。
當然了大資料的儲存方法不僅僅只有這一種方法,下篇文章將給大家介紹另一種方法,通過拼接插入語句來批量操作。