加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 产品 > 正文

SQL Server 批量插入数据的完美解决方案

发布时间:2020-12-17 15:33:36 所属栏目:产品 来源:互联网
导读:这篇文章主要介绍了SQL Server 批量插入数据的完美解决方案,需要的朋友可以参考下

/// <summary>
    /// 集合转换成DataTable
    /// </summary>
    /// <param>集合</param>
    /// <param>表名称</param>
    /// <returns>转换完成的DataTable</returns>
    public static DataTable ToDataTable(IEnumerable<TModel> source, string tableName = "TempTable")
    {
      //创建表对象
      var table = new DataTable(tableName);
      //设置列
      foreach (var dataColumn in Columns)
      {
        table.Columns.Add(new DataColumn(dataColumn.ColumnName, dataColumn.DataType));
      }

//循环转换每一行数据
      foreach (var item in source)
      {
        table.Rows.Add(ToRowData.Invoke(item));
      }

//返回表对象
      return table;
    }
  }

三、测试封装代码

1.测试代码

创表代码

CREATE TABLE [dbo].[Person](
 [Id] [BIGINT] NOT NULL,
 [Name] [VARCHAR](64) NOT NULL,
 [Age] [INT] NOT NULL,
 [CreateTime] [DATETIME] NULL,
 [Sex] [INT] NOT NULL,
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]

实体类代码

定义的实体的属性名称需要和SqlServer列名称类型对应

public class Person
{
  public long Id { get; set; }
  public string Name { get; set; }
  public int Age { get; set; }
  public DateTime? CreateTime { get; set; }
  public Gender Sex { get; set; }
}

public enum Gender
{
  Man = 0,
  Woman = 1
}

测试方法

//生成10万条数据
var persons = new Person[100000];
var random = new Random();
for (int i = 0; i < persons.Length; i++)
{
  persons[i] = new Person
  {
    Id = i + 1,
    Name = "张三" + i,
    Age = random.Next(1, 128),
    Sex = (Gender)random.Next(2),
    CreateTime = random.Next(2) == 0 ? null : (DateTime?) DateTime.Now.AddSeconds(i)
  };
}

//创建数据库连接
using (var conn = new SqlConnection("Server=.;Database=DemoDataBase;User ID=sa;Password=8888;"))
{
  conn.Open();
  var sw = Stopwatch.StartNew();
  //批量插入数据
  var qty = conn.BulkCopy(persons);
  sw.Stop();
  Console.WriteLine(sw.Elapsed.TotalMilliseconds + "ms");
}

执行批量插入结果

226.4767ms

请按任意键继续. . .

四、代码下载

GitHub代码地址:https://github.com/liu-zhen-liang/PackagingComponentsSet/tree/main/SqlBulkCopyComponents

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读