Condividi tramite


SqlBulkCopy.DestinationTableName Proprietà

Definizione

Nome della tabella di destinazione nel server.

public:
 property System::String ^ DestinationTableName { System::String ^ get(); void set(System::String ^ value); };
public string DestinationTableName { get; set; }
member this.DestinationTableName : string with get, set
Public Property DestinationTableName As String

Valore della proprietà

Valore di stringa della proprietà DestinationTableName o null se non è stato fornito alcun valore.

Esempio

L'applicazione console seguente illustra come eseguire il caricamento bulk dei dati usando una connessione già aperta. La tabella di destinazione è una tabella nel database AdventureWorks .

In questo esempio la connessione viene usata per prima cosa per leggere i dati da una tabella SQL Server a un'istanza SqlDataReader di . Non è necessario che i dati di origine si trovino in SQL Server. È possibile utilizzare qualsiasi origine dati che possa essere letta in un oggetto IDataReader o caricata in un oggetto DataTable.

Importante

Questo esempio non verrà eseguito a meno che non siano state create le tabelle di lavoro, come descritto in Installazione dell'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 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();

            // Open the destination connection. In the real world you would 
            // not use SqlBulkCopy to move data from one table to the other 
            // in the same database. This is for demonstration purposes only.
            using (SqlConnection destinationConnection =
                       new SqlConnection(connectionString))
            {
                destinationConnection.Open();

                // Set up the bulk copy object. 
                // Note that the column positions in the source
                // data reader match the column positions in 
                // the destination table so there is no need to
                // map columns.
                using (SqlBulkCopy bulkCopy =
                           new SqlBulkCopy(destinationConnection))
                {
                    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;";
    }
}

Commenti

Se DestinationTableName non è stato impostato quando WriteToServer viene chiamato , viene generata un'eccezione ArgumentNullException . Se DestinationTableName viene modificato durante l'esecuzione di un'operazione WriteToServer , la modifica non influisce sull'operazione corrente. Il nuovo DestinationTableName valore viene usato alla successiva chiamata di un WriteToServer metodo.

DestinationTableName è un nome in tre parti (<database>.<owningschema>.<name>). Se si desidera, è possibile qualificare il nome della tabella con i relativi database e schema. Tuttavia, se il nome della tabella usa un carattere di sottolineatura ("_") o qualsiasi altro carattere speciale, è necessario utilizzare parentesi quadre circostanti come in ([<database>.<owningschema>.<name_01>]).

È possibile copiare in blocco i dati in una tabella temporanea usando un valore come tempdb..#table o tempdb.<owner>.#table per la DestinationTableName proprietà .

Si applica a