c# - 从数据库中提取记录而不会超时

时间:2010-05-04 03:44:50

标签: c# sql database-design timeout

我有一个带有多个连接的SQL查询&它从数据库中提取数据进行处理。这应该是按计划运行的。所以第1天,它可能会拉500,第2天说400。

现在,如果由于某种原因停止服务&未处理的数据,然后在第3天可能有多达1000条记录要处理。这导致sql查询超时。

如何最好地处理这种情况而不会导致超时&逐步减少工作量?

TIA

3 个答案:

答案 0 :(得分:3)

查看您的查询,可能是它未经过优化,在适当的位置放置索引。没有看到你的表结构,查询,不能再帮助了。

答案 1 :(得分:3)

创建批处理。只允许说n个记录要处理。可以说n = 100 ...... 然后使您的选择查询仅选择前100,直到没有更多的记录要处理。

YourCommandObject.CommandTimeout = 0;

这将允许您的命令永远运行。

请注意,这可能会导致数据库锁定和其他问题。如果您使用上述批处理过程并确定运行时间最长的查询,则可以将连接超时设置为必要的值。

答案 2 :(得分:1)

一个实际的解决方案是增加命令超时:

var com = yourConnection.CreateCommand();
com.CommandTimeout = 0;
...

CommandTimeout属性是等待命令执行的时间(以秒为单位)。默认值为30秒。值为0表示没有限制,应该在CommandTimeout中避免,因为尝试执行命令将无限期地等待。