ExecuteDataSet超时发生在非常快速的存储过程上

时间:2013-10-29 12:42:27

标签: c# ado.net dataset

我正在尝试调试在我们的一个遗留系统中出现的问题。

这是有问题的代码

DataSet content = new DataSet();

Database db = DatabaseFactory.CreateDatabase();
DbCommand cmdSearchQuestionLibrary = db.GetStoredProcCommand("CUP_Reports_GetTrainerPerformanceReport");
db.AddInParameter(cmdSearchQuestionLibrary, "@PartnerID", DbType.Int64, partnerId);
db.AddInParameter(cmdSearchQuestionLibrary, "@StartDate", DbType.DateTime, dtStartDate);
db.AddInParameter(cmdSearchQuestionLibrary, "@EndDate", DbType.DateTime, dtEndDate);
db.AddInParameter(cmdSearchQuestionLibrary, "@TrainerId", DbType.Int32, trainerId);
db.AddInParameter(cmdSearchQuestionLibrary, "@AssessmentType", DbType.Int32, assessmentType);

content = db.ExecuteDataSet(cmdSearchQuestionLibrary);

超时发生在db.ExecuteDataSet上。我在SQL Server Profiler中对此进行了跟踪,并对同一个数据库运行相同的查询,并且返回数据的时间不到一秒。

如果我延长超时时间,我可以看到它花了一分多钟才能返回相同的数据,这是不可接受的。

这里有什么东西让我失踪吗?我想知道db.GetStoredProcCommand是否正在打开一个需要关闭的连接,它只是在等待该连接关闭。

1 个答案:

答案 0 :(得分:1)

在尝试了几件事之后,事实证明解决方案是将WITH Recompile添加到存储过程中。似乎数据库正在执行一个糟糕的执行计划。