Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo SqlBulkCopy.WriteToServer (DataTable, DataRowState)

 

Data di pubblicazione: ottobre 2016

Copia solo le righe corrispondenti allo stato di riga specificato nell'oggetto DataTable fornito in una tabella di destinazione specificata dalla proprietà DestinationTableName dell'oggetto SqlBulkCopy.

Spazio dei nomi:   System.Data.SqlClient
Assembly:  System.Data (in System.Data.dll)

public void WriteToServer(
	DataTable table,
	DataRowState rowState
)

Parametri

table
Type: System.Data.DataTable

Oggetto DataTable le cui righe verranno copiate nella tabella di destinazione.

rowState
Type: System.Data.DataRowState

Valore ricavato dall'enumerazione DataRowState. Solo le righe corrispondenti allo stato della riga vengono copiate nella destinazione.

Solo le righe il DataTable che sono nello stato indicato nel rowState argomento e non sono stati eliminati vengono copiate nella tabella di destinazione.

System_CAPS_noteNota

Se Deleted viene specificato, qualsiasi Unchanged, Added, e Modified righe verranno copiate anche il server. Verrà generata alcuna eccezione.

Durante la copia di massa, la destinazione associata SqlConnection è occupata e non altre operazioni eseguibili per la connessione.

il ColumnMappings esegue il mapping dalla raccolta di DataTable colonne alla tabella di database di destinazione.

La Console seguente viene illustrato come eseguire bulk caricare solo le righe in un DataTable che corrispondono a uno stato specificato. In questo caso, vengono aggiunti solo righe non modificate. La tabella di destinazione è una tabella di AdventureWorks database.

In questo esempio, un DataTable viene creato in fase di esecuzione e tre righe vengono aggiunte a esso. Prima di WriteToServer metodo viene eseguito, viene modificata una delle righe. Il WriteToServer metodo viene chiamato con un DataRowState.UnchangedrowState argomento, in modo che solo le due righe non modificate vengono copiate nella destinazione.

System_CAPS_importantImportante

Questo esempio non verrà eseguito a meno che le tabelle di lavoro non siano state create come descritto in Installazione dell'esempio relativo alla copia di massa. Il codice viene fornito solo per illustrare la sintassi relativa all'utilizzo di SqlBulkCopy. Se le tabelle di origine e destinazione sono nella stessa istanza di SQL Server, è più facile e rapido usare Transact-SQL INSERT … SELECT istruzione per copiare i dati.

using System.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;";
    }
}

.NET Framework
Disponibile da 2.0
Torna all'inizio
Mostra: