Udostępnij za pośrednictwem


SqlBulkCopy.WriteToServer Metoda

Definicja

Przeciążenia

WriteToServer(DbDataReader)

Kopiuje wszystkie wiersze z podanej DbDataReader tablicy do tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

WriteToServer(DataRow[])

Kopiuje wszystkie wiersze z podanej DataRow tablicy do tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

WriteToServer(DataTable)

Kopiuje wszystkie wiersze podane DataTable do tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

WriteToServer(IDataReader)

Kopiuje wszystkie wiersze podane IDataReader do tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

WriteToServer(DataTable, DataRowState)

Kopiuje tylko wiersze zgodne ze stanem podanego wiersza w podanej DataTable tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

WriteToServer(DbDataReader)

Kopiuje wszystkie wiersze z podanej DbDataReader tablicy do tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

public:
 void WriteToServer(System::Data::Common::DbDataReader ^ reader);
public void WriteToServer (System.Data.Common.DbDataReader reader);
member this.WriteToServer : System.Data.Common.DbDataReader -> unit
Public Sub WriteToServer (reader As DbDataReader)

Parametry

reader
DbDataReader

A DbDataReader którego wiersze zostaną skopiowane do tabeli docelowej.

Wyjątki

Element SqlBulkCopyColumnOrderHint nie określił prawidłowej nazwy kolumny docelowej.

Dotyczy

WriteToServer(DataRow[])

Kopiuje wszystkie wiersze z podanej DataRow tablicy do tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

public:
 void WriteToServer(cli::array <System::Data::DataRow ^> ^ rows);
public void WriteToServer (System.Data.DataRow[] rows);
member this.WriteToServer : System.Data.DataRow[] -> unit
Public Sub WriteToServer (rows As DataRow())

Parametry

rows
DataRow[]

Tablica DataRow obiektów, które zostaną skopiowane do tabeli docelowej.

Wyjątki

Element SqlBulkCopyColumnOrderHint nie określił prawidłowej nazwy kolumny docelowej.

Przykłady

W poniższej DataRow aplikacji konsolowej pokazano, jak zbiorczo ładować dane z tablicy. Tabela docelowa jest tabelą w bazie danych AdventureWorks .

W tym przykładzie DataTable tworzony jest element w czasie wykonywania. Jeden wiersz jest wybierany z DataTable elementu , aby skopiować do tabeli docelowej.

Ważne

Ten przykład nie zostanie uruchomiony, chyba że tabele robocze zostały utworzone 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 używać instrukcji Języka Transact-SQL INSERT … SELECT do kopiowania danych.

Uwagi

Podczas gdy operacja kopiowania zbiorczego jest w toku, skojarzone miejsce docelowe SqlConnection jest zajęte jego obsługą i nie można wykonać żadnych innych operacji na połączeniu.

Kolekcja ColumnMappings mapuje z DataRow kolumn na docelową tabelę bazy danych.

Dotyczy

WriteToServer(DataTable)

Kopiuje wszystkie wiersze podane DataTable do tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

public:
 void WriteToServer(System::Data::DataTable ^ table);
public void WriteToServer (System.Data.DataTable table);
member this.WriteToServer : System.Data.DataTable -> unit
Public Sub WriteToServer (table As DataTable)

Parametry

table
DataTable

A DataTable którego wiersze zostaną skopiowane do tabeli docelowej.

Wyjątki

Element SqlBulkCopyColumnOrderHint nie określił prawidłowej nazwy kolumny docelowej.

Przykłady

W poniższej aplikacji konsolowej pokazano, jak zbiorczo ładować dane z elementu DataTable. Tabela docelowa jest tabelą w bazie danych AdventureWorks .

W tym przykładzie DataTable element jest tworzony w czasie wykonywania i jest źródłem SqlBulkCopy operacji.

Ważne

Ten przykład nie zostanie uruchomiony, chyba że tabele robocze zostały utworzone 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 używać instrukcji Języka Transact-SQL INSERT … SELECT do kopiowania danych.

using Microsoft.Data.SqlClient;

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

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

            // Create a table with some rows. 
            DataTable newProducts = MakeTable();

            // Create the SqlBulkCopy object. 
            // Note that the column positions in the source DataTable 
            // match the column positions in the destination table so 
            // there is no need to map columns. 
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write from the source to the destination.
                    bulkCopy.WriteToServer(newProducts);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            // 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 DataTable MakeTable()
    // Create a new DataTable named NewProducts. 
    {
        DataTable newProducts = new DataTable("NewProducts");

        // Add three column objects to the table. 
        DataColumn productID = new DataColumn();
        productID.DataType = System.Type.GetType("System.Int32");
        productID.ColumnName = "ProductID";
        productID.AutoIncrement = true;
        newProducts.Columns.Add(productID);

        DataColumn productName = new DataColumn();
        productName.DataType = System.Type.GetType("System.String");
        productName.ColumnName = "Name";
        newProducts.Columns.Add(productName);

        DataColumn productNumber = new DataColumn();
        productNumber.DataType = System.Type.GetType("System.String");
        productNumber.ColumnName = "ProductNumber";
        newProducts.Columns.Add(productNumber);

        // Create an array for DataColumn objects.
        DataColumn[] keys = new DataColumn[1];
        keys[0] = productID;
        newProducts.PrimaryKey = keys;

        // Add some new rows to the collection. 
        DataRow row = newProducts.NewRow();
        row["Name"] = "CC-101-WH";
        row["ProductNumber"] = "Cyclocomputer - White";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-BK";
        row["ProductNumber"] = "Cyclocomputer - Black";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-ST";
        row["ProductNumber"] = "Cyclocomputer - Stainless";
        newProducts.Rows.Add(row);
        newProducts.AcceptChanges();

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

Uwagi

Wszystkie wiersze w DataTable tabeli docelowej są kopiowane z wyjątkiem tych, które zostały usunięte.

Podczas gdy operacja kopiowania zbiorczego jest w toku, skojarzone miejsce docelowe SqlConnection jest zajęte jego obsługą i nie można wykonać żadnych innych operacji na połączeniu.

Kolekcja ColumnMappings mapuje z DataTable kolumn na docelową tabelę bazy danych.

Zobacz też

Dotyczy

WriteToServer(IDataReader)

Kopiuje wszystkie wiersze podane IDataReader do tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

public:
 void WriteToServer(System::Data::IDataReader ^ reader);
public void WriteToServer (System.Data.IDataReader reader);
member this.WriteToServer : System.Data.IDataReader -> unit
Public Sub WriteToServer (reader As IDataReader)

Parametry

reader
IDataReader

A IDataReader którego wiersze zostaną skopiowane do tabeli docelowej.

Wyjątki

Element SqlBulkCopyColumnOrderHint nie określił prawidłowej nazwy kolumny docelowej.

Przykłady

W poniższej aplikacji konsolowej pokazano, jak zbiorczo ładować dane z obiektu SqlDataReader. Tabela docelowa jest tabelą w bazie danych AdventureWorks .

Ważne

Ten przykład nie zostanie uruchomiony, chyba że tabele robocze zostały utworzone 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 używać instrukcji Języka Transact-SQL INSERT … SELECT do kopiowania 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

Operacja kopiowania rozpoczyna się od następnego dostępnego wiersza w czytniku. W większości przypadków czytnik został właśnie zwrócony przez ExecuteReader() lub podobne wywołanie, więc następny dostępny wiersz jest pierwszym wierszem. Aby przetworzyć wiele wyników, wywołaj NextResult() czytnik danych i wywołaj WriteToServer ponownie.

Należy pamiętać, że użycie WriteToServer modyfikuje stan czytnika. Metoda wywoła metodę Read() , dopóki nie zwróci wartości false, operacja zostanie przerwana lub wystąpi błąd. Oznacza to, że czytnik danych będzie w innym stanie, prawdopodobnie na końcu zestawu wyników, po zakończeniu WriteToServer operacji.

Podczas gdy operacja kopiowania zbiorczego jest w toku, skojarzone miejsce docelowe SqlConnection jest zajęte jego obsługą i nie można wykonać żadnych innych operacji na połączeniu.

Kolekcja ColumnMappings mapuje z kolumn czytnika danych na docelową tabelę bazy danych.

Dotyczy

WriteToServer(DataTable, DataRowState)

Kopiuje tylko wiersze zgodne ze stanem podanego wiersza w podanej DataTable tabeli docelowej określonej przez DestinationTableName właściwość SqlBulkCopy obiektu.

public:
 void WriteToServer(System::Data::DataTable ^ table, System::Data::DataRowState rowState);
public void WriteToServer (System.Data.DataTable table, System.Data.DataRowState rowState);
member this.WriteToServer : System.Data.DataTable * System.Data.DataRowState -> unit
Public Sub WriteToServer (table As DataTable, rowState As DataRowState)

Parametry

table
DataTable

A DataTable którego wiersze zostaną skopiowane do tabeli docelowej.

rowState
DataRowState

Wartość z wyliczenia DataRowState . Do miejsca docelowego są kopiowane tylko wiersze pasujące do stanu wiersza.

Wyjątki

Element SqlBulkCopyColumnOrderHint nie określił prawidłowej nazwy kolumny docelowej.

Przykłady

Poniższa aplikacja konsolowa pokazuje, jak zbiorczo ładować tylko wiersze w DataTable określonym stanie. W tym przypadku dodawane są tylko niezmienione wiersze. Tabela docelowa jest tabelą w bazie danych AdventureWorks .

W tym przykładzie DataTable tworzony jest element w czasie wykonywania, a do niego są dodawane trzy wiersze. Przed wykonaniem WriteToServer metody jeden z wierszy jest edytowany. Metoda WriteToServer jest wywoływana za pomocą argumentu DataRowState.UnchangedrowState , więc do miejsca docelowego są kopiowane zbiorczo tylko dwa niezmienione wiersze.

Ważne

Ten przykład nie zostanie uruchomiony, chyba że tabele robocze zostały utworzone 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 używać instrukcji Języka Transact-SQL INSERT … SELECT do kopiowania danych.

using Microsoft.Data.SqlClient;

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

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

            // Create a table with some rows. 
            DataTable newProducts = MakeTable();

            // Make a change to one of the rows in the DataTable.
            DataRow row = newProducts.Rows[0];
            row.BeginEdit();
            row["Name"] = "AAA";
            row.EndEdit();

            // Create the SqlBulkCopy object. 
            // Note that the column positions in the source DataTable 
            // match the column positions in the destination table so 
            // there is no need to map columns. 
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write unchanged rows from the source to the destination.
                    bulkCopy.WriteToServer(newProducts, DataRowState.Unchanged);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            // 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 DataTable MakeTable()
    // Create a new DataTable named NewProducts. 
    {
        DataTable newProducts = new DataTable("NewProducts");

        // Add three column objects to the table. 
        DataColumn productID = new DataColumn();
        productID.DataType = System.Type.GetType("System.Int32");
        productID.ColumnName = "ProductID";
        productID.AutoIncrement = true;
        newProducts.Columns.Add(productID);

        DataColumn productName = new DataColumn();
        productName.DataType = System.Type.GetType("System.String");
        productName.ColumnName = "Name";
        newProducts.Columns.Add(productName);

        DataColumn productNumber = new DataColumn();
        productNumber.DataType = System.Type.GetType("System.String");
        productNumber.ColumnName = "ProductNumber";
        newProducts.Columns.Add(productNumber);

        // Create an array for DataColumn objects.
        DataColumn[] keys = new DataColumn[1];
        keys[0] = productID;
        newProducts.PrimaryKey = keys;

        // Add some new rows to the collection. 
        DataRow row = newProducts.NewRow();
        row["Name"] = "CC-101-WH";
        row["ProductNumber"] = "Cyclocomputer - White";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-BK";
        row["ProductNumber"] = "Cyclocomputer - Black";

        newProducts.Rows.Add(row);
        row = newProducts.NewRow();
        row["Name"] = "CC-101-ST";
        row["ProductNumber"] = "Cyclocomputer - Stainless";
        newProducts.Rows.Add(row);
        newProducts.AcceptChanges();

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

Uwagi

Do tabeli docelowej są kopiowane tylko wiersze w DataTable stanach wskazanych w argumencie rowState i nie zostały usunięte.

Uwaga

Jeśli Deleted zostanie określony, wszystkie Unchangedwiersze , Addedi Modified zostaną również skopiowane na serwer. Nie zostanie zgłoszony żaden wyjątek.

Podczas gdy operacja kopiowania zbiorczego jest w toku, skojarzone miejsce docelowe SqlConnection jest zajęte jego obsługą i nie można wykonać żadnych innych operacji na połączeniu.

Kolekcja ColumnMappings mapuje z DataTable kolumn na docelową tabelę bazy danych.

Dotyczy