在一些项目中,经常要执行批量的新增操作。如果每插入一条数据,就连接一次数据库,这样会带来很大的性能问题,使用SqlBulkCopy类可执行批量的插入操作,减少了与数据库的交互次数,提高了效率,具体做法如下:
1.定义一个DataTable,并从数据库中获取表结构。
2.遍历泛型集合,将集合中的每一个对象,赋值给DataTable中的每一行。
3.获取一个DataTable后,通过使用SqlBulkCopy类执行批量操作。
具体代码如下:
1 using (SqlConnection con = new SqlConnection(constr))
2 {
3 //从数据库中拷贝表结构
4 DataTable dt = new DataTable();
5 SqlDataAdapter sda = new SqlDataAdapter("select * from Product_Target where 1=2", con);
6 sda.Fill(dt);
7 //将泛型集合的行拷贝到DataTable的行
8 DataRow dr;
9 foreach(Product product in listProduct)
10 {
11 dr = dt.NewRow();
12 dr["productName"] = product.ProductName;
13 dr["salePrice"] = product.SalePrice;
14 dr["description"] = product.Description;
15 dt.Rows.Add(dr);
16 }
17 //使用SqlBulkCopy执行批量复制
18 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(constr))
19 {
20 //每一批次中的行数
21 bulkCopy.BatchSize = 10;
22 //服务器上目标表的名称
23 bulkCopy.DestinationTableName = "Product_Target";
24 try
25 {
26 bulkCopy.WriteToServer(dt);
27 }
28 catch (Exception)
29 {
30 }
31 }
32 }
对于SqlBulkCopy类的一些其他用法,请参考周公的这篇文章:http://blog.csdn.net/zhoufoxcn/archive/2007/11/07/1871514.aspx。