Udostępnij za pośrednictwem


SqlBulkCopy.BulkCopyTimeout Właściwość

Definicja

Liczba sekund ukończenia operacji przed upływem limitu czasu.

public:
 property int BulkCopyTimeout { int get(); void set(int value); };
public int BulkCopyTimeout { get; set; }
member this.BulkCopyTimeout : int with get, set
Public Property BulkCopyTimeout As Integer

Wartość właściwości

Wartość całkowita BulkCopyTimeout właściwości . Wartość domyślna to 30 sekund. Wartość 0 nie wskazuje żadnego limitu; kopia zbiorcza będzie czekać na czas nieokreślony.

Przykłady

Poniższa aplikacja konsolowa pokazuje, jak zmodyfikować limit czasu do 60 sekund podczas ładowania zbiorczego danych. W tym przykładzie dane źródłowe są najpierw odczytywane z tabeli SQL Server do SqlDataReader wystąpienia. Dane źródłowe nie muszą znajdować się na SQL Server. Można użyć dowolnego źródła danych, które można odczytać do obiektu lub załadować do IDataReader obiektu DataTable.

Ważne

Ten przykład nie zostanie uruchomiony, chyba że utworzono tabele robocze zgodnie z opisem w temacie Konfiguracja przykładu kopiowania zbiorczego. Ten kod jest dostarczany w celu zademonstrowania składni tylko przy użyciu narzędzia SqlBulkCopy . Jeśli tabele źródłowe i docelowe znajdują się w tym samym wystąpieniu SQL Server, łatwiej i szybciej jest użyć instrukcji Języka Transact-SQL INSERT … SELECT do skopiowania danych.

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

            // Create the SqlBulkCopy 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";

                // Set the timeout.
                bulkCopy.BulkCopyTimeout = 60;

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

Uwagi

Jeśli operacja przekracza limit czasu, transakcja nie zostanie zatwierdzona i wszystkie skopiowane wiersze zostaną usunięte z tabeli docelowej.

Dotyczy