Udostępnij za pośrednictwem


SqlBulkCopy Konstruktory

Definicja

Przeciążenia

SqlBulkCopy(SqlConnection)

Inicjuje nowe wystąpienie SqlBulkCopy klasy przy użyciu określonego otwartego wystąpienia klasy SqlConnection .

SqlBulkCopy(String)

Inicjuje i otwiera nowe wystąpienie SqlConnection oparte na podanymconnectionString . Konstruktor używa klasy , SqlConnection aby zainicjować nowe wystąpienie SqlBulkCopy klasy.

SqlBulkCopy(String, SqlBulkCopyOptions)

Inicjuje i otwiera nowe wystąpienie SqlConnection oparte na podanymconnectionString . Konstruktor używa go SqlConnection do zainicjowania nowego wystąpienia SqlBulkCopy klasy. Wystąpienie SqlConnection zachowuje się zgodnie z opcjami podanymi wcopyOptions Parametr.

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicjuje nowe wystąpienie SqlBulkCopy klasy przy użyciu dostarczonego istniejącego otwartego wystąpienia klasy SqlConnection . Wystąpienie SqlBulkCopy zachowuje się zgodnie z opcjami podanymi wcopyOptions Parametr. Jeśli podano wartość inną niż null SqlTransaction , operacje kopiowania zostaną wykonane w ramach tej transakcji.

SqlBulkCopy(SqlConnection)

Inicjuje nowe wystąpienie SqlBulkCopy klasy przy użyciu określonego otwartego wystąpienia klasy 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

Już otwarte SqlConnection wystąpienie, które będzie używane do wykonywania operacji kopiowania zbiorczego. Jeśli parametry połączenia nie są używaneIntegrated Security = true , można użyć SqlCredential polecenia , aby bezpieczniej przekazać identyfikator użytkownika i hasło, określając identyfikator użytkownika i hasło jako tekst w parametrach połączenia.

Przykłady

Poniższa aplikacja konsolowa pokazuje, jak zbiorczo ładować dane przy użyciu połączenia, które jest już otwarte. W tym przykładzie SqlDataReader element jest używany do kopiowania danych z tabeli Production.Product w bazie danych SQL Server AdventureWorks do podobnej tabeli w tej samej bazie danych. Ten przykład służy tylko do celów demonstracyjnych. Nie można przenosić SqlBulkCopy danych z jednej tabeli do innej w tej samej bazie danych w aplikacji produkcyjnej. Należy pamiętać, że dane źródłowe nie muszą znajdować się na SQL Server. Można użyć dowolnego źródła danych, które można odczytać do obiektu IDataReader lub załadować do obiektu DataTable.

Ważne

Ten przykład nie zostanie uruchomiony, chyba że utworzono tabele robocze zgodnie z opisem w temacie Konfiguracja przykładu kopiowania zbiorczego. Ten kod jest dostarczany w celu zademonstrowania składni tylko przy użyciu narzędzia SqlBulkCopy . Jeśli tabele źródłowe i docelowe znajdują się w tym samym wystąpieniu SQL Server, łatwiej i szybciej jest użyć instrukcji Języka Transact-SQL INSERT … SELECT do skopiowania danych.

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

Uwagi

Ponieważ połączenie jest już otwarte po SqlBulkCopy zainicjowaniu wystąpienia, połączenie pozostaje otwarte po SqlBulkCopy zamknięciu wystąpienia. connection Jeśli argument ma wartość null, ArgumentNullException zwracany jest argument .

Dotyczy

SqlBulkCopy(String)

Inicjuje i otwiera nowe wystąpienie SqlConnection oparte na podanymconnectionString . Konstruktor używa klasy , SqlConnection aby zainicjować nowe wystąpienie SqlBulkCopy klasy.

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

Parametry definiujące połączenie, które zostanie otwarte do użycia przez SqlBulkCopy wystąpienie. Jeśli parametry połączenia nie są używaneIntegrated Security = true , można użyć SqlBulkCopy(SqlConnection) polecenia lub SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) i SqlCredential , aby przekazać identyfikator użytkownika i hasło bezpieczniejszie niż przez określenie identyfikatora użytkownika i hasła jako tekstu w parametrach połączenia.

Wyjątki

Jeśli connectionString jest pustym ciągiem, ArgumentException element jest zgłaszany.

Przykłady

Poniższa aplikacja konsolowa demonstruje sposób zbiorczego ładowania danych przy użyciu połączenia określonego jako parametry. Połączenie jest automatycznie zamykane po SqlBulkCopy zamknięciu wystąpienia. W tym przykładzie dane źródłowe są najpierw odczytywane z tabeli SQL Server do SqlDataReader wystąpienia. Dane źródłowe nie muszą znajdować się na SQL Server. Można użyć dowolnego źródła danych, które można odczytać do obiektu lub załadować do IDataReader obiektu DataTable.

Ważne

Ten przykład nie zostanie uruchomiony, chyba że utworzono tabele robocze zgodnie z opisem w temacie Konfiguracja przykładu kopiowania zbiorczego. Ten kod jest dostarczany w celu zademonstrowania składni tylko przy użyciu narzędzia SqlBulkCopy . Jeśli tabele źródłowe i docelowe znajdują się w tym samym wystąpieniu SQL Server, łatwiej i szybciej jest użyć instrukcji Języka Transact-SQL INSERT … SELECT do skopiowania danych.

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

Uwagi

Połączenie jest automatycznie zamykane na końcu operacji kopiowania zbiorczego. Jeśli connectionString parametr ma wartość null, ArgumentNullException element jest zgłaszany. Jeśli connectionString jest pustym ciągiem, ArgumentException element jest zgłaszany.

Dotyczy

SqlBulkCopy(String, SqlBulkCopyOptions)

Inicjuje i otwiera nowe wystąpienie SqlConnection oparte na podanymconnectionString . Konstruktor używa go SqlConnection do zainicjowania nowego wystąpienia SqlBulkCopy klasy. Wystąpienie SqlConnection zachowuje się zgodnie z opcjami podanymi wcopyOptions 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

Parametry definiujące połączenie, które zostanie otwarte do użycia przez SqlBulkCopy wystąpienie. Jeśli parametry połączenia nie są używaneIntegrated Security = true , można użyć SqlBulkCopy(SqlConnection) polecenia lub SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction) i SqlCredential , aby przekazać identyfikator użytkownika i hasło bezpieczniejszie niż przez określenie identyfikatora użytkownika i hasła jako tekstu w parametrach połączenia.

copyOptions
SqlBulkCopyOptions

Kombinacja wartości z SqlBulkCopyOptions wyliczenia, która określa, które wiersze źródła danych są kopiowane do tabeli docelowej.

Przykłady

Poniższa aplikacja konsolowa pokazuje, jak przeprowadzić ładowanie zbiorcze przy użyciu połączenia określonego jako parametr. Opcja jest ustawiona tak, aby używała wartości w kolumnie tożsamości tabeli źródłowej podczas ładowania tabeli docelowej. W tym przykładzie dane źródłowe są najpierw odczytywane z tabeli SQL Server do SqlDataReader wystąpienia. Tabela źródłowa i tabela docelowa zawierają kolumnę Tożsamość. Domyślnie nowa wartość kolumny Identity jest generowana w tabeli docelowej dla każdego dodanego wiersza. W tym przykładzie opcja jest ustawiana po otwarciu połączenia, które wymusza proces ładowania zbiorczego na użycie wartości Identity z tabeli źródłowej. Aby zobaczyć, jak opcja zmienia sposób działania ładowania zbiorczego, uruchom przykład z bazą danych. Tabela BulkCopyDemoMatchingColumns jest pusta. Wszystkie wiersze są ładowane ze źródła. Następnie ponownie uruchom przykład bez opróżniania tabeli. Zgłaszany jest wyjątek, a kod zapisuje komunikat w konsoli z powiadomieniem o tym, że wiersze nie zostały dodane z powodu naruszeń ograniczeń klucza podstawowego.

Ważne

Ten przykład nie zostanie uruchomiony, chyba że utworzono tabele robocze zgodnie z opisem w temacie Konfiguracja przykładu kopiowania zbiorczego. Ten kod jest dostarczany w celu zademonstrowania składni tylko przy użyciu narzędzia SqlBulkCopy . Jeśli tabele źródłowe i docelowe znajdują się w tym samym wystąpieniu SQL Server, łatwiej i szybciej jest użyć instrukcji Języka Transact-SQL INSERT … SELECT do skopiowania danych.

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

Uwagi

Szczegółowe informacje o wszystkich opcjach kopiowania zbiorczego można uzyskać w temacie SqlBulkCopyOptions .

Dotyczy

SqlBulkCopy(SqlConnection, SqlBulkCopyOptions, SqlTransaction)

Inicjuje nowe wystąpienie SqlBulkCopy klasy przy użyciu dostarczonego istniejącego otwartego wystąpienia klasy SqlConnection . Wystąpienie SqlBulkCopy zachowuje się zgodnie z opcjami podanymi wcopyOptions Parametr. Jeśli podano wartość inną niż null SqlTransaction , operacje kopiowania zostaną wykonane w ramach tej transakcji.

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

Już otwarte SqlConnection wystąpienie, które będzie używane do wykonywania kopii zbiorczej. Jeśli parametry połączenia nie są używaneIntegrated Security = true , można użyć SqlCredential polecenia , aby bezpieczniej przekazać identyfikator użytkownika i hasło, określając identyfikator użytkownika i hasło jako tekst w parametrach połączenia.

copyOptions
SqlBulkCopyOptions

Kombinacja wartości z SqlBulkCopyOptions wyliczenia, która określa, które wiersze źródła danych są kopiowane do tabeli docelowej.

externalTransaction
SqlTransaction

Istniejące SqlTransaction wystąpienie, w którym zostanie wykonana kopia zbiorcza.

Uwagi

Jeśli opcje obejmują UseInternalTransaction argument i externalTransaction argument nie ma wartości null, zgłaszany jest wyjątek InvalidArgumentException .

Przykłady pokazujące sposób użycia SqlBulkCopy w transakcji można znaleźć w temacie Transaction and Bulk Copy Operations (Operacje transakcji i kopiowania zbiorczego).

Zobacz też

Dotyczy