LINQ to SQL存储过程。例外情况表明它超时但它没有超时

时间:2011-02-17 10:27:17

标签: asp.net linq-to-sql stored-procedures web

使用.NET Framework v3.5,SQL Server 2008的网站,用C#编写

我有一个存储过程,我已将其添加到我的DBML中,方法是将其从服务器资源管理器中拖出 在它的属性中,它返回自动生成的类型 该程序采用&lt;从SQL Mgmt Studio中为所有输入运行1秒。 但是,根据1个特定输入的代码(在Mgmt工作室中占用<1秒),它会挂起然后抛出:

  

System.Data.SqlClient.SqlException:超时已过期。

这个输入并不总是发生!从代码调用时,它也常常工作正常。它最后一次不起作用我删除并重新添加相同的存储过程到DBML。这“固定”了它,输入运行良好,与所有其他输入同时运行。然而,这不是一个充分的解决方案!它再次发生,我不能按要求继续删除和重新添加 我没有对在“修复”期间返回的数据进行任何更改,因此我无法想象问题可能是什么。任何有关这方面的帮助将非常感谢!

3 个答案:

答案 0 :(得分:1)

  

异常表示它会超时,但确实如此   没有超时

如果说出现了超时,那就超时了。唯一的问题是“为什么”?

针对您的数据库运行SQL Server Profiler跟踪,并查看实际进入服务器的查询。也可能发出另一个查询。可能有另一个交易干扰您的生产场景。

答案 1 :(得分:1)

事实证明这是参数嗅探 - 这在另一篇文章中有解释:Executing stored proc from DotNet takes very long but in SSMS it is immediate

答案 2 :(得分:0)

此外,请确保存储过程不会在事务内部停留,等待另一个进程完成。我刚刚在事务中多次调用Linq to Sql存储过程。它给了我一个超时过期错误,我刚刚意识到它正在等待之前的调用完成,从而超时。