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 (IDataReader)

 

Data di pubblicazione: ottobre 2016

Copia tutte le righe nell'oggetto IDataReader 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(
	IDataReader reader
)

Parametri

reader
Type: System.Data.IDataReader

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

L'operazione di copia inizia in corrispondenza la successiva riga disponibile nel lettore. La maggior parte dei casi, il lettore è appena stato restituito da ExecuteReader o una simile chiamata, pertanto la successiva riga disponibile è la prima riga. Per elaborare più risultati, chiamare NextResult sul lettore dati e chiamare WriteToServer nuovamente.

Si noti che l'utilizzo WriteToServer viene modificato lo stato del lettore. Il metodo chiama il metodo Read fino a quando non viene restituito false, l'operazione viene annullata o si verifica un errore. Ciò significa che il lettore di dati sarà in uno stato diverso, probabilmente alla fine del set di risultati, quando il WriteToServer operazione è stata completata.

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

Il ColumnMappings raccolta esegue il mapping dei dati di lettore colonne alla tabella di database di destinazione.

Nell'applicazione console riportata di seguito viene illustrato come caricamento bulk dei dati da un SqlDataReader. La tabella di destinazione è una tabella di AdventureWorks database.

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

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