【发布时间】:2011-05-01 07:39:49
【问题描述】:
从带有 EF 的 C#,我用 ExecuteStoreCommand 调用一个长存储过程
程序开始后 30 秒,我有一个超时异常。
如何配置超时?在服务器上还是在我的 C# 客户端中?
谢谢
【问题讨论】:
标签: c# sql sql-server stored-procedures timeout
从带有 EF 的 C#,我用 ExecuteStoreCommand 调用一个长存储过程
程序开始后 30 秒,我有一个超时异常。
如何配置超时?在服务器上还是在我的 C# 客户端中?
谢谢
【问题讨论】:
标签: c# sql sql-server stored-procedures timeout
使用索引解决了我的问题,我发现使用 ExecuteStoreCommand 执行存储过程的时间与在 SQL 中不同。
您可以使用 SQL Management Studio 来找到您需要的索引,选择存储过程的 sql 代码,右键单击并“显示估计的执行计划”获取建议的索引。这应该优化您的存储过程。
【讨论】:
using (var context = new MyDbEntities())
{
context.CommandTimeout = 600;
context.MyLongRunningStoredProc();
}
【讨论】:
using (var conn = new SqlConnection(ConnectionStrings.toMyDB))
{
conn.Open();
using (var cmd = new SqlCommand("myProc", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandTimeout = 30; // Increase this to allow the proc longer to run
cmd.Parameters.AddWithValue("@Param", myParam);
cmd.ExecuteNonQuery();
}
}
【讨论】:
除了修复存储过程中的 SQL 之外,您所做的任何事情都只是掩盖了真正的问题(SQL)。
您需要询问有关加快过程、发布表格的位置以及存储过程代码的问题,以便一劳永逸地修复它。
【讨论】:
您可以在底层连接上设置 CommandTimeout,但一个更好的主意是花时间和精力首先诊断超时发生的原因。
即使您通过增加 CommandTimeout 来“解决”问题,也可能会导致数据库中出现其他阻塞问题。寻找阻塞查询或糟糕的查询计划,或设计不良的表和索引。
【讨论】: