我正在使用 VSTS 2008 + C# + .Net 3.5 + ADO.Net 开发一个控制台应用程序来进行批量插入复制。
我想同时使用批量插入批处理和批量插入超时属性。对于 BulkCopyTimeout 属性,我很困惑,想知道它是适用于整个批量还是仅适用于每批批量?
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx
提前谢谢,乔治
我正在使用 VSTS 2008 + C# + .Net 3.5 + ADO.Net 开发一个控制台应用程序来进行批量插入复制。
我想同时使用批量插入批处理和批量插入超时属性。对于 BulkCopyTimeout 属性,我很困惑,想知道它是适用于整个批量还是仅适用于每批批量?
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout.aspx
提前谢谢,乔治
在网络上搜索和阅读一些博客帖子和论坛帖子似乎表明它SqlBulkCopyTimeout
实际上并不适用于整个操作,而是适用于操作中的每个批次。
MSDN 文档对此并不完全清楚,但大多数帖子似乎表明超时适用于批处理。在大多数情况下,减少批处理大小和/或增加 SqlBulkCopyTimeout 似乎是解决超时问题的方法。
请参阅此论坛帖子作为示例。
马克
BulkCopyTimeout:默认为 30 秒
sqlBulkCopy.BulkCopyTimeout = {time in seconds for one batch}
BatchSize:默认整个数据源是一批
sqlBulkCopy.BatchSize = {no of rows you want to insert at once}
有关更多详细信息,请参阅此链接:SqlBulkCopy 超时
我们得到这个异常“超时已过期”。如果应用程序无法在 30 秒内插入数据源。
它适用于一个批次的整个操作。您必须确保也设置了连接超时。我之前遇到过超时,将其设置在批量复制中,并发现连接超时也很重要。
看起来它的整个操作的概念很有趣。如果它在任何时候最终等待超过超时,它将失败。换句话说,如果一个批次的读取时间超过超时时间,它将失败,但如果所有读取的总和大于超时,你就可以了。如果批处理的写入时间过长,它也会失败。
但它似乎是一批批的,而不是全部。
为批量复制找到理想的超时时间并不容易;如果选择较小的 Timeout,则不应选择较大的 batchSize,因为可能会发生超时错误。另一方面,如果您决定选择小批量,则服务器出现超时错误的可能性较小;但是,您并不安全。
我的建议是将超时设置为无限制,即 (sqlBulkCopy.BulkCopyTimeout = 0),并尝试为您的批量复制选择相当大的批量大小。至少,你不能有超时异常。