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。 |
分类:
.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?