sqlserver数据库批量插入-SqlBulkCopy
程序员文章站
2023-10-28 18:52:10
当想在数据库中插入大量数据时,使用insert 不仅效率低,而且会导致一系列的数据库性能问题 当使用insert语句进行插入数据时。我使用了两种方式: 以上方式对于批量插入数据都不是一个好的选择, 针对这种情况我使用了SqlBulkCopy sqlbulkCopy:将其它数据源批量加载sqlserv ......
当想在数据库中插入大量数据时,使用insert 不仅效率低,而且会导致一系列的数据库性能问题
当使用insert语句进行插入数据时。我使用了两种方式:
- 每次插入数据时,都只插入一条数据库,这个会导致每次插入数据时不断打开关闭数据库链接,导致效率过低(最差)
- 使用拼接字符串的方式来进行批量插入数据,但是使用stringbuilder 会占用极大的内存
以上方式对于批量插入数据都不是一个好的选择, 针对这种情况我使用了sqlbulkcopy
sqlbulkcopy:将其它数据源批量加载sqlserver表,就是可以将其它数据源插入到数据库中
示例代码:
创建测试user表:
1 create table [dbo].[users]( 2 [id] [uniqueidentifier] not null, 3 [name] [nvarchar](100) null, 4 [gender] [int] null, 5 [age] [int] null, 6 [cityid] [int] null, 7 [optime] [datetime] null, 8 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] 9 ) on [primary]
然后定义一个与表映射的model,因sqlbulkcopy 的特性,定义的 model 必须拥有与表所有的字段对应的属性:也就是定义的model,需要跟数据表的字段顺序一样,因为转为datatable时会按照顺序插入
1 public enum gender 2 { 3 man = 1, 4 woman 5 } 6 7 public class user 8 { 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 }
上一篇: 你知道盆栽人参怎么种植吗?你一定很想了解
下一篇: 郭皇后生前尊贵,死后为何“嘴里塞糠”?
推荐阅读
-
java连接mysql数据库实现单条插入和批量插入
-
SQLServer用t-sql命令批量删除数据库中指定表(游标循环删除)
-
Android批量插入数据到SQLite数据库的方法
-
通过Java实现批量导入数据到SQLServer数据库
-
sqlserver数据库批量插入-SqlBulkCopy
-
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
-
数据库批量sql插入语句动态获取最新自增id问题如何解决?
-
C#.NET中如何批量插入大量数据到数据库中
-
基于SQLServer数据库的SQL语言使用--插入数据
-
企业生产实践--生产环境批量插入百万数据到数据库几种实现方式(二)