Condividi tramite


SqlBulkCopyColumnOrderHint Classe

Definizione

Definisce l'ordine di ordinamento per una colonna nella tabella di destinazione di un'istanza SqlBulkCopy , in base all'indice cluster nella tabella.

public ref class SqlBulkCopyColumnOrderHint sealed
public sealed class SqlBulkCopyColumnOrderHint
type SqlBulkCopyColumnOrderHint = class
Public NotInheritable Class SqlBulkCopyColumnOrderHint
Ereditarietà
SqlBulkCopyColumnOrderHint

Esempio

L'esempio seguente esegue la copia bulk di dati da una tabella di origine nel database di esempio AdventureWorks a una tabella di destinazione nello stesso database. Un oggetto SqlBulkCopyColumnOrderHint viene usato per definire l'ordine di ordinamento per la colonna di destinazione ProductNumber.

Importante

Questo esempio non verrà eseguito a meno che non siano state create le tabelle di lavoro, come descritto in Installazione di esempio di copia bulk. Il codice viene fornito solo per illustrare la sintassi relativa all'uso di SqlBulkCopy. Se le tabelle di origine e di destinazione si trovano nella stessa istanza di SQL Server, è più semplice e veloce usare un'istruzione Transact-SQL INSERT … SELECT per copiare i dati.

using System;
using System.Data;
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 (SqlBulkCopy bulkCopy =
                       new SqlBulkCopy(connectionString))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                // Setup an order hint for the ProductNumber column.
                SqlBulkCopyColumnOrderHint hintNumber =
                    new SqlBulkCopyColumnOrderHint("ProductNumber", SortOrder.Ascending);
                bulkCopy.ColumnOrderHints.Add(hintNumber);

                // Write from the source to the destination.
                try
                {
                    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;";
    }
}

Commenti

Gli hint per l'ordine di colonna definiscono l'ordine di ordinamento della colonna nella tabella di destinazione.

Le prestazioni di SqlBulkCopy sono migliorate se i dati importati vengono ordinati in base all'indice cluster nella tabella, se presente. Se i dati vengono ordinati in un ordine diverso dall'ordine di una chiave di indice cluster o se nella tabella non è presente alcun indice cluster, l'hint dell'ordine viene ignorato.

Gli hint per l'ordine possono essere specificati per qualsiasi numero di colonne nella tabella di destinazione. Per impostazione predefinita, l'operazione di inserimento bulk presuppone che i dati siano non ordinati se non vengono forniti hint.

I nomi di colonna specificati devono corrispondere a nomi di colonna validi nella tabella di destinazione. L'ordine in cui è possibile specificare hint è arbitrario. Non è possibile specificare più di una volta un singolo nome di colonna.

Se la raccolta non è vuota, è possibile specificare solo gli hint dell'ordine ColumnMappings per le colonne di destinazione valide mappate.

Se viene specificato un SortOrder oggetto Non specificato, verrà generato un ArgumentException oggetto.

Costruttori

SqlBulkCopyColumnOrderHint(String, SortOrder)

Crea un nuovo hint per l'ordine di colonna per la colonna di destinazione specificata.

Proprietà

Column

Nome della colonna di destinazione nella tabella di destinazione per cui viene fornito l'hint.

SortOrder

Ordinamento della colonna di destinazione nella tabella di destinazione.

Si applica a