我使用this solution在数据库中插入了大约300万条记录。最后,当应用程序已被插入记录了一段时间(我上次运行持续了大约4个小时),它给出了下面的SQLException超时:在LINQ to SQL中超时插入数百万条记录
“SqlExcepetion:超时过期的timeoutperiod过去完成之前,操作或服务器没有响应。“
处理此异常的最佳方法是什么?有没有办法来防止这种情况发生,或者我应该发现异常?
提前致谢!
我使用this solution在数据库中插入了大约300万条记录。最后,当应用程序已被插入记录了一段时间(我上次运行持续了大约4个小时),它给出了下面的SQLException超时:在LINQ to SQL中超时插入数百万条记录
“SqlExcepetion:超时过期的timeoutperiod过去完成之前,操作或服务器没有响应。“
处理此异常的最佳方法是什么?有没有办法来防止这种情况发生,或者我应该发现异常?
提前致谢!
如果你拥有的一切是一把锤子,所有问题看起来都像钉子。
说真的,即使试图使用Linq2SQL插入300万条记录也是一种破坏性的方法。 ORM是很多好东西,它们不是批量插入元素。
我建议:
大容量负载有很多性能优势。自然地,假设你在这里谈论ETL加载过程 - 但是除了数据仓库/报告/归档风格的加载操作之外,我没有看到任何300万的加载,它最初和最终定义都不是实时事务处理;)
使用正确的工具进行工作。
我认为你必须增加命令的CommandTimeout。
解决方案,可以发现here
参见http://stackoverflow.com/questions/949374/to-increase-the-timeout-period/949381#949381 – abatishchev 2010-05-03 11:21:52
生成一个SQL脚本(或字符串),并直接执行。
L2SQL不是用于这样的批量操作。
我相信这样的表达是“如果你唯一的工具是一把锤子......” – si618 2010-05-03 11:27:09
不管表达是,这是一个很好的解释!为这个游戏者+1,赢! – Bas 2010-05-03 11:31:00
除了TomTom的回答,看看SqlBulkCopy类:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx – 2010-05-03 11:40:20