使用ADO.NET2.0提升数据交互性能(3)_.Net教程
推荐:使用ADO.NET2.0提升数据交互性能(2)三:异步执行Command命令 在 ADO.NET 2.0 以前,通过 Command 类(如 SqlCommand、OleDbCommand等)执行 SQL 命令的线程一定要停下来等待执行结果。ADO.NET 2.0 新增了异步程序访问接
四:使用SqlBulkCopy批量装载数据(仅限SqlClient)
以往访问 SQL Server 2000 时,若有大量的数据记录需要添加到数据库内,例如从主机系统或是 NCR Teradata、Oracle等数据库系统下载大量数据记录,我们想要将它们快速添加到 SQL Server 2000中,可以有的选择是调用 T-SQL 的 Bulk Insert 语法、通过Linked Server 执行 SELECT INTO 语法或是执行 bcp.exe 工具程序,以及通过 DTS 的 Bulk Insert Task 或启动Transform Data Task 的快速装载(Use Fast Load)设置。
但若要通过自行编写的程序完成批次装载,只能以 C/C 调用 OLEDB 或 ODBC 的 Bulk API,无法通过 ADO.NET 或 ADO 等对象来执行。
ADO.NET 2.0 的 SqlClient 提供了一个新的类称为 SqlBulkCopy,它让 DataSet 内大量的数据或是 DataReader通过数据流(Stream)直接读取大量的记录,可以快速将这些记录添加到目的数据库的数据表中。但要注意的是它并非如我们一般用的 bcp.exe工具程序,可以从某个符号分隔文件读取大量数据,选择性地搭配格式文件(Format File)将记录装载到数据库中,或是将数据库内的数据导出成为一个文件。但由于DataSet 能集成 XML 数据,因此依然可以采用 SqlBulkCopy 类型,轻松地通过 DataSet 将 XML 文件数据大量转入到数据库。
可以利用SqlBulkCopy类快速写入大批量数据,针对SQL Server的优化,可以写入DataRow数据,DataTable,DataReader,并且可以映射不同的数据列名
以下为引用的内容:
WriteToServer(DataTable)写入数据表 WriteToServer(DataRow[])批次写入数据行 WriteToServer(DataTable ,DataRowState)按行状态写入数据库表 WriteToServer(IDataReader)写入DataReader对象 |
下面是个示例:
以下为引用的内容:
using (SqlConnection sqlcon = new SqlConnection("Data Source=192.168.80.242;user id=oa;password=oapassword;initial catalog=test")) { sqlcon.Open(); using (SqlBulkCopy bcp = new SqlBulkCopy(sqlcon)) { bcp.BulkCopyTimeout = 3000; bcp.DestinationTableName = "dbo.Test01"; bcp.ColumnMappings.Add("id", "id"); bcp.ColumnMappings.Add("name1", "name1"); bcp.ColumnMappings.Add("name2", "name2"); bcp.ColumnMappings.Add("name3", "name3"); //映射到不同名列 bcp.ColumnMappings.Add("changedname4", "name4"); bcp.WriteToServer(dt); sqlcon.Close(); } } |
但是SqlBulkCopy使用时要注意以下几点:
1.确认确实需要大容量更新在执行此操作,(几十行的数据请尽量使用别的渠道把).
2.
3.确认数据一致性,与检查机制,以免遇到主键冲突,数据不符格式等意外。
4.
3.SqlBulkCopy操作可能会导致对目标表元数据的更改(例如,禁用约束检查时)。如果出现这种情况,访问大容量插入表的并发快照隔离事务将失败。
4. SqlBulkCopy将向数据库下大容量更新锁,请注意并发性,以免其他连接因长时间等待而超时。
分享:使用ADO.NET2.0提升数据交互性能(1)前言: 这篇文章起源于在公司写的一个PPT,但是由于PPT本身的限制很多内容无法表达或是详细的解释,于是变下定了决心。写篇文档! 在这篇文章里我将尽量简单的描述下ADO.NET 2.0的新特
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP发送Email实例(可带附件)
- js实现广告漂浮效果的小例子
- asp.net Repeater 数据绑定的具体实现
- Asp.Net 无刷新文件上传并显示进度条的实现方法及思路
- Asp.net获取客户端IP常见代码存在的伪造IP问题探讨
- VS2010 水晶报表的使用方法
- ASP.NET中操作SQL数据库(连接字符串的配置及获取)
- asp.net页面传值测试实例代码
- DataGridView - DataGridViewCheckBoxCell的使用介绍
- asp.net中javascript的引用(直接引入和间接引入)
- 三层+存储过程实现分页示例代码
- 相关链接:
- 教程说明:
.Net教程-使用ADO.NET2.0提升数据交互性能(3)。