c# 使用SqlBulkCopy 提高大數據插入數據庫速度


自己得一點總結:
  1.BulkCopy采用的是插入方式,不是覆蓋方式(原數據不動,在原數據的后面復制上dataTable中的內容)
  2.自增的字段不用賦值
  3.數據庫字段名和dataTable列名可以不一樣,對應關系用bulkcopy.ColumnMappings.Add("author", "author"); 關聯
public void SaveTable(DataTable dtTable)
        {
            SqlBulkCopy sbc = new SqlBulkCopy(DbHelperSQL.connectionString, SqlBulkCopyOptions.UseInternalTransaction);
            sbc.BulkCopyTimeout = 5000;
            try
            {                
                sbc.DestinationTableName = "FAST_Temp";
                sbc.WriteToServer(dtTable);
            }
            catch (Exception ex)
            {
                //處理異常
            }
            finally
            {
                //sqlcmd.Clone();
                //srcConnection.Close();
                //desConnection.Close();
            }
        }

 

另外拓展一下SqlBulkCopyOptions枚舉

 

  成員名稱 說明
  AllowEncryptedValueModifications

允許加密值修改。

  CheckConstraints

在插入數據的同時檢查約束。 默認情況下,不檢查約束。

  Default

使用所有選項的默認值。

  FireTriggers

如果指定,則使服務器激發插入觸發器,從而使行插入數據庫。

  KeepIdentity

保留源標識值。 未指定標識值時,該值由目標指派。

  KeepNulls

在目標表中保留 null 值,而不考慮默認值的設置。 如果未指定,由默認值替換 null 值(適用時)。

  TableLock

獲取批量復制操作持續時間的批量更新鎖定。 如果未指定,則使用行鎖定。

  UseInternalTransaction

如果指定,批量復制操作的每一批都將在事務內發生。 如果指示該選項,並且還向構造函數提供SqlTransaction 對象,則發生 ArgumentException


免責聲明!

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



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