这里就ADO.NET数据库利用SqlBulkCopy类快速写入大批量数据,针对SQL Server的优化,可以写入DataRow数据,文章有详细的介绍,希望看过本文会有技术上的提高。

跟着ADO.NET2.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)设置。

强烈推荐运用ADO.NET数据库特性(数据库ADO)  ADO.NET数据库 第1张

#T#但若要经过自行编写的程序完结批次装载,只能以 C/C++ 调用 OLEDB 或 ODBC 的 Bulk API,无法经过 ADO.NET 或 ADO 等方针来履行。ADO.NET 2.0 的 SqlClient 供给了一个新的类称为SqlBulkCopy,它让 DataSet 内很多的数据或是 DataReader经过数据流(Stream)直接读取很多的记载,能够快速将这些记载添加到意图ADO.NET数据库的数据表中。但要留意的是它并非如咱们一般用的 bcp.exe东西程序,能够从某个符号分隔文件读取很多数据,挑选性地调配格局文件(Format File)将记载装载到ADO.NET数据库中,或是将数据库内的数据导出成为一个文件。但由于DataSet 能集成 XML 数据,因而仍然能够选用 SqlBulkCopy 类型,轻松地经过 DataSet 将 XML 文件数据很多转入到ADO.NET数据库。

能够运用SqlBulkCopy类快速写入大批量数据,针对SQL Server的优化,能够写入DataRow数据,DataTable,DataReader,而且能够映射不同的数据列名
◆WriteToServer(DataTable)写入数据表
◆WriteToServer(DataRow[])批次写入数据行
◆WriteToServer(DataTable ,DataRowState)按行状况写入数据库表
◆WriteToServer(IDataReader)写入DataReader方针

下面是个示例:

  1. using(SqlConnectionsqlcon=newSqlConnection("DataSource=192.168.80.242;
  2. userid=oa;
  3. password=oapassword;
  4. initialcatalog=test")){sqlcon.Open();
  5. using(SqlBulkCopybcp=newSqlBulkCopy(sqlcon)){bcp.BulkCopyTimeout=3000;
  6. bcp.DestinationTableName="dbo.Test01";
  7. bcp.ColumnMappings.Add("id","id");bcp.ColumnMappings.Add("name1","name1");
  8. bcp.ColumnMappings.Add("name2","name2");
  9. bcp.ColumnMappings.Add("name3","name3");
  10. //映射到不同名列
  11. bcp.ColumnMappings.Add("changedname4","name4");
  12. bcp.WriteToServer(dt);sqlcon.Close();}}

可是SqlBulkCopy运用时要留意以下几点:

1 承认的确需求大容量更新在履行此操作,(几十行的数据请尽量运用其他途径把).

2承认数据一致性,与查看机制,避免遇到主键抵触,数据不符格局等意外。

3 SqlBulkCopy操作可能会导致对方针表元数据的更改(例如,禁用束缚查看时)。假如呈现这种状况,拜访大容量刺进表的并发快照阻隔业务将失利。

4 SqlBulkCopy将向数据库下大容量更新锁,请留意并发性,避免其他衔接因长期等候而超时。

转载请说明出处
知优网 » 强烈推荐运用ADO.NET数据库特性(数据库ADO)

发表评论

您需要后才能发表评论