当想在数据库中插入大量数据时,使用insert 不仅效率低,而且会导致一系列的数据库性能问题

当使用insert语句进行插入数据时。我使用了两种方式:

每次插入数据时,都只插入一条数据库,这个会导致每次插入数据时不断打开关闭数据库链接,导致效率过低(最差)
使用拼接字符串的方式来进行批量插入数据,但是使用StringBuilder 会占用极大的内存
以上方式对于批量插入数据都不是一个好的选择, 针对这种情况我使用了SqlBulkCopy

sqlbulkCopy:将其它数据源批量加载sqlserver表,就是可以将其它数据源插入到数据库中

示例代码:

创建测试User表:

CREATE TABLE [dbo].[Users]([Id] [uniqueidentifier] NOT NULL,[Name] [nvarchar](100) NULL,[Gender] [int] NULL,[Age] [int] NULL,[CityId] [int] NULL,[OpTime] [datetime] NULL,CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED([Id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]`

然后定义一个与表映射的Model,因SqlBulkCopy 的特性,定义的 Model 必须拥有与表所有的字段对应的c#教程属性:也就是定义的model,需要跟数据表的字段顺序一样,因为转为datatable时会按照顺序插入

 1 public enum Gender2 {3     Man = 1,4     Woman5 }6 7 public class User8 {9     public Guid Id { get; set; }
10     public string Name { get; set; }
11     public Gender? Gender { get; set; }
12     public int? Age { get; set; }
13     public int? CityId { get; set; }
14     public DateTime? OpTime { get; set; }
15 }

制造些数据转为DataTable:

List转为DataTable地址:https://www.cnblogs.com/zhangShanGui/p/12038563.html

 1 List<User> usersToInsert = new List<User>();2 usersToInsert.Add(new User() { Id = Guid.NewGuid(), Name = "so1", Gender = Gender.Man, Age = 18, CityId = 1, OpTime = DateTime.Now });3 usersToInsert.Add(new User() { Id = Guid.NewGuid(), Name = "so2", Gender = Gender.Man, Age = 19, CityId = 2, OpTime = DateTime.Now });4 usersToInsert.Add(new User() { Id = Guid.NewGuid(), Name = "so3", Gender = Gender.Man, Age = 20, CityId = 3, OpTime = DateTime.Now });5 usersToInsert.Add(new User() { Id = Guid.NewGuid(), Name = "so4", Gender = Gender.Man, Age = 21, CityId = 4, OpTime = DateTime.Now });6 7 var data = DataTableExtensions.ToDataTable(usersToInsert);8  using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnectionString))9                 {10                     bulkCopy.DestinationTableName =
11                         "Users";
12                     try
13                     {14                         bulkCopy.WriteToServer(data, DataRowState.Added);
15                     }
16                     catch (Exception ex)
17                     {18                         Console.WriteLine(ex.Message);
19                     }
20                 }

sqlserver数据库批量插入-SqlBulkCopy相关推荐

  1. mybatis操作Oracle数据库批量插入与更新、运行注意事项、属性含义

    一.项目需求 针对将近300万用户的用电数据进行统计分析,将结果更新保存Oracle数据库.我需要往一个表里面插入数据,数据量总计在500万条左右.一条一条插入的话非常慢,2万条数据近20分钟,后面就 ...

  2. 数据库批量插入和存在的问题

    不同数据库批量插入方式效率也迥异,使用不同数据批量插入方式也存在一些需要注意.容易引起错误的点. 用于实验的数据和表 create DATABASE if exists batch_insert_pe ...

  3. Jmeter向数据库批量插入数据

    Jmeter向数据库批量插入数据 下面介绍一下Jmeter向mysql数据库中插入数据的入门操作 1.新建一个线程组,这是必经步骤: 在测试计划上右键–>添加–>Theaders(User ...

  4. 往Oracel数据库批量插入数据

    往Oracel数据库批量插入数据到目前为止,据我所知,有两种: 第一种,在cmd进入imp命令所在的目录,然后使用imp命令,这种方式批量导入数据速度很快,导入过程会有进程提示,如遇错误,也会告知,如 ...

  5. SQLServer中批量插入数据方式的性能对比 (转)

    转自:http://www.cnblogs.com/wlb/archive/2010/03/02/1676136.html 昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能 ...

  6. SQLServer中批量插入数据方式的性能对比

    昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了本文. 公司技术背景:数据库访问类(xxx.DataBase ...

  7. sql数据库批量插入

    代码如下: /// <summary>/// 批量插入(datatable插入数据库)/// </summary>/// <param name="dtNumI ...

  8. sqlserver数据批量插入

    批量插入数据 这个实际是用一张表的字段更新另一张表的字段,而且是可以批量插入的 insert into Reader(readerName) select top 100 tabcolname fro ...

  9. 数据库批量插入Insert ALL into报错ORA-00933:SQL命令未正确结束

    起因 : 批量插入数据库表报错 代码演示 : @Insert("<script> Insert ALL into table(字段1,字段2) values<foreach ...

最新文章

  1. echarts折线图修改背景颜色_不会美化Excel图表?学会这招!小白也能轻松做出高逼格的折线图...
  2. CSDN Markdown编辑器的使用
  3. 人工智能进阶必备知识
  4. Python高级函数
  5. linux目录表及功能n鸟哥,鸟哥linux私房菜_笔记_Linux的文件权限与目录配置
  6. 计算机网络课程设计之网络代理服务器的设计与实现
  7. 猜数游戏 (10 分)
  8. VSS(Visual SourceSafe) 代码管理器 使用技巧---快速登录
  9. DPDK单生产者入队单消费者出队
  10. 《MLB棒球创造营》:走近棒球运动·匹兹堡海盗队
  11. PR2018安装及错误处理
  12. 拉卡拉支付:以技术为核心驱动金融变革
  13. blank=True, null=True的区别
  14. 【IVI】1. Android Automotive OS 安卓车载操作系统白皮书
  15. cad放大_CAD图纸中局部放大图形的操作技巧
  16. NSA的攻击,可以做什么?
  17. 如何在ppt中生成柱状图_PPT中怎么制作动态柱状图表?绘制方法全在这里!
  18. 站长号社区友情链接交换区改版中
  19. AAAI 2021最佳论文奖出炉,北航成最大赢家,还有这样一批华人学术新星!
  20. 驾考 php mysql,驾考理论模拟考试系统的设计与实现(PHP,MySQL)(含录像)

热门文章

  1. php验证码大小,PHP自定义大小验证码
  2. RUILON瑞隆源LED路灯电源SPD
  3. Redis数据库系列(四)、Redis事务、乐观锁和分布式锁
  4. 【转载】 javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册 - 孤傲苍狼 - 博 http://www.cnblogs.com/xdp-gacl/
  5. Java项目:JSP停车场管理系统
  6. 首篇-知识体系的形成过程
  7. 三星对Android的支持,三星应对Android设备开放Gear手表兼容性
  8. 拓嘉辰丰电商:拼多多花呗如何用
  9. 深度学习常见算法伪码
  10. ssh-keygen免密登录详解