65.9K
CodeProject 正在变化。 阅读更多。
Home

在 ASP.NET 2.0 中使用 SqlBulkCopy

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.78/5 (11投票s)

2008年12月25日

CPOL

2分钟阅读

viewsIcon

62851

downloadIcon

495

一篇解释如何在 ASP.NET 中使用 SqlBulkCopy 类的文章

引言

Microsoft SQL Server 包含一个名为 bcp 的常用命令行实用程序,用于将数据从一个表移动到另一个表,无论是在单个服务器上还是在服务器之间。SqlBulkCopy 类允许您编写托管代码解决方案,提供类似的功能。还有其他方法可以将数据加载到 SQL Server 表中(例如,INSERT 语句),但 SqlBulkCopy 提供了比它们显著的性能优势。

SqlBulkCopy 类只能用于将数据写入 SQL Server 表。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可以加载到 DataTable 实例或使用 IDataReader 实例读取即可。

传输数据

SqlBulkCopy 包含一个实例方法 WriteToServer ,用于将数据从源传输到目标。WriteToServer 方法可以对 DataRow[] 数组、DataTable DataReader 执行操作。根据情况,您可以选择您喜欢的容器,但在大多数情况下,选择 DataReader 是一个好主意。这是因为 DataReader 是一个只进、只读的流。它不保存数据,因此比 DataTable DataRows[] 快得多。以下代码用于将数据从源表传输到目标表。

Using the Code

以下应用程序演示了如何使用 SqlBulkCopy 类加载数据。在此示例中,使用 SqlDataReader 将数据从源表复制到目标表。我使用了 Microsoft SQL Server 2005 的 'master' 数据库。

string strConnection = ConfigurationManager.AppSettings["conStr"].ToString();

SqlConnection sourceconnection = new SqlConnection(strConnection);
sourceconnection.Open();
SqlCommand cmd = new SqlCommand("Select * from MSreplication_options");
cmd.Connection = sourceconnection;
SqlDataReader reader = cmd.ExecuteReader();

//Connect to Destination DataBase
SqlConnection destinationConnection = new SqlConnection(strConnection);
destinationConnection.Open();

这里需要注意的是,我使用与将数据复制到同一服务器时相同的 'connectionString'。

我现在必须使用批量复制功能复制数据

SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection);
bulkCopy.DestinationTableName = "destination";
bulkCopy.WriteToServer(reader);
reader.Close();

sourceconnection.Close();
destinationConnection.Close();

最后,我们关闭了 'reader',然后我们可以关闭与 SQL Server 的连接。通过这种方式,数据以最快的方式从一个表复制到另一个表。也可以使用 'SqlBulkCopy' 的单个实例来执行多个批量复制操作。这种技术比对每个操作使用单独的 'SqlBulkCopy' 实例更有效率。

另一种技术是在事务中执行批量复制。使用此技术,可以执行多个批量复制操作以及其他数据库操作,例如更新、删除等,并且由于使用事务,可以轻松地提交和回滚。

关注点

除了批量复制,ADO.NET 版本 2.0 还有许多新功能。这里我列出其中一些

  1. 多活动结果集 (MARS) - 允许应用程序打开多个 'SqlDataReader' 连接,其中每个 'SqlDataReader' 实例从单独的命令启动。
  2. 批处理 - 另一项旨在提高应用程序性能的功能是批处理,其中对数据库的更新来自 'Dataset',以批处理方式完成。
  3. 数据跟踪 - 一个有趣的功能是 .NET 数据提供程序支持的内置数据跟踪。

历史

  • 2008 年 12 月 24 日 初始发布
© . All rights reserved.