6

我正在使用 VSTS 2008 + C# + .Net 3.5 + ADO.Net 开发一个控制台应用程序来进行批量插入复制。

我想同时使用批量插入批处理和批量插入超时属性。对于 BulkCopyTimeout 属性,我很困惑,想知道它是适用于整个批量还是仅适用于每批批量?

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

提前谢谢,乔治

4

4 回答 4

9

在网络上搜索和阅读一些博客帖子和论坛帖子似乎表明它SqlBulkCopyTimeout实际上并不适用于整个操作,而是适用于操作中的每个批次。

MSDN 文档对此并不完全清楚,但大多数帖子似乎表明超时适用于批处理。在大多数情况下,减少批处理大小和/或增加 SqlBulkCopyTimeout 似乎是解决超时问题的方法。

请参阅此论坛帖子作为示例

马克

于 2009-09-27T10:29:05.927 回答
5

BulkCopyTimeout:默认为 30 秒

sqlBulkCopy.BulkCopyTimeout = {time in seconds for one batch}

BatchSize:默认整个数据源是一批

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

有关更多详细信息,请参阅此链接:SqlBulkCopy 超时

我们得到这个异常“超时已过期”。如果应用程序无法在 30 秒内插入数据源。

于 2012-11-21T14:45:07.677 回答
2

它适用于一个批次的整个操作。您必须确保也设置了连接超时。我之前遇到过超时,将其设置在批量复制中,并发现连接超时也很重要。

看起来它的整个操作的概念很有趣。如果它在任何时候最终等待超过超时,它将失败。换句话说,如果一个批次的读取时间超过超时时间,它将失败,但如果所有读取的总和大于超时,你就可以了。如果批处理的写入时间过长,它也会失败。

但它似乎是一批批的,而不是全部。

于 2009-09-27T10:32:53.580 回答
0

为批量复制找到理想的超时时间并不容易;如果选择较小的 Timeout,则不应选择较大的 batchSize,因为可能会发生超时错误。另一方面,如果您决定选择小批量,则服务器出现超时错误的可能性较小;但是,您并不安全。

我的建议是将超时设置为无限制,即 (sqlBulkCopy.BulkCopyTimeout = 0),并尝试为您的批量复制选择相当大的批量大小。至少,你不能有超时异常。

于 2014-03-04T15:19:39.447 回答