標籤:nbsp 批量插入 new catch public tab 儲存 ram 資料
批量的的資料匯入資料庫中,盡量少的訪問資料庫,高效能的對資料庫進行儲存。
採用SqlBulkCopy來處理儲存資料。SqlBulkCopy儲存大批量的資料非常的高效,將記憶體中的資料表直接的一次性的儲存到資料庫中,而不需要一次一次的向資料庫Insert資料。
經過幾次實驗,百萬層級的資料表,也只需幾秒時間內就可以完全的存入資料庫中,其速度,比傳統的Insert into方法不止快很多倍。
下面看代碼:
/// <summary> /// 批量插入資料 /// </summary> /// <param name="connectionString">串連資料庫字串</param> /// <param name="tableName">表名稱</param> /// <param name="dt">需要批量插入資料庫DataTable資料來源</param> /// <param name="bulkCopyTimeout">串連資料庫的溢出時間</param> /// <returns></returns> public static bool SqlBulkCopyByDatatable(string connectionString, string tableName, DataTable dt, int bulkCopyTimeout = 120) { try { using (SqlBulkCopy sqlbulkCopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)) { sqlbulkCopy.DestinationTableName = tableName; sqlbulkCopy.BulkCopyTimeout = bulkCopyTimeout; for (int i = 0; i < dt.Columns.Count; i++) { sqlbulkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); } sqlbulkCopy.WriteToServer(dt); sqlbulkCopy.Close();//關閉串連 return true; } } catch (System.Exception ex) { throw ex; } } /// <summary> /// 批量插入資料 /// </summary> /// <param name="connectionString">串連資料庫字串</param> /// <param name="tableName">表名稱</param> /// <param name="dt">需要批量插入資料庫DataTable資料來源</param> /// <param name="batchSize">一次批量插入多少條資料</param> /// <param name="bulkCopyTimeout">串連資料庫的溢出時間</param> /// <returns></returns> public static bool SqlBulkCopyByDatatable(string connectionString, string tableName, DataTable dt, int batchSize,int bulkCopyTimeout=120) { try { using (SqlBulkCopy sqlbulkCopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)) { sqlbulkCopy.BatchSize = batchSize; sqlbulkCopy.DestinationTableName = tableName; sqlbulkCopy.BulkCopyTimeout = bulkCopyTimeout; for (int i = 0; i < dt.Columns.Count; i++) { sqlbulkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); } sqlbulkCopy.WriteToServer(dt); sqlbulkCopy.Close();//關閉串連 return true; } } catch (System.Exception ex) { throw ex; } }
.Net批量插入資料到SQLServer資料庫,SqlBulkCopy類批量插入大資料到資料庫