Share via


SqlBulkCopy Constructors

Definition

Overloads

SqlBulkCopy(SqlConnection)

Initializes a new instance of the SqlBulkCopy class using the specified open instance of SqlConnection .

SqlBulkCopy(String)

Initializes and opens a new instance of SqlConnection based on the supplied connectionString . The constructor uses the SqlConnection to initialize a new instance of the SqlBulkCopy class.

SqlBulkCopy(String, SqlBulkCopyOptions)

Initializes and opens a new instance of SqlConnection based on the supplied connectionString . The constructor uses that SqlConnection to initialize a new instance of the SqlBulkCopy class. The SqlConnection instance behaves according to options supplied in the copyOptions parameter.

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Initializes a new instance of the SqlBulkCopy class using the supplied existing open instance of SqlConnection . The SqlBulkCopy instance behaves according to options supplied in the copyOptions parameter. If a non-null SqlTransaction is supplied, the copy operations will be performed within that transaction.

SqlBulkCopy(SqlConnection)

Initializes a new instance of the SqlBulkCopy class using the specified open instance of 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)

Parameters

connection
SqlConnection

The already open SqlConnection instance that will be used to perform the bulk copy operation. If your connection string does not use Integrated Security = true , you can use SqlCredential to pass the user ID and password more securely than by specifying the user ID and password as text in the connection string.

Examples

The following console application demonstrates how to bulk load data using a connection that is already open. In this example, a SqlDataReader is used to copy data from the Production.Product table in the SQL Server AdventureWorks database to a similar table in the same database. This example is for demonstration purposes only. You would not use SqlBulkCopy to move data from one table to another in the same database in a production application. Note that the source data does not have to be located on SQL Server; you can use any data source that can be read to an IDataReader or loaded to a DataTable.

Important

This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. This code is provided to demonstrate the syntax for using SqlBulkCopy only. If the source and destination tables are in the same SQL Server instance, it is easier and faster to use a Transact-SQL INSERT … SELECT statement to copy the data.

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;";
    }
}

Remarks

Because the connection is already open when the SqlBulkCopy instance is initialized, the connection remains open after the SqlBulkCopy instance is closed. If the connection argument is null, an ArgumentNullException is thrown.

Applies to

SqlBulkCopy(String)

Initializes and opens a new instance of SqlConnection based on the supplied connectionString . The constructor uses the SqlConnection to initialize a new instance of the SqlBulkCopy class.

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)

Parameters

connectionString
String

The string defining the connection that will be opened for use by the SqlBulkCopy instance. If your connection string does not use Integrated Security = true , you can use SqlBulkCopy(SqlConnection) or SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) and SqlCredential to pass the user ID and password more securely than by specifying the user ID and password as text in the connection string.

Exceptions

If connectionString is an empty string, an ArgumentException is thrown.

Examples

The following console application demonstrates how to bulk load data by using a connection specified as a string. The connection is automatically closed when the SqlBulkCopy instance is closed. In this example, the source data is first read from a SQL Server table to a SqlDataReader instance. The source data does not have to be located on SQL Server; you can use any data source that can be read to an IDataReader or loaded to a DataTable.

Important

This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. This code is provided to demonstrate the syntax for using SqlBulkCopy only. If the source and destination tables are in the same SQL Server instance, it is easier and faster to use a Transact-SQL INSERT … SELECT statement to copy the data.

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;";
    }
}

Remarks

The connection is automatically closed at the end of the bulk copy operation. If connectionString is null, an ArgumentNullException is thrown. If connectionString is an empty string, an ArgumentException is thrown.

Applies to

SqlBulkCopy(String, SqlBulkCopyOptions)

Initializes and opens a new instance of SqlConnection based on the supplied connectionString . The constructor uses that SqlConnection to initialize a new instance of the SqlBulkCopy class. The SqlConnection instance behaves according to options supplied in the copyOptions parameter.

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)

Parameters

connectionString
String

The string defining the connection that will be opened for use by the SqlBulkCopy instance. If your connection string does not use Integrated Security = true , you can use SqlBulkCopy(SqlConnection) or SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) and SqlCredential to pass the user ID and password more securely than by specifying the user ID and password as text in the connection string.

copyOptions
SqlBulkCopyOptions

A combination of values from the SqlBulkCopyOptions enumeration that determines which data source rows are copied to the destination table.

Examples

The following console application demonstrates how to perform a bulk load by using a connection specified as a string. An option is set to use the value in the identity column of the source table when you load the destination table. In this example, the source data is first read from a SQL Server table to a SqlDataReader instance. The source table and destination table each include an Identity column. By default, a new value for the Identity column is generated in the destination table for each row added. In this example, an option is set when the connection is opened that forces the bulk load process to use the Identity values from the source table instead. To see how the option changes the way the bulk load works, run the sample with the dbo.BulkCopyDemoMatchingColumns table empty. All rows load from the source. Then run the sample again without emptying the table. An exception is thrown and the code writes a message to the console notifying you that rows weren't added because of primary key constraint violations.

Important

This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. This code is provided to demonstrate the syntax for using SqlBulkCopy only. If the source and destination tables are in the same SQL Server instance, it is easier and faster to use a Transact-SQL INSERT … SELECT statement to copy the data.

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;";
    }
}

Remarks

You can obtain detailed information about all the bulk copy options in the SqlBulkCopyOptions topic.

Applies to

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Initializes a new instance of the SqlBulkCopy class using the supplied existing open instance of SqlConnection . The SqlBulkCopy instance behaves according to options supplied in the copyOptions parameter. If a non-null SqlTransaction is supplied, the copy operations will be performed within that transaction.

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)

Parameters

connection
SqlConnection

The already open SqlConnection instance that will be used to perform the bulk copy. If your connection string does not use Integrated Security = true , you can use SqlCredential to pass the user ID and password more securely than by specifying the user ID and password as text in the connection string.

copyOptions
SqlBulkCopyOptions

A combination of values from the SqlBulkCopyOptions enumeration that determines which data source rows are copied to the destination table.

externalTransaction
SqlTransaction

An existing SqlTransaction instance under which the bulk copy will occur.

Remarks

If options include UseInternalTransaction and the externalTransaction argument is not null, an InvalidArgumentException is thrown.

For examples demonstrating how to use SqlBulkCopy in a transaction, see Transaction and Bulk Copy Operations.

See also

Applies to