SqlBulkCopy使用介绍以及注意事项
2018-06-18 03:40:55来源:未知 阅读 ()
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");
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 与源或目标中的任意列均不匹配。》错误;
以上是个人见解,如有理解有误的地方欢迎指出;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 1.ffmpeg、ffplay、ffprobe命令使用 2020-05-11
- 关于使用ffmpeg的一些牢骚 2020-05-08
- G++编译链接的那些事!G++的特殊使用方法[常用] 2020-04-19
- c/c++ 使用valgrind检查内存泄漏 2020-04-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash