当想在数据库中插入大量数据时,使用insert 不仅效率低,而且会导致一系列的数据库性能问题
当使用insert语句进行插入数据时。我使用了两种方式:
以上方式对于批量插入数据都不是一个好的选择, 针对这种情况我使用了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 }
如对本文有疑问, 点击进行留言回复!!
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
网友评论