在 ASP.NET 2.0 中使用 SqlBulkCopy






3.78/5 (11投票s)
一篇解释如何在 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 还有许多新功能。这里我列出其中一些
- 多活动结果集 (MARS) - 允许应用程序打开多个 '
SqlDataReader
' 连接,其中每个 'SqlDataReader
' 实例从单独的命令启动。 - 批处理 - 另一项旨在提高应用程序性能的功能是批处理,其中对数据库的更新来自 '
Dataset
',以批处理方式完成。 - 数据跟踪 - 一个有趣的功能是 .NET 数据提供程序支持的内置数据跟踪。
历史
- 2008 年 12 月 24 日 初始发布