Le timeout d'attente a expiré avec SqlBulkCopy

J'utilise SqlBulkCopy pour restaurer des tables à partir de sauvegardes xml. L'une des sauvegardes de table est ~ 200 Mo de large et a beaucoup d'loggings.

J'ai une erreur:

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

Vous avez probablement besoin d'augmenter le timeout d'expiration. Essayez d'augmenter la valeur de sqlBulkCopy.BulkCopyTimeout par défaut de 30 secondes.

Il existe deux façons de corriger cette erreur:

  • Augmentez Timeout par défaut il est 30 secondes et 0 signifie infini.

      sqlBulkCopy.BulkCopyTimeout = {time in seconds} 
  • Diminuer BatchSize par défaut, il essaie d'insert toutes les lignes dans un lot

      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

Modifiez la propriété CommandTimeout de votre object SqlCommand.

L'atsortingbut Connect Timeout d'une string de connection détermine la durée d'exécution d'un object SqlConnection avant qu'il arrête de tenter de se connecter à un server.

Modifiez également la propriété SqlBulkCopy.BulkCopyTimeout .