Поделиться через


Пример настройки массового копирования (ADO.NET)

Обновлен: November 2007

Класс SqlBulkCopy может использоваться для записи данных только в таблицы SQL Server. В примерах кода, рассматриваемых в настоящем разделе, используется образец базы данных SQL Server 2005, AdventureWorks. В целях предотвращения модификации существующих таблиц в этих образцах кода запись данных осуществляется в таблицы, которые должны быть созданы заранее.

Обе применяемые таблицы, BulkCopyDemoMatchingColumns и BulkCopyDemoDifferentColumns, основаны на таблице Production.Products базы данных AdventureWorks. В образцах кода, в которых используются эти таблицы, данные добавляются из таблицы Production.Products в одну из таблиц, применяемых в коде. Таблица BulkCopyDemoDifferentColumns используется в образце кода для иллюстрации того, как сопоставлять столбцы из таблицы с исходными данными с целевой таблицей, а таблица BulkCopyDemoMatchingColumns применяется в большинстве остальных образцов.

В некоторых образцах кода демонстрируется использование одного класса SqlBulkCopy для записи в несколько таблиц. В этих образцах в качестве целевых таблиц применяются таблицы BulkCopyDemoOrderHeader и BulkCopyDemoOrderDetail. Эти таблицы основаны на таблицах Sales.SalesOrderHeader и Sales.SalesOrderDetail базы данных AdventureWorks.

ms172141.alert_note(ru-ru,VS.90).gifПримечание.

Образцы кода SqlBulkCopy предоставляются только для демонстрации синтаксиса применения SqlBulkCopy. Если исходная и целевая таблицы расположены в одном и том же экземпляре SQL Server, легче и быстрее использовать для копирования данных инструкцию INSERT … SELECT языка Transact-SQL.

Подготовка таблиц

Чтобы создать таблицы, необходимые для правильного выполнения образцов кода, требуется выполнить следующие инструкции Transact-SQL в базе данных SQL Server.

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]

См. также

Другие ресурсы

Операции массового копирования в SQL Server (ADO.NET)