自己得一点总结:
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 值(适用时)。 |
|
| TableLock |
如果未指定,则使用行锁定。 |
|
| UseInternalTransaction |
ArgumentException。 |