12.3批处理载入数据

文章作者 100test 发表时间 2007:03:13 21:46:44
来源 100Test.Com百考试题网


以往访问 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 方法将数据直接写入到目的数据表。



相关文章


网络安全与端口攻略的详细解读四
12.4Provider的统计信息
12.3批处理载入数据
网络安全与端口攻略的详细解读二
12.2异步执行命令
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛