SqlBulkCopy使用介绍以及注意事项

  SqlBulkCopy,微软提供的快速插入类,针对大批量数据操作,此类效果明显有所提升,以下是微软官方解释:

  Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。

  使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。

  要使用此类一共需要用到三个步骤:

  1.初始化数据源类型,DataTable或DataRow,一般我们使用数据库中的列名作为数据源的列名;

  

  

  1 DataTable dtCopy = new DataTable();

  2 dtCopy.Columns.Add("jhsSitid");

  3 dtCopy.Columns.Add("applyGoodsId");

  4 dtCopy.Columns.Add("ghsSitid");

  5 dtCopy.Columns.Add("state");

  6 dtCopy.Columns.Add("applyTime");

  初始化DataTable

  2.给数据源添加数据:

  

  

  1 foreach (DataRow r in ds.Tables[0].Rows)

  2 {

  3 DataRow newRow = dtCopy.NewRow();

  4 newRow["jhsSitid"] = r["sitid"].ToString();

  5 newRow["applyGoodsId"] = goodsId;

  6 newRow["ghsSitid"] = siteId;

  7 newRow["state"] = "0";

  8 newRow["applyTime"] = DateTime.Now;

  9 dtCopy.Rows.Add(newRow);

  10 }

  循环获取数据源

  3.打开数据库链接,批量插入数据源数据:

  

  

  1 SqlConnection conn = new SqlConnection(baseclass.connectionString);

  2 if (conn.State == ConnectionState.Closed)

  3 {

  4 conn.Open();

  5 }

  6 SqlTransaction st = conn.BeginTransaction();

  7 using (SqlBulkCopy sqlCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.FireTriggers, st))

  8 {

  9 sqlCopy.DestinationTableName = "jhqq_list";

  10 sqlCopy.BulkCopyTimeout = 60;

  11 sqlCopy.ColumnMappings.Add("jhsSitId", "jhsSitId");

  12 sqlCopy.ColumnMappings.Add("applyGoodsId", "applyGoodsId");

  13 sqlCopy.ColumnMappings.Add("ghsSitId", "ghsSitId");

  14 sqlCopy.ColumnMappings.Add("state", "state");

  15 sqlCopy.ColumnMappings.Add("applyTime", "applyTime");

  16 try

  17 {

  18 sqlCopy.WriteToServer(dtCopy);

  19 st.Commit();

  20 result = true;

  21 }

  22 catch (Exception ex)

  23 {

  24 st.Rollback();

  25 }

  26 finally

  27 {

  28 conn.Close();

  29 }

  30 }

  批量插入到数据库

  sqlCopy.DestinationTableName-------->为指定数据库表名

  sqlCopy.BulkCopyTimeout------------->指定完成时间

  sqlCopy.ColumnMappings.Add--------->指定数据库与数据源中的对应关系

  另外得注意的是,sqlCopy.ColumnMappings.Add指定对应关系时,一定要注意大小写要与数据库一直,sqlCopy.ColumnMappings.Add是对大小写很敏感的,另外对应的字段个数也必须一致,否则就会出现《给定的 ColumnMapping 与源或目标中的任意列均不匹配。》错误;

  以上是个人见解,如有理解有误的地方欢迎指出;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`SqlBulkCopy` 是 .NET Framework 中的一个类,用于将大量数据一次性批量插入到 SQL Server 数据库中,可以大大提高数据插入的效率。 使用 `SqlBulkCopy` 类可以实现以下几个优点: 1. 提高数据库操作效率:`SqlBulkCopy` 类可将大量数据一次性插入到数据库中,比逐条插入更高效。 2. 减少数据库操作次数:`SqlBulkCopy` 类可以将多个插入操作合并为一个操作,从而减少了数据库操作次数。 3. 简化代码:使用 `SqlBulkCopy` 类可以简化代码,使代码更易读、易维护。 使用 `SqlBulkCopy` 类的基本步骤如下: 1. 创建一个 `SqlConnection` 对象,用于连接到 SQL Server 数据库。 2. 创建一个 `SqlBulkCopy` 对象,指定要插入数据的目标表、连接对象等参数。 3. 创建一个数据源,可以使用 `DataTable` 或 `IDataReader` 对象。 4. 调用 `SqlBulkCopy` 对象的 `WriteToServer` 方法,将数据源中的数据批量插入到数据库中。 以下是一个使用 `SqlBulkCopy` 类将 `DataTable` 对象中的数据插入到 SQL Server 数据库中的示例代码: ```vb.net Using connection As New SqlConnection(connectionString) connection.Open() Using bulkCopy As New SqlBulkCopy(connection) bulkCopy.DestinationTableName = "dbo.MyTable" bulkCopy.WriteToServer(myDataTable) End Using End Using ``` 需要注意的是,`SqlBulkCopy` 类只能用于向 SQL Server 数据库中插入数据,不能用于更新或删除数据。同时,使用该类时需要注意数据源与目标表的列的对应关系,必须保证两者的列数和列名一致。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值