您的位置:首页 > 大数据

c# 使用SqlBulkCopy 提高大数据插入数据库速度

2016-05-11 16:47 806 查看
自己得一点总结:
  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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: