超时已过期SqlBulkCopy

Has*_*anG 27 .net sql sql-server asp.net sqlbulkcopy

我正在使用SqlBulkCopy从xml备份中恢复表.其中一个表备份大约200MB,并且有很多记录.

我有错误:

Timeout expired.
The timeout period elapsed prior to completion of the operation or the server
is not responding.
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 38

您可能需要增加超时.尝试增加sqlBulkCopy.BulkCopyTimeout默认值30秒.

  • 从0开始的TimeOut意味着无限. (10认同)
  • 谢谢你的解决方案.我还发现并测试了减少sqlBulkCopy.BatchSize. (4认同)

Abd*_*oor 37

有两种方法可以解决此错误:

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

  • 另请参阅:"SqlBulkCopy的建议批处理大小是多少?" http://stackoverflow.com/questions/779690/what-is-the-recommended-batch-size-for-sqlbulkcopy (4认同)
  • 最佳答案是设置默认批次以使用较小的数据块。为什么?一个很好的理由是,如果您有 4500 万行,并且将超时设置为无限,您将等待很长时间才能最终耗尽内存并使进程崩溃,这将导致插入零行并带来很多挫败感一个非常长的测试/开发周期。我使用了一小批 100 行,根本没有调整超时,并遇到了三个不同的(不相关的)错误。我能够快速失败,进行纠正,每次失败后我的表中都有数据可供测试。 (3认同)

sv8*_*rik 5

更改SqlCommand对象的CommandTimeout属性。

连接字符串的“连接超时”属性确定SqlConnection对象在停止尝试连接服务器之前要运行多长时间。

还要更改SqlBulkCopy.BulkCopyTimeout属性。