Partager via


SqlBulkCopy.WriteToServer Méthode

Définition

Surcharges

WriteToServer(DbDataReader)

Copie toutes les lignes du tableau DbDataReader fourni dans une table de destination spécifiée par la propriété DestinationTableName de l’objet SqlBulkCopy.

WriteToServer(DataRow[])

Copie toutes les lignes du tableau DataRow fourni dans une table de destination spécifiée par la propriété DestinationTableName de l’objet SqlBulkCopy.

WriteToServer(DataTable)

Copie toutes les lignes du DataTable fourni dans une table de destination spécifiée par la propriété DestinationTableName de l’objet SqlBulkCopy.

WriteToServer(IDataReader)

Copie toutes les lignes du IDataReader fourni dans une table de destination spécifiée par la propriété DestinationTableName de l’objet SqlBulkCopy.

WriteToServer(DataTable, DataRowState)

Copie uniquement les lignes qui correspondent à l’état de ligne fourni dans le DataTable sur une table de destination spécifiée par la propriété DestinationTableName de l’objet SqlBulkCopy.

WriteToServer(DbDataReader)

Copie toutes les lignes du tableau DbDataReader fourni dans une table de destination spécifiée par la propriété DestinationTableName de l’objet 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)

Paramètres

reader
DbDataReader

DbDataReader dont les lignes seront copiées dans la table de destination.

Exceptions

N’a SqlBulkCopyColumnOrderHint pas spécifié de nom de colonne de destination valide.

S’applique à

WriteToServer(DataRow[])

Copie toutes les lignes du tableau DataRow fourni dans une table de destination spécifiée par la propriété DestinationTableName de l’objet 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())

Paramètres

rows
DataRow[]

Tableau d'objets DataRow qui seront copiés dans la table de destination.

Exceptions

N’a SqlBulkCopyColumnOrderHint pas spécifié de nom de colonne de destination valide.

Exemples

L’application console suivante montre comment charger en bloc des données à partir d’un DataRow tableau. La table de destination est une table de la base de données AdventureWorks .

Dans cet exemple, un DataTable est créé au moment de l’exécution. Une seule ligne est sélectionnée dans le DataTable à copier dans la table de destination.

Important

Cet exemple ne s’exécutera que si vous avez créé les tables de travail comme décrit dans Configuration de l’exemple de copie en bloc. Ce code est fourni uniquement pour illustrer la syntaxe de l’utilisation de SqlBulkCopy. Si les tables source et de destination se trouvent dans la même instance SQL Server, il est plus facile et plus rapide d’utiliser une instruction Transact-SQL INSERT … SELECT pour copier les données.

Remarques

Pendant que l’opération de copie en bloc est en cours, la destination SqlConnection associée est occupée à la traiter et aucune autre opération ne peut être effectuée sur la connexion.

La ColumnMappings collection est mappée des DataRow colonnes à la table de base de données de destination.

S’applique à

WriteToServer(DataTable)

Copie toutes les lignes du DataTable fourni dans une table de destination spécifiée par la propriété DestinationTableName de l’objet 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)

Paramètres

table
DataTable

DataTable dont les lignes seront copiées dans la table de destination.

Exceptions

N’a SqlBulkCopyColumnOrderHint pas spécifié de nom de colonne de destination valide.

Exemples

L’application console suivante montre comment charger en bloc des données à partir d’un DataTable. La table de destination est une table de la base de données AdventureWorks .

Dans cet exemple, un DataTable est créé au moment de l’exécution et est la source de l’opération SqlBulkCopy .

Important

Cet exemple ne s’exécutera que si vous avez créé les tables de travail comme décrit dans Configuration de l’exemple de copie en bloc. Ce code est fourni uniquement pour illustrer la syntaxe de l’utilisation de SqlBulkCopy. Si les tables source et de destination se trouvent dans la même instance SQL Server, il est plus facile et plus rapide d’utiliser une instruction Transact-SQL INSERT … SELECT pour copier les données.

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

Remarques

Toutes les lignes du DataTable sont copiées dans la table de destination, à l’exception de celles qui ont été supprimées.

Pendant que l’opération de copie en bloc est en cours, la destination SqlConnection associée est occupée à la traiter et aucune autre opération ne peut être effectuée sur la connexion.

La ColumnMappings collection est mappée des DataTable colonnes à la table de base de données de destination.

Voir aussi

S’applique à

WriteToServer(IDataReader)

Copie toutes les lignes du IDataReader fourni dans une table de destination spécifiée par la propriété DestinationTableName de l’objet 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)

Paramètres

reader
IDataReader

IDataReader dont les lignes seront copiées dans la table de destination.

Exceptions

N’a SqlBulkCopyColumnOrderHint pas spécifié de nom de colonne de destination valide.

Exemples

L’application console suivante montre comment charger en bloc des données à partir d’un SqlDataReader. La table de destination est une table de la base de données AdventureWorks .

Important

Cet exemple ne s’exécutera que si vous avez créé les tables de travail comme décrit dans Configuration de l’exemple de copie en bloc. Ce code est fourni uniquement pour illustrer la syntaxe de l’utilisation de SqlBulkCopy. Si les tables source et de destination se trouvent dans la même instance SQL Server, il est plus facile et plus rapide d’utiliser une instruction Transact-SQL INSERT … SELECT pour copier les données.

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

Remarques

L’opération de copie commence à la ligne disponible suivante dans le lecteur. La plupart du temps, le lecteur a été simplement retourné par ExecuteReader() ou un appel similaire, de sorte que la ligne disponible suivante est la première ligne. Pour traiter plusieurs résultats, appelez NextResult() sur le lecteur de données, puis appelez WriteToServer à nouveau.

Notez que l’utilisation WriteToServer modifie l’état du lecteur. La méthode appelle Read() jusqu’à ce qu’elle retourne false, que l’opération soit abandonnée ou qu’une erreur se produise. Cela signifie que le lecteur de données sera dans un état différent, probablement à la fin du jeu de résultats, une fois l’opération WriteToServer terminée.

Pendant que l’opération de copie en bloc est en cours, la destination SqlConnection associée est occupée à la traiter et aucune autre opération ne peut être effectuée sur la connexion.

La ColumnMappings collection est mappée à partir des colonnes du lecteur de données à la table de base de données de destination.

S’applique à

WriteToServer(DataTable, DataRowState)

Copie uniquement les lignes qui correspondent à l’état de ligne fourni dans le DataTable sur une table de destination spécifiée par la propriété DestinationTableName de l’objet 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)

Paramètres

table
DataTable

DataTable dont les lignes seront copiées dans la table de destination.

rowState
DataRowState

Valeur d'énumération DataRowState. Seules les lignes qui correspondent à l'état de ligne sont copiées dans la destination.

Exceptions

N’a SqlBulkCopyColumnOrderHint pas spécifié de nom de colonne de destination valide.

Exemples

L’application Console suivante montre comment charger en bloc uniquement les lignes d’un DataTable qui correspondent à un état spécifié. Dans ce cas, seules les lignes inchangées sont ajoutées. La table de destination est une table de la base de données AdventureWorks .

Dans cet exemple, un DataTable est créé au moment de l’exécution et trois lignes y sont ajoutées. Avant l’exécution de la WriteToServer méthode, l’une des lignes est modifiée. La WriteToServer méthode étant appelée avec un DataRowState.UnchangedrowState argument, seules les deux lignes inchangées sont copiées en bloc vers la destination.

Important

Cet exemple ne s’exécutera que si vous avez créé les tables de travail comme décrit dans Configuration de l’exemple de copie en bloc. Ce code est fourni uniquement pour illustrer la syntaxe de l’utilisation de SqlBulkCopy. Si les tables source et de destination se trouvent dans la même instance SQL Server, il est plus facile et plus rapide d’utiliser une instruction Transact-SQL INSERT … SELECT pour copier les données.

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

Remarques

Seules les lignes du DataTable qui sont dans les états indiqués dans l’argument rowState et qui n’ont pas été supprimées sont copiées dans la table de destination.

Notes

Si Deleted est spécifié, toutes Unchangedles lignes , Addedet Modified sont également copiées sur le serveur. Aucune exception ne sera levée.

Pendant que l’opération de copie en bloc est en cours, la destination SqlConnection associée est occupée à la traiter et aucune autre opération ne peut être effectuée sur la connexion.

La ColumnMappings collection est mappée des DataTable colonnes à la table de base de données de destination.

S’applique à