Bor*_*yll 4 .net sql db2 entity-framework
我有一个与 DB2 数据库(实体框架,不确定该细节是否重要)交互的 .Net 应用程序。 有时我会在查询时收到以下错误:
ERROR [57014] [IBM][DB2] SQL0952N Processing was cancelled due to an interrupt.
Run Code Online (Sandbox Code Playgroud)
这是整个错误文本(内部异常)。它没有 SQLSTATE。
同样,这种情况不会每次都会发生(即使对于相同的查询)。例如,我可以一遍又一遍地运行相同的查询,但只会看到错误发生五分之一。查询的持续时间始终相当一致。
我搜索了一些文档并发现了以下内容: http://www-01.ibm.com/support/docview.wss ?uid=swg21450816
只是为了尝试进行故障排除,我按照上述文档中的建议并QueryTimeout=0在我的连接字符串中进行了设置。这没有帮助,我仍然以大约相同的速度遇到错误。我什至尝试过QueryTimeout=500......同样的结果。有趣的是,在测试中,当这个错误发生时,它大约发生在 30 秒标记处(文档提到的是默认超时)。我是否仍在使用默认超时设置?
连接字符串如下:
<add name="myConn" connectionString="(entity framework stuff);provider=IBM.Data.DB2;provider connection string="Database=myDB;User ID=myId;Server=myServer;QueryTimeout=0"" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)
编辑
我只是尝试设置QueryTimeout=1认为这肯定会导致每个查询超时。这似乎没有任何影响。在 WELL 完成一秒多后,五分之四的查询仍然完成。我在这里缺少什么?
我能够通过CommandTimeout在我的 EF 数据上下文上设置来解决这个问题,如下所示:
using (dataContext = new myDB2Entities())
{
dataContext.CommandTimeout = 60;
// DB CODE
}
Run Code Online (Sandbox Code Playgroud)
我现在明白,QueryTimeout我一直尝试使用的设置只是一个时间间隔,数据库在每个时间间隔都会检查应用程序是否仍在等待响应。我没有解决应用程序在默认 30 秒后发出中断的事实。