批量复制示例设置 (ADO.NET)
更新:November 2007
SqlBulkCopy 类只能用于向 SQL Server 表中写入数据。 本主题中所示的代码示例使用 SQL Server 2005 示例数据库 AdventureWorks。 为避免改变现有表,代码示例将数据写入必须先创建的表。
BulkCopyDemoMatchingColumns 和 BulkCopyDemoDifferentColumns 表均基于 AdventureWorksProduction.Products 表。在使用这些表的代码示例中,数据从 Production.Products 表添加到其中一个示例表中。 如果示例说明如何将源数据中的列映射到目标表,请使用 BulkCopyDemoDifferentColumns 表;对于大多数其他示例,请使用 BulkCopyDemoMatchingColumns。
一些代码示例演示如何使用一个 SqlBulkCopy 类写入多个表。 对于这些示例,BulkCopyDemoOrderHeader 和 BulkCopyDemoOrderDetail 表作为目标表使用。 这些表基于 AdventureWorks 中的 Sales.SalesOrderHeader 和 Sales.SalesOrderDetail 表。
说明: |
---|
提供 SqlBulkCopy 代码示例是为了演示仅使用 SqlBulkCopy 时的语法。 如果源表和目标表位于同一个 SQL Server 实例中,则使用 Transact-SQL INSERT … SELECT 语句复制数据会更加容易、更加迅速。 |
表设置
若要创建代码示例正确运行所需的表,必须在 SQL Server 数据库中运行下面的 Transact-SQL 语句。
USE AdventureWorks
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[BulkCopyDemoMatchingColumns]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[BulkCopyDemoMatchingColumns]
CREATE TABLE [dbo].[BulkCopyDemoMatchingColumns](
[ProductID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[ProductNumber] [nvarchar](25) NOT NULL,
CONSTRAINT [PK_ProductID] PRIMARY KEY CLUSTERED
(
[ProductID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[BulkCopyDemoDifferentColumns]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[BulkCopyDemoDifferentColumns]
CREATE TABLE [dbo].[BulkCopyDemoDifferentColumns](
[ProdID] [int] IDENTITY(1,1) NOT NULL,
[ProdNum] [nvarchar](25) NOT NULL,
[ProdName] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_ProdID] PRIMARY KEY CLUSTERED
(
[ProdID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[BulkCopyDemoOrderHeader]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[BulkCopyDemoOrderHeader]
CREATE TABLE [dbo].[BulkCopyDemoOrderHeader](
[SalesOrderID] [int] IDENTITY(1,1) NOT NULL,
[OrderDate] [datetime] NOT NULL,
[AccountNumber] [nvarchar](15) NULL,
CONSTRAINT [PK_SalesOrderID] PRIMARY KEY CLUSTERED
(
[SalesOrderID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[BulkCopyDemoOrderDetail]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[BulkCopyDemoOrderDetail]
CREATE TABLE [dbo].[BulkCopyDemoOrderDetail](
[SalesOrderID] [int] NOT NULL,
[SalesOrderDetailID] [int] NOT NULL,
[OrderQty] [smallint] NOT NULL,
[ProductID] [int] NOT NULL,
[UnitPrice] [money] NOT NULL,
CONSTRAINT [PK_LineNumber] PRIMARY KEY CLUSTERED
(
[SalesOrderID] ASC,
[SalesOrderDetailID] ASC
) ON [PRIMARY]
) ON [PRIMARY]