SqlBulkCopy 建構函式

定義

多載

SqlBulkCopy(SqlConnection)

使用 指定的開啟實例, SqlBulkCopy 初始化 類別的新實例 SqlConnection

SqlBulkCopy(String)

根據提供的 初始化並開啟 的新實例 SqlConnectionconnectionString . 這個建構函式會使用 SqlConnection 來初始化 SqlBulkCopy 類別的新執行個體。

SqlBulkCopy(String, SqlBulkCopyOptions)

根據提供的 初始化並開啟 的新實例 SqlConnectionconnectionString . 建構函式會使用 SqlConnection,初始化 SqlBulkCopy 類別的新執行個體。 SqlConnection實例會根據 中提供的選項來運作copyOptions 參數。

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

使用 提供的現有開啟實例,初始化 類別的新 SqlBulkCopy 實例 SqlConnectionSqlBulkCopy實例會根據 中提供的選項來運作copyOptions 參數。 如果提供了非 null 的 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 用於從 SQL Server AdventureWorks 資料庫的 Production.Product 資料表,將資料複製到同一資料庫中的類似資料表中。 此範例僅供示範使用。 您不會使用 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)

根據提供的 初始化並開啟 的新實例 SqlConnectionconnectionString . 這個建構函式會使用 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)

根據提供的 初始化並開啟 的新實例 SqlConnectionconnectionString . 建構函式會使用 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 資料行。 根據預設,系統會針對每個新增的資料列,在目的地資料表中產生 Identity 資料行的新值。 在此範例中,開啟連接時會設定選項,以強制大量載入進程改用來源資料表中的 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 實例 SqlConnectionSqlBulkCopy實例會根據 中提供的選項來運作copyOptions 參數。 如果提供了非 null 的 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 範例,請參閱 交易和大量複製作業

另請參閱

適用於