Sdílet prostřednictvím


SqlBulkCopy Konstruktory

Definice

Přetížení

SqlBulkCopy(SqlConnection)

Inicializuje novou instanci SqlBulkCopy třídy pomocí zadané otevřené instance .SqlConnection

SqlBulkCopy(String)

Inicializuje a otevře novou instanci na SqlConnection základě zadanéhoconnectionString . Konstruktor používá SqlConnection k inicializaci nové instance SqlBulkCopy třídy .

SqlBulkCopy(String, SqlBulkCopyOptions)

Inicializuje a otevře novou instanci na SqlConnection základě zadanéhoconnectionString . Konstruktor používá k SqlConnection inicializaci nové instance SqlBulkCopy třídy . Instance SqlConnection se chová podle možností zadaných vcopyOptions Parametr.

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicializuje novou instanci SqlBulkCopy třídy pomocí zadané existující otevřené instance objektu SqlConnection . Instance SqlBulkCopy se chová podle možností zadaných vcopyOptions Parametr. Pokud je zadána hodnota, která není null SqlTransaction , budou operace kopírování provedeny v rámci této transakce.

SqlBulkCopy(SqlConnection)

Inicializuje novou instanci SqlBulkCopy třídy pomocí zadané otevřené instance .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)

Parametry

connection
SqlConnection

Již otevřená SqlConnection instance, která bude použita k provedení operace hromadného kopírování. Pokud váš připojovací řetězec nepoužíváIntegrated Security = true můžete použít SqlCredential k bezpečnějšímu předávání ID uživatele a hesla než zadáním ID uživatele a hesla jako textu v připojovacím řetězci.

Příklady

Následující konzolová aplikace ukazuje, jak hromadně načíst data pomocí již otevřeného připojení. V tomto příkladu SqlDataReader se používá ke kopírování dat z tabulky Production.Product v databázi SQL Server AdventureWorks do podobné tabulky ve stejné databázi. Tento příklad slouží pouze pro demonstrační účely. K přesunu dat z jedné tabulky do jiné ve stejné databázi v produkční aplikaci byste nepoužívali SqlBulkCopy . Mějte na paměti, že zdrojová data nemusí být umístěna na SQL Server. Můžete použít libovolný zdroj dat, který lze načíst do objektu IDataReader nebo načíst do DataTable.

Důležité

Tato ukázka se nespustí, pokud jste nevytvořili pracovní tabulky, jak je popsáno v části Ukázková instalace hromadného kopírování. Tento kód slouží k předvedení syntaxe pouze pro použití SqlBulkCopy . Pokud jsou zdrojová a cílová tabulka ve stejné SQL Server instanci, je jednodušší a rychlejší použít příkaz jazyka Transact-SQL INSERT … SELECT ke kopírování dat.

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

Poznámky

Vzhledem k tomu, že připojení je již otevřeno při SqlBulkCopy inicializaci instance, zůstane otevřené i po SqlBulkCopy uzavření instance. connection Pokud je argument null, ArgumentNullException je vyvolán .

Platí pro

SqlBulkCopy(String)

Inicializuje a otevře novou instanci na SqlConnection základě zadanéhoconnectionString . Konstruktor používá SqlConnection k inicializaci nové instance SqlBulkCopy třídy .

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)

Parametry

connectionString
String

Řetězec definující připojení, které se otevře pro použití SqlBulkCopy instancí. Pokud váš připojovací řetězec nepoužíváIntegrated Security = true , můžete použít SqlBulkCopy(SqlConnection) nebo SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) a SqlCredential k bezpečnějšímu předávání ID uživatele a hesla než zadáním ID uživatele a hesla jako textu v připojovacím řetězci.

Výjimky

Pokud connectionString je prázdný řetězec, ArgumentException je vyvolán .

Příklady

Následující konzolová aplikace ukazuje, jak hromadně načíst data pomocí připojení zadaného jako řetězec. Připojení se automaticky ukončí při zavření SqlBulkCopy instance. V tomto příkladu se zdrojová data nejprve načtou z SQL Server tabulky do SqlDataReader instance. Zdrojová data nemusí být umístěna na SQL Server. Můžete použít libovolný zdroj dat, který lze načíst do objektu IDataReader nebo načíst do DataTable.

Důležité

Tato ukázka se nespustí, pokud jste nevytvořili pracovní tabulky, jak je popsáno v části Ukázková instalace hromadného kopírování. Tento kód slouží k předvedení syntaxe pouze pro použití SqlBulkCopy . Pokud jsou zdrojová a cílová tabulka ve stejné SQL Server instanci, je jednodušší a rychlejší použít příkaz jazyka Transact-SQL INSERT … SELECT ke kopírování dat.

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

Poznámky

Připojení se automaticky ukončí na konci operace hromadného kopírování. Pokud connectionString má hodnotu null, vyvolá se hodnota ArgumentNullException . Pokud connectionString je prázdný řetězec, ArgumentException je vyvolán .

Platí pro

SqlBulkCopy(String, SqlBulkCopyOptions)

Inicializuje a otevře novou instanci na SqlConnection základě zadanéhoconnectionString . Konstruktor používá k SqlConnection inicializaci nové instance SqlBulkCopy třídy . Instance SqlConnection se chová podle možností zadaných vcopyOptions Parametr.

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)

Parametry

connectionString
String

Řetězec definující připojení, které se otevře pro použití SqlBulkCopy instancí. Pokud váš připojovací řetězec nepoužíváIntegrated Security = true , můžete použít SqlBulkCopy(SqlConnection) nebo SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) a SqlCredential k bezpečnějšímu předávání ID uživatele a hesla než zadáním ID uživatele a hesla jako textu v připojovacím řetězci.

copyOptions
SqlBulkCopyOptions

Kombinace hodnot z výčtu SqlBulkCopyOptions , která určuje, které řádky zdroje dat jsou zkopírovány do cílové tabulky.

Příklady

Následující konzolová aplikace ukazuje, jak provést hromadné načtení pomocí připojení zadaného jako řetězec. Možnost je nastavená tak, aby při načítání cílové tabulky používala hodnotu ve sloupci identity zdrojové tabulky. V tomto příkladu se zdrojová data nejprve načtou z SQL Server tabulky do SqlDataReader instance. Zdrojová i cílová tabulka obsahují sloupec Identita. Ve výchozím nastavení se v cílové tabulce pro každý přidaný řádek vygeneruje nová hodnota sloupce Identita . V tomto příkladu je při otevření připojení nastavena možnost, která vynutí, aby proces hromadného načítání místo toho použil hodnoty Identity ze zdrojové tabulky. Pokud chcete zjistit, jak tato možnost mění způsob fungování hromadného načítání, spusťte ukázku s dbo. BulkCopyDemoMatchingColumns tabulka je prázdná. Všechny řádky se načítají ze zdroje. Pak znovu spusťte ukázku bez vyprázdnění tabulky. Dojde k výjimce a kód zapíše do konzoly zprávu s oznámením, že řádky nebyly přidány z důvodu porušení omezení primárního klíče.

Důležité

Tato ukázka se nespustí, pokud jste nevytvořili pracovní tabulky, jak je popsáno v části Ukázková instalace hromadného kopírování. Tento kód slouží k předvedení syntaxe pouze pro použití SqlBulkCopy . Pokud jsou zdrojová a cílová tabulka ve stejné SQL Server instanci, je jednodušší a rychlejší použít příkaz jazyka Transact-SQL INSERT … SELECT ke kopírování dat.

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

Poznámky

Podrobné informace o všech možnostech hromadného kopírování najdete v tomto SqlBulkCopyOptions tématu.

Platí pro

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicializuje novou instanci SqlBulkCopy třídy pomocí zadané existující otevřené instance objektu SqlConnection . Instance SqlBulkCopy se chová podle možností zadaných vcopyOptions Parametr. Pokud je zadána hodnota, která není null SqlTransaction , budou operace kopírování provedeny v rámci této transakce.

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)

Parametry

connection
SqlConnection

Již otevřená SqlConnection instance, která bude použita k provedení hromadného kopírování. Pokud váš připojovací řetězec nepoužíváIntegrated Security = true můžete použít SqlCredential k bezpečnějšímu předávání ID uživatele a hesla než zadáním ID uživatele a hesla jako textu v připojovacím řetězci.

copyOptions
SqlBulkCopyOptions

Kombinace hodnot z výčtu SqlBulkCopyOptions , která určuje, které řádky zdroje dat jsou zkopírovány do cílové tabulky.

externalTransaction
SqlTransaction

Existující SqlTransaction instance, pod kterou bude probíhat hromadné kopírování.

Poznámky

Pokud možnosti zahrnují UseInternalTransaction a externalTransaction argument není null, InvalidArgumentException je vyvolána.

Příklady demonstrující použití SqlBulkCopy v transakci naleznete v tématu Transakce a Operace hromadného kopírování.

Viz také

Platí pro