Sdílet prostřednictvím


SqlBulkCopy.WriteToServer Metoda

Definice

Přetížení

WriteToServer(DbDataReader)

Zkopíruje všechny řádky ze zadaného DbDataReader pole do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

WriteToServer(DataRow[])

Zkopíruje všechny řádky ze zadaného DataRow pole do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

WriteToServer(DataTable)

Zkopíruje všechny řádky v zadaném DataTable objektu do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

WriteToServer(IDataReader)

Zkopíruje všechny řádky v zadaném IDataReader objektu do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

WriteToServer(DataTable, DataRowState)

Zkopíruje pouze řádky, které odpovídají zadanému stavu řádku zadaného DataTable do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

WriteToServer(DbDataReader)

Zkopíruje všechny řádky ze zadaného DbDataReader pole do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

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 , jehož řádky budou zkopírovány do cílové tabulky.

Výjimky

Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.

Platí pro

WriteToServer(DataRow[])

Zkopíruje všechny řádky ze zadaného DataRow pole do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

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[]

Pole DataRow objektů, které budou zkopírovány do cílové tabulky.

Výjimky

Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.

Příklady

Následující konzolová aplikace ukazuje, jak hromadně DataRow načíst data z pole. Cílová tabulka je tabulka v databázi AdventureWorks .

V tomto příkladu se vytvoří DataTable za běhu. Z tabulky je vybrán jeden řádek, který DataTable se zkopíruje do cílové tabulky.

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.

Poznámky

Zatímco probíhá operace hromadného kopírování, přidružený cíl SqlConnection je zaneprázdněn jeho obsluhou a s připojením nelze provádět žádné další operace.

Kolekce se ColumnMappings mapuje ze DataRow sloupců na cílovou tabulku databáze.

Platí pro

WriteToServer(DataTable)

Zkopíruje všechny řádky v zadaném DataTable objektu do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

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 , jehož řádky budou zkopírovány do cílové tabulky.

Výjimky

Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.

Příklady

Následující konzolová aplikace ukazuje, jak hromadně načíst data z objektu DataTable. Cílová tabulka je tabulka v databázi AdventureWorks .

V tomto příkladu se vytvoří DataTable za běhu a je zdrojem SqlBulkCopy operace.

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

Poznámky

Všechny řádky v objektu DataTable se zkopírují do cílové tabulky s výjimkou těch, které byly odstraněny.

Zatímco probíhá operace hromadného kopírování, přidružený cíl SqlConnection je zaneprázdněn jeho obsluhou a s připojením nelze provádět žádné další operace.

Kolekce se ColumnMappings mapuje ze DataTable sloupců na cílovou tabulku databáze.

Viz také

Platí pro

WriteToServer(IDataReader)

Zkopíruje všechny řádky v zadaném IDataReader objektu do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

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 , jehož řádky budou zkopírovány do cílové tabulky.

Výjimky

Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.

Příklady

Následující konzolová aplikace ukazuje, jak hromadně načíst data z objektu SqlDataReader. Cílová tabulka je tabulka v databázi AdventureWorks .

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

Operace kopírování začíná na dalším dostupném řádku ve čtečce. Ve většině případů se čtečka vrátila ExecuteReader() pomocí nebo podobného volání, takže další dostupný řádek je první řádek. Pokud chcete zpracovat více výsledků, zavolejte NextResult() čtečku dat a zavolejte WriteToServer znovu.

Všimněte si, že použití WriteToServer upraví stav čtenáře. Metoda bude volat Read() , dokud nevrátí hodnotu false, operace je přerušena nebo dojde k chybě. To znamená, že po dokončení operace bude čtečka dat v jiném stavu, pravděpodobně na konci sady WriteToServer výsledků dotazu.

Zatímco probíhá operace hromadného kopírování, přidružený cíl SqlConnection je zaneprázdněn jeho obsluhou a s připojením nelze provádět žádné další operace.

Kolekce se ColumnMappings mapuje ze sloupců čtečky dat na cílovou tabulku databáze.

Platí pro

WriteToServer(DataTable, DataRowState)

Zkopíruje pouze řádky, které odpovídají zadanému stavu řádku zadaného DataTable do cílové tabulky určené DestinationTableName vlastností objektu SqlBulkCopy .

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 , jehož řádky budou zkopírovány do cílové tabulky.

rowState
DataRowState

Hodnota z výčtu DataRowState . Do cíle se zkopírují pouze řádky odpovídající stavu řádku.

Výjimky

Parametr nezadal SqlBulkCopyColumnOrderHint platný název cílového sloupce.

Příklady

Následující konzolová aplikace ukazuje, jak hromadně načíst pouze řádky v objektu DataTable , které odpovídají zadanému stavu. V tomto případě se přidají jenom nezměněné řádky. Cílová tabulka je tabulka v databázi AdventureWorks .

V tomto příkladu se vytvoří DataTable za běhu a přidají se do něj tři řádky. Před spuštěním WriteToServer metody se upraví jeden z řádků. Metoda WriteToServer je volána s argumentem DataRowState.UnchangedrowState , takže pouze dva nezměněné řádky jsou hromadně zkopírovány do cíle.

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

Poznámky

Do cílové tabulky se zkopírují pouze řádky v DataTable objektu , které jsou ve stavech uvedených v argumentu rowState a nebyly odstraněny.

Poznámka

Pokud Deleted je zadána hodnota , Addedzkopírují se na server také všechny Unchangedřádky , a Modified . Nevyvolá se žádná výjimka.

Zatímco probíhá operace hromadného kopírování, přidružený cíl SqlConnection je zaneprázdněn jeho obsluhou a s připojením nelze provádět žádné další operace.

Kolekce se ColumnMappings mapuje ze DataTable sloupců na cílovou tabulku databáze.

Platí pro