2010-12-26 6 views
23

Ich verwende SqlBulkCopy, um Tabellen aus XML-Sicherungen wiederherzustellen. Eine der Tabellensicherung ist ~ 200MB groß und hat viele Datensätze.Timeout abgelaufen mit SqlBulkCopy

Ich habe Fehler:

Timeout expired. 
The timeout period elapsed prior to completion of the operation or the server 
is not responding. 

Antwort

31

Sie müssen wahrscheinlich das Timeout erhöhen. Versuchen Sie, den Wert sqlBulkCopy.BulkCopyTimeout von der Standardeinstellung 30 Sekunden zu erhöhen.

+9

A TimeOut von 0 bedeutet unendlich. –

+4

Danke für die Lösung. Ich habe auch sqlBulkCopy.BatchSize gefunden und getestet. –

4

Ändern Sie die CommandTimeout-Eigenschaft Ihres SqlCommand-Objekts.

Das Attribut Verbindungstimeout einer Verbindungszeichenfolge legt fest, wie lange ein SqlConnection-Objekt ausgeführt wird, bevor es den Versuch einer Verbindung mit einem Server beendet.

Ändern Sie auch die SqlBulkCopy.BulkCopyTimeout-Eigenschaft.

27

Es gibt zwei Möglichkeiten, diesen Fehler zu beheben:

  • Zunahme Timeout standardmäßig ist es 30 Sekunden und 0 bedeutet unendlich.

    sqlBulkCopy.BulkCopyTimeout = {time in seconds} 
    
  • verkleinern Batchsize durch Standard versuchen, alle Zeilen in einem Batch einfügen

    sqlBulkCopy.BatchSize = {no of rows you want to insert at once} 
    

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.batchsize.aspx http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx

+2

Siehe auch: "Was ist die empfohlene Batchgröße für SqlBulkCopy?" http://stackoverflow.com/questions/779690/what-is-the-recom- fieded-batch-size-for-sqlbulkcopy –