日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

sqlserver數(shù)據(jù)庫(kù)批量插入-SqlBulkCopy

 頭號(hào)碼甲 2021-04-21

當(dāng)想在數(shù)據(jù)庫(kù)中插入大量數(shù)據(jù)時(shí),使用insert 不僅效率低,而且會(huì)導(dǎo)致一系列的數(shù)據(jù)庫(kù)性能問(wèn)題

當(dāng)使用insert語(yǔ)句進(jìn)行插入數(shù)據(jù)時(shí)。我使用了兩種方式:

  1. 每次插入數(shù)據(jù)時(shí),都只插入一條數(shù)據(jù)庫(kù),這個(gè)會(huì)導(dǎo)致每次插入數(shù)據(jù)時(shí)不斷打開(kāi)關(guān)閉數(shù)據(jù)庫(kù)鏈接,導(dǎo)致效率過(guò)低(最差)
  2. 使用拼接字符串的方式來(lái)進(jìn)行批量插入數(shù)據(jù),但是使用StringBuilder 會(huì)占用極大的內(nèi)存

以上方式對(duì)于批量插入數(shù)據(jù)都不是一個(gè)好的選擇, 針對(duì)這種情況我使用了SqlBulkCopy

sqlbulkCopy:將其它數(shù)據(jù)源批量加載sqlserver表,就是可以將其它數(shù)據(jù)源插入到數(shù)據(jù)庫(kù)中

示例代碼:

創(chuàng)建測(cè)試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]

然后定義一個(gè)與表映射的Model,因SqlBulkCopy 的特性,定義的 Model 必須擁有與表所有的字段對(duì)應(yīng)的屬性:也就是定義的model,需要跟數(shù)據(jù)表的字段順序一樣,因?yàn)檗D(zhuǎn)為datatable時(shí)會(huì)按照順序插入

 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 }

制造些數(shù)據(jù)轉(zhuǎn)為DataTable:

List轉(zhuǎn)為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                 }

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多