java bulkcopy快入插入数据_使用SqlBulkCopy提高批量插入数据库性能

SqlBulkCopy是.Net提供的一个可以讲一个表复制到数据库的解决方案,其性能相比INSERT方式插入数据库要快得多,但是,由于实现机制,只适用于多条数据同时插入数据表,不适用于其他操作。

因为是表复制操作,必须有一个数据源,(目标即我们的SqlServer数据库)我们可以讲数据加载到DataTable或可使用IDataReader实例的对象中方可操作。

为了方便操作我们先生成了一个实体类,方便数据库操作。

class Person

{

public Guid PersonId { get; set; }

public string Name { get; set; }

public int Age { get; set; }

public string Address { get; set; }

}

我们先看SqlCommand的数据插入代码:

static void InsertBySqlCommand()

{

//准备测试数据

List lists = new List();

for (int i = 0; i < 1000; i++)

{

Person p = new Person();

p.PersonId = Guid.NewGuid();

p.Age = i + 1;

p.Name = "姓名" + (i + 1);

p.Address = "地址" + (i + 1);

lists.Add(p);

}

Stopwatch sw = new Stopwatch();

sw.Start();

using (SqlConnection conn = new SqlConnection("Data Source=.;uid=sa;pwd=1234;Initial Catalog=demo"))

{

conn.Open();

foreach (Person p in lists)

{

//插入数据

using (SqlCommand cmd = new SqlCommand("INSERT INTO Person(PersonId,Name,Age,Address) VALUES(@PersonId,@Name,@Age,@Address) ", conn))

{

cmd.Parameters.Add(new SqlParameter("PersonId", p.PersonId));

cmd.Parameters.Add(new SqlParameter("Name", p.Name));

cmd.Parameters.Add(new SqlParameter("Age", p.Age));

cmd.Parameters.Add(new SqlParameter("Address", p.Address));

cmd.ExecuteNonQuery();

}

}

}

sw.Stop();

Console.WriteLine("SqlCommand方式插入1000条数据,用时" + sw.ElapsedMilliseconds);

}

下面是SqlBulkCopy的数据插入代码:

static void InsertBySqlBulkCopy()

{

//准备测试数据

List lists = new List();

for (int i = 0; i < 1000; i++)

{

Person p = new Person();

p.PersonId = Guid.NewGuid();

p.Age = i + 1;

p.Name = "姓名" + (i + 1);

p.Address = "地址" + (i + 1);

lists.Add(p);

}

Stopwatch sw = new Stopwatch();

sw.Start();

//将List转换到DataTable

DataTable dt = new DataTable();

dt.Columns.Add("PersonId", typeof(Guid));

dt.Columns.Add("Name", typeof(string));

dt.Columns.Add("Age", typeof(int));

dt.Columns.Add("Address", typeof(string));

foreach (Person p in lists)

{

DataRow row = dt.NewRow();

row["PersonId"] = p.PersonId;

row["Name"] = p.Name;

row["Age"] = p.Age;

row["Address"] = p.Address;

dt.Rows.Add(row);

}

using (SqlConnection conn = new SqlConnection("Data Source=.;uid=sa;pwd=1234;Initial Catalog=demo"))

{

conn.Open();

using (SqlBulkCopy sbc = new SqlBulkCopy(conn))

{

sbc.DestinationTableName = "Person";

sbc.WriteToServer(dt);//插入数据

}

}

sw.Stop();

Console.WriteLine("SqlBulkCopy方式插入1000条数据,用时" + sw.ElapsedMilliseconds);

}

运行结果:

SqlBulkCopy.png

从结果上很容易看出,SqlBulkCopy要比SqlCommand方式插入数据快得多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值