当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 使用ADO.NET2.0提升数据交互性能(3)

ASP.NET
Asp.net利用JQuery弹出层加载数据代码
asp.net dataview做无限极分类的又一用法
asp.net ckeditor编辑器的使用方法
告别ADO.NET实现应用系统无缝切换的烦恼(总结篇)
asp.net 实现动态显示当前时间(不用javascript不考虑开销)
.net动态显示当前时间(客户端javascript)
asp.net 结合YUI 3.0小示例
asp.net 取消缓存相关问题说明
asp.net 计划任务管理程序实现,多线程任务加载
ASP.NET 跨页面传值方法
asp.net中url地址传送中文参数时的两种解决方案
Asp.net 菜单控件简洁版
asp.net jQuery Ajax用户登录功能的实现
asp.net SharpZipLib的压缩与解压问题
asp.net url重写后页面回传问题
asp.net与Discuz!NT整合集成实例教程
Discuz!NT 3与asp.net 整合的实例教程
测试控制台使用方法
.net 动态标题实现方法
asp.net *.ashx类型的文件使用说明

ASP.NET 中的 使用ADO.NET2.0提升数据交互性能(3)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 75 ::
收藏到网摘: n/a

四:使用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,并且可以映射不同的数据列名

下面是个示例:

以下为引用的内容:

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将向数据库下大容量更新锁,请注意并发性,以免其他连接因长时间等待而超时。