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


SqlBulkCopy Конструкторы

Определение

Перегрузки

SqlBulkCopy(SqlConnection)

Инициализирует новый экземпляр класса , SqlBulkCopy используя указанный открытый SqlConnection экземпляр класса .

SqlBulkCopy(String)

Инициализирует и открывает новый экземпляр на SqlConnection основе предоставленногоconnectionString . Конструктор использует SqlConnection для инициализации нового экземпляра класса SqlBulkCopy.

SqlBulkCopy(String, SqlBulkCopyOptions)

Инициализирует и открывает новый экземпляр на SqlConnection основе предоставленногоconnectionString . Этот конструктор использует SqlConnection для инициализации нового экземпляра класса SqlBulkCopy. Экземпляр SqlConnection ведет себя в соответствии с параметрами, указанными в параметром copyOptions.

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Инициализирует новый экземпляр класса , SqlBulkCopy используя предоставленный существующий открытый SqlConnection экземпляр . Экземпляр SqlBulkCopy ведет себя в соответствии с параметрами, указанными в параметром copyOptions. Если предоставлено ненулевое значение SqlTransaction, операция копирования будет выполнена в этой транзакции.

SqlBulkCopy(SqlConnection)

Инициализирует новый экземпляр класса , SqlBulkCopy используя указанный открытый SqlConnection экземпляр класса .

public:
 SqlBulkCopy(Microsoft::Data::SqlClient::SqlConnection ^ connection);
public SqlBulkCopy (Microsoft.Data.SqlClient.SqlConnection connection);
new Microsoft.Data.SqlClient.SqlBulkCopy : Microsoft.Data.SqlClient.SqlConnection -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection)

Параметры

connection
SqlConnection

Уже открытый экземпляр SqlConnection, который будет использоваться для выполнения массового копирования. Если строка подключения не используетIntegrated Security = true , можно использовать для SqlCredential более безопасной передачи идентификатора пользователя и пароля, чем путем указания идентификатора пользователя и пароля в виде текста в строке подключения.

Примеры

В следующем консольном приложении показано, как выполнить массовую загрузку данных с помощью уже открытого подключения. В этом примере объект SqlDataReader используется, чтобы скопировать данные из таблицы Production.Product в базе данных SQL Server AdventureWorks в такую же таблицу в этой же базе данных. Пример приводится исключительно для демонстрации. Вы не будете использовать для SqlBulkCopy перемещения данных из одной таблицы в другую в той же базе данных в рабочем приложении. Обратите внимание, что исходные данные не обязательно должны находиться на SQL Server; можно использовать любой IDataReader источник данных, который можно считать в или загрузить в DataTable.

Важно!

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

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a sourceConnection to the AdventureWorks database.
        using (SqlConnection sourceConnection =
                   new SqlConnection(connectionString))
        {
            sourceConnection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                sourceConnection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Get data from the source table as a SqlDataReader.
            SqlCommand commandSourceData = new SqlCommand(
                "SELECT ProductID, Name, " +
                "ProductNumber " +
                "FROM Production.Product;", sourceConnection);
            SqlDataReader reader =
                commandSourceData.ExecuteReader();

            // Open the destination connection. In the real world you would 
            // not use SqlBulkCopy to move data from one table to the other 
            // in the same database. This is for demonstration purposes only.
            using (SqlConnection destinationConnection =
                       new SqlConnection(connectionString))
            {
                destinationConnection.Open();

                // Set up the bulk copy object. 
                // Note that the column positions in the source
                // data reader match the column positions in 
                // the destination table so there is no need to
                // map columns.
                using (SqlBulkCopy bulkCopy =
                           new SqlBulkCopy(destinationConnection))
                {
                    bulkCopy.DestinationTableName =
                        "dbo.BulkCopyDemoMatchingColumns";

                    try
                    {
                        // Write from the source to the destination.
                        bulkCopy.WriteToServer(reader);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    finally
                    {
                        // Close the SqlDataReader. The SqlBulkCopy
                        // object is automatically closed at the end
                        // of the using block.
                        reader.Close();
                    }
                }

                // Perform a final count on the destination 
                // table to see how many rows were added.
                long countEnd = System.Convert.ToInt32(
                    commandRowCount.ExecuteScalar());
                Console.WriteLine("Ending row count = {0}", countEnd);
                Console.WriteLine("{0} rows were added.", countEnd - countStart);
                Console.WriteLine("Press Enter to finish.");
                Console.ReadLine();
            }
        }
    }

    private static string GetConnectionString()
    // To avoid storing the sourceConnection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

Комментарии

Так как подключение уже открыто при инициализации SqlBulkCopy экземпляра, соединение остается открытым после закрытия экземпляра SqlBulkCopy . connection Если аргумент имеет значение NULL, ArgumentNullException создается исключение .

Применяется к

SqlBulkCopy(String)

Инициализирует и открывает новый экземпляр на SqlConnection основе предоставленногоconnectionString . Конструктор использует SqlConnection для инициализации нового экземпляра класса SqlBulkCopy.

public:
 SqlBulkCopy(System::String ^ connectionString);
public SqlBulkCopy (string connectionString);
new Microsoft.Data.SqlClient.SqlBulkCopy : string -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String)

Параметры

connectionString
String

Строка, определяющая подключение, которое будет открыто для использования экземпляром SqlBulkCopy. Если строка подключения не используетIntegrated Security = true Можно использовать SqlBulkCopy(SqlConnection) или SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) и для SqlCredential более безопасной передачи идентификатора пользователя и пароля, чем путем указания идентификатора пользователя и пароля в виде текста в строке подключения.

Исключения

Если connectionString является пустой строкой ArgumentException , возникает исключение .

Примеры

В следующем консольном приложении показано, как выполнить массовую загрузку данных с помощью подключения, указанного в виде строки. Соединение автоматически закрывается при закрытии экземпляра SqlBulkCopy . В этом примере исходные данные сначала считываются из SQL Server таблицы в SqlDataReader экземпляр . Исходные данные не обязательно должны находиться на SQL Server; можно использовать любой IDataReader источник данных, который можно считать в или загрузить в DataTable.

Важно!

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

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a sourceConnection to the AdventureWorks database.
        using (SqlConnection sourceConnection =
                   new SqlConnection(connectionString))
        {
            sourceConnection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                sourceConnection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Get data from the source table as a SqlDataReader.
            SqlCommand commandSourceData = new SqlCommand(
                "SELECT ProductID, Name, " +
                "ProductNumber " +
                "FROM Production.Product;", sourceConnection);
            SqlDataReader reader =
                commandSourceData.ExecuteReader();

            // Set up the bulk copy object using a connection string. 
            // In the real world you would not use SqlBulkCopy to move
            // data from one table to the other in the same database.
            using (SqlBulkCopy bulkCopy =
                       new SqlBulkCopy(connectionString))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write from the source to the destination.
                    bulkCopy.WriteToServer(reader);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    // Close the SqlDataReader. The SqlBulkCopy
                    // object is automatically closed at the end
                    // of the using block.
                    reader.Close();
                }
            }

            // Perform a final count on the destination 
            // table to see how many rows were added.
            long countEnd = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Ending row count = {0}", countEnd);
            Console.WriteLine("{0} rows were added.", countEnd - countStart);
            Console.WriteLine("Press Enter to finish.");
            Console.ReadLine();
        }
    }

    private static string GetConnectionString()
    // To avoid storing the sourceConnection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

Комментарии

Подключение автоматически закрывается в конце операции массового копирования. Если connectionString имеет значение NULL, ArgumentNullException возникает исключение . Если connectionString является пустой строкой ArgumentException , возникает исключение .

Применяется к

SqlBulkCopy(String, SqlBulkCopyOptions)

Инициализирует и открывает новый экземпляр на SqlConnection основе предоставленногоconnectionString . Этот конструктор использует SqlConnection для инициализации нового экземпляра класса SqlBulkCopy. Экземпляр SqlConnection ведет себя в соответствии с параметрами, указанными в параметром copyOptions.

public:
 SqlBulkCopy(System::String ^ connectionString, Microsoft::Data::SqlClient::SqlBulkCopyOptions copyOptions);
public SqlBulkCopy (string connectionString, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions);
new Microsoft.Data.SqlClient.SqlBulkCopy : string * Microsoft.Data.SqlClient.SqlBulkCopyOptions -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connectionString As String, copyOptions As SqlBulkCopyOptions)

Параметры

connectionString
String

Строка, определяющая подключение, которое будет открыто для использования экземпляром SqlBulkCopy. Если строка подключения не используетIntegrated Security = true Можно использовать SqlBulkCopy(SqlConnection) или SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) и для SqlCredential более безопасной передачи идентификатора пользователя и пароля, чем путем указания идентификатора пользователя и пароля в виде текста в строке подключения.

copyOptions
SqlBulkCopyOptions

Комбинация значений из перечисления SqlBulkCopyOptions, определяющая, какие строки из источника данных будут скопированы в конечную таблицу.

Примеры

В следующем консольном приложении показано, как выполнить массовую загрузку с помощью подключения, указанного в виде строки. Параметр использует значение в столбце идентификаторов исходной таблицы при загрузке целевой таблицы. В этом примере исходные данные сначала считываются из SQL Server таблицы в SqlDataReader экземпляр . Исходная и целевая таблицы содержат столбец Идентификатор. По умолчанию для каждой добавленной строки в целевой таблице создается новое значение столбца Identity . В этом примере при открытии подключения задается параметр , который заставляет процесс массовой загрузки использовать значения идентификаторов из исходной таблицы. Чтобы увидеть, как параметр изменяет способ работы массовой загрузки, запустите пример с помощью dbo. Таблица BulkCopyDemoMatchingColumns пуста. Все строки загружаются из источника. Затем снова запустите пример, не очищая таблицу. Возникает исключение, и код записывает в консоль сообщение о том, что строки не были добавлены из-за нарушений ограничений первичного ключа.

Важно!

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

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a sourceConnection to the AdventureWorks database.
        using (SqlConnection sourceConnection =
                   new SqlConnection(connectionString))
        {
            sourceConnection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                sourceConnection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Get data from the source table as a SqlDataReader.
            SqlCommand commandSourceData = new SqlCommand(
                "SELECT ProductID, Name, " +
                "ProductNumber " +
                "FROM Production.Product;", sourceConnection);
            SqlDataReader reader =
                commandSourceData.ExecuteReader();

            // Create the SqlBulkCopy object using a connection string 
            // and the KeepIdentity option. 
            // In the real world you would not use SqlBulkCopy to move
            // data from one table to the other in the same database.
            using (SqlBulkCopy bulkCopy =
                new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write from the source to the destination.
                    bulkCopy.WriteToServer(reader);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    // Close the SqlDataReader. The SqlBulkCopy
                    // object is automatically closed at the end
                    // of the using block.
                    reader.Close();
                }
            }

            // Perform a final count on the destination 
            // table to see how many rows were added.
            long countEnd = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Ending row count = {0}", countEnd);
            Console.WriteLine("{0} rows were added.", countEnd - countStart);
            Console.WriteLine("Press Enter to finish.");
            Console.ReadLine();
        }
    }

    private static string GetConnectionString()
    // To avoid storing the sourceConnection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

Комментарии

Подробные сведения обо всех вариантах массового копирования см. в SqlBulkCopyOptions этой статье.

Применяется к

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Инициализирует новый экземпляр класса , SqlBulkCopy используя предоставленный существующий открытый SqlConnection экземпляр . Экземпляр SqlBulkCopy ведет себя в соответствии с параметрами, указанными в параметром copyOptions. Если предоставлено ненулевое значение SqlTransaction, операция копирования будет выполнена в этой транзакции.

public:
 SqlBulkCopy(Microsoft::Data::SqlClient::SqlConnection ^ connection, Microsoft::Data::SqlClient::SqlBulkCopyOptions copyOptions, Microsoft::Data::SqlClient::SqlTransaction ^ externalTransaction);
public SqlBulkCopy (Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions, Microsoft.Data.SqlClient.SqlTransaction externalTransaction);
new Microsoft.Data.SqlClient.SqlBulkCopy : Microsoft.Data.SqlClient.SqlConnection * Microsoft.Data.SqlClient.SqlBulkCopyOptions * Microsoft.Data.SqlClient.SqlTransaction -> Microsoft.Data.SqlClient.SqlBulkCopy
Public Sub New (connection As SqlConnection, copyOptions As SqlBulkCopyOptions, externalTransaction As SqlTransaction)

Параметры

connection
SqlConnection

Уже открытый экземпляр SqlConnection, который будет использоваться для выполнения массового копирования. Если строка подключения не используетIntegrated Security = true , можно использовать для SqlCredential более безопасной передачи идентификатора пользователя и пароля, чем путем указания идентификатора пользователя и пароля в виде текста в строке подключения.

copyOptions
SqlBulkCopyOptions

Комбинация значений из перечисления SqlBulkCopyOptions, определяющая, какие строки из источника данных будут скопированы в конечную таблицу.

externalTransaction
SqlTransaction

Существующий экземпляр SqlTransaction, для которого будет выполняться массовое копирование.

Комментарии

Если параметры включают UseInternalTransaction и externalTransaction аргумент не имеет значения NULL, возникает исключение InvalidArgumentException .

Примеры SqlBulkCopy использования в транзакции см. в разделе Операции транзакций и массового копирования.

См. также раздел

Применяется к