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

ASP.NET
asp.net(c#)网页跳转七种方法小结
完美解决在ModalPopupExtender中使用CalendarExtender时被层遮挡的问题
ASP.NET、SharePoint中另存文件的长文件名被截断的原因及解决办法
查看Json输出的*最方便*的方法 (转)
asp.net 代码隐藏的编码模型
ajaxpro.dll 控件实现异步刷新页面
asp.net DbProviderFactory的使用-示例
一个简单的asp.net 单点登录实现
jQuery+Ajax用户登录功能的实现
asp.net 弹出对话框返回多个值
.NET 中英文混合验证码实现代码
一个完整的ASP.NET 2.0 URL重写方案[翻译]
asp.net关于onpropertychange和oninput事件实现代码
asp.net gridview指定某一列滚动
Equals和==的区别 公共变量和属性的区别小结
asp.net 合并GridView中某列相同信息的行(单元格)
ASP.NET(C#) 定时执行一段代码
asp.net 预防SQL注入攻击之我见
asp.net下将Excel转成XML档的实现代码
asp.net url分页类代码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 68 ::
收藏到网摘: 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将向数据库下大容量更新锁,请注意并发性,以免其他连接因长时间等待而超时。