sqlserver数据库批量插入-SqlBulkCopy
当想在数据库中插入大量数据时,使用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 必须拥有与表所有的字段对应的属性:也就是定义的model,需要跟数据表的字段顺序一样,因为转为datatable时会按照顺序插入
public enum Gender { Man = 1, Woman } public class User { public Guid Id { get; set; } public string Name { get; set; } public Gender? Gender { get; set; } public int? Age { get; set; } public int? CityId { get; set; } public DateTime? OpTime { get; set; } }
制造些数据转为DataTable:
List转为DataTable地址:https://www.cnblogs.com/zhangShanGui/p/12038563.html
List<User> usersToInsert = new List<User>(); usersToInsert.Add(new User() { Id = Guid.NewGuid(), Name = "so1", Gender = Gender.Man, Age = 18, CityId = 1, OpTime = DateTime.Now }); usersToInsert.Add(new User() { Id = Guid.NewGuid(), Name = "so2", Gender = Gender.Man, Age = 19, CityId = 2, OpTime = DateTime.Now }); usersToInsert.Add(new User() { Id = Guid.NewGuid(), Name = "so3", Gender = Gender.Man, Age = 20, CityId = 3, OpTime = DateTime.Now }); usersToInsert.Add(new User() { Id = Guid.NewGuid(), Name = "so4", Gender = Gender.Man, Age = 21, CityId = 4, OpTime = DateTime.Now }); var data = DataTableExtensions.ToDataTable(usersToInsert); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnectionString)) { bulkCopy.DestinationTableName = "Users"; try { bulkCopy.WriteToServer(data, DataRowState.Added); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
相关推荐
CoderToy 2020-11-16
技术之博大精深 2020-10-16
emmm00 2020-11-17
bianruifeng 2020-11-16
云中舞步 2020-11-12
世樹 2020-11-11
暗夜之城 2020-11-11
张荣珍 2020-11-12
amienshxq 2020-11-14
ASoc 2020-11-14
yungpheng 2020-10-19
loveyouluobin 2020-09-29
尘封飞扬 2020-09-29
Coder技术文摘 2020-09-29
lbyd0 2020-11-17
BigYellow 2020-11-16
sushuanglei 2020-11-12
我心似明月 2020-11-09