自己得一點總結:
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。 |
