SqlBulkCopy使用介绍以及注意事项

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

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

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

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

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

1DataTable dtCopy =newDataTable();2dtCopy.Columns.Add("jhsSitid");3dtCopy.Columns.Add("applyGoodsId");4dtCopy.Columns.Add("ghsSitid");5dtCopy.Columns.Add("state");6dtCopy.Columns.Add("applyTime");

初始化DataTable

2.给数据源添加数据:

1foreach(DataRow rinds.Tables[0].Rows)2{3DataRow newRow =dtCopy.NewRow();4newRow["jhsSitid"] = r["sitid"].ToString();5newRow["applyGoodsId"] =goodsId;6newRow["ghsSitid"] =siteId;7newRow["state"] ="0";8newRow["applyTime"] =DateTime.Now;9dtCopy.Rows.Add(newRow);10}

循环获取数据源

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

1SqlConnection conn =newSqlConnection(baseclass.connectionString);2if(conn.State ==ConnectionState.Closed)3{4conn.Open();5}6SqlTransaction st =conn.BeginTransaction();7using(SqlBulkCopy sqlCopy =newSqlBulkCopy(conn, SqlBulkCopyOptions.FireTriggers, st))8{9sqlCopy.DestinationTableName ="jhQQ_list";10sqlCopy.BulkCopyTimeout =60;11sqlCopy.ColumnMappings.Add("jhsSitId","jhsSitId");12sqlCopy.ColumnMappings.Add("applyGoodsId","applyGoodsId");13sqlCopy.ColumnMappings.Add("ghsSitId","ghsSitId");14sqlCopy.ColumnMappings.Add("state","state");15sqlCopy.ColumnMappings.Add("applyTime","applyTime");16try17{18sqlCopy.WriteToServer(dtCopy);19st.Commit();20result =true;21}22catch(Exception ex)23{24st.Rollback();25}26finally27{28conn.Close();29}30}

批量插入到数据库

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

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

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

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

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航