SQL Server的bcp实用工具和BULK INSERT语句是将行快速添加到SQL Server表的传统方法,但ADO.NET 2.0还为用户提供了另外一种方法,即编写新的SqlBulkCopy对象。关系表的DataReader是最普通的行源。此外,用户还能够通过创建有一个或多个要复制的DataTable的运行时间DataSet来从表格化XML文档中插入行。
用SqlBulkCopy将XML文档批量复制到SQL Server表(此过程称为分解)要比SQLXML 3.0的批量加载功能简单得多。批量加载需要一个带注释的XML架构将元素或属性映射到基表列。SqlBulkCopy有一个ColumnMappings集,它允许用户定义源DataTable与目标基表列之间的关系。
以下是通过DataReader将行插入到已有目标基表的步骤。
(1) 为数据源创建一个Connection和一个Command。可以利用任一个.NET数据提供者连接到数据源并创建DataReader。
(2) 用Command.ExecuteReader方法创建一个DataReader。
(3) 创建一个新SqlBulkCopy对象,该对象以连接字符串和对应的SqlBulkCopyOptions枚举成员作为它的两个参数。
(4) 设置SqlBulkCopy.DestinationTableName属性值。
(5) 如果目标表的架构与源表或查询不同,则将ColumnMapping成员添加到ColumnMapping集。
(6) 设置其他可选SqlBulkCopy属性值,如BatchSize和BulkCopyTimeout。
(7) 如果用户的复制操作涉及大量的记录,或者要在速度慢的网络连接中运行,可对SqlBulkCopy.SqlRowsCopied事件添加一个处理查询来显示记录的复制量或百分比。
(8) 调用SqlBulkCopy.WriteToServer方法完成复制操作。
(9) 执行SqlBulkCopy.Close()方法并关闭Connection(如果没有关闭的话),否则重新用SqlBulkCopy对象完成其他操作。
表2-3描述了SqlBulkCopyOptions枚举的成员。
你可以进行参数化操作.使注入无效.