首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

以往访问 SQL Server 2000 时,若有大量的数据记录需要添加到数据库内,例如从主机系统或是 NCR TeradataOracle 等数据库系统下载大量数据记录,我们想要将它们快速添加到 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 = CIntverifyCmd.ExecuteScalar())

 

If CheckBox1.Checked Then

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

    Using bcp As New SqlBulkCopydestConn

        bcp.BulkCopyTimeout = 300

        bcp.DestinationTableName = "dbo.Products"

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

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

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

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

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

 

        bcp.WriteToServerds.Tables"Products"))

    End Using

Else

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

    Dim bld As New SqlCommandBuilderadp

 

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

    adp.Updateds.Tables0))

End If

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

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论