12.3批处理载入数据
来源:优易学  2010-1-12 12:02:41   【优易学:中国教育考试门户网】   资料下载   IT书店

以往访问 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++ 调用 OLE DB 或 ODBC 的 Bulk API,无法通过 ADO.NET 或 ADO 等对象来执行。

ADO.NET 2.0 的 SqlClient 提供了一个新的类称为 SqlBulkCopy,它让 DataSet 内大量的数据或是 DataReader 通过数据流(Stream)直接读取大量的记录,可以快速将这些记录添加到目的数据库的数据表中。但要注意的是它并非如我们一般用的 bcp.exe 工具程序,可以从某个符号分隔文件读取大量数据,选择性地搭配格式文件(Format File)将记录装载到数据库中,或是将数据库内的数据导出成为一个文件。但由于 DataSet 能集成 XML 数据,因此依然可以采用 SqlBulkCopy 类型,轻松地通过 DataSet 将 XML 文件数据大量转入到数据库。

在此就以一个简单的范例来示范该类的使用方式,我们所设计的范例程序画面如图12-5 所示:

图12-5 从不同的数据库来源或是 XML 文件大量装载记录到目的数据库

在范例中,你可以将来自不同数据源的记录大量装载到目的数据表,程序代码如列表12-5:

程序代码列表12- 5 通过 SqlBulkCopy 对象实例将 DataTable 的内容大量批次更新到数据表

'连接到目的端服务器

Dim destConn As New SqlConnection( _

"SERVER=localhost;DATABASE=AWProductsData;Integrated Security=TRUE")

destConn.Open()

'计算目的端数据表已经存在的记录数目

Dim verifyCmd As New SqlCommand("SELECT COUNT(*) FROM dbo.Products", destConn)

Dim initialCount As Integer = CInt(verifyCmd.ExecuteScalar())

If CheckBox1.Checked Then

'************** ADO.NET 2.0 新增的批次装载记录SqlBulkCopy 类

Using bcp As New SqlBulkCopy(destConn)

bcp.BulkCopyTimeout = 300

bcp.DestinationTableName = "dbo.Products"

'范例中故意让来源端与目的端的数据字段名称不同,因此需要进行字段对应的设置

'若字段名称相同则以下的程序代码可以省略

'bcp.ColumnMappings.Add("ProductID", "ProductID")

'bcp.ColumnMappings.Add("Name", "Name")

'bcp.ColumnMappings.Add("ListPrice", "ListPrice")

bcp.WriteToServer(ds.Tables("Products"))

End Using

Else

Dim adp As New SqlDataAdapter("SELECT * FROM dbo.Products", destConn)

Dim bld As New SqlCommandBuilder(adp)

'ADO.NET 1.1 只提供逐条数据添加

adp.Update(ds.Tables(0))

End If

在上述范例中我们从数据库取出记录放到 DataSet 实例(以此模拟通过 ADO.NET 从不同的数据源读取大量数据后,批次装载到 SQL Server),或是让 DataSet 实例直接读取某个 XML 文件后,再通过 SqlBulkCopy 类实例在指定数据表名称与字段格式后,调用 WriteToServer 方法将数据直接写入到目的数据表。

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
热门课程培训