我正在尝试从ASP.WebAPI执行一个存储过程(查询)。我已经开发了它(命令超时为300秒)。
一开始,从Web调用存储过程非常快,但是在调用相同的WEB几天之后,它会给我超时错误(如下所示)。
同时,如果我尝试使用相同的参数执行相同的存储过程,甚至直接从执行相同的存储过程,它将在几秒钟内执行。
守则:
public List<ScheduledTitles> GetScheduledTitles(CriteriaFields _criteria)
{
try
{
System.Data.DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
using (SqlConnection con = new SqlConnection(_strDBConnection))
{
con.Open();
SqlCommand comm = new SqlCommand();
comm.Connection = con;
comm.CommandText = "spQuery_1";
comm.Parameters.Add(new SqlParameter() { ParameterName = "Product_Line_ID", SqlDbType = SqlDbType.Int, Value = _criteria.ProductLineID == null ? (object)System.DBNull.Value : _criteria.ProductLineID });
comm.CommandType = CommandType.StoredProcedure;
da.SelectCommand = comm;
comm.CommandTimeout = 300;
da.Fill(ds);
}
.
.
.
return scheduledTitlesS.ToList<ScheduledTitles>();
}
catch (Exception exc)
{
throw exc;
}
}错误信息:
在操作完成或服务器没有响应之前经过的超时时间。 在System.Data.SqlClient.SqlConnection.OnError(SqlException异常时,布尔breakConnection,Action
1 wrapCloseInAction)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()at System.Data.SqlClient.SqlDataReader.get_MetaData()at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource1完成,Int32超时,任务和任务,布尔asyncWrite) 在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean,String方法) 在System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior行为中,字符串方法) 在System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior行为中,字符串方法) (在System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior行为) (在System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior行为) 在System.Data.Common.DbDataAdapter.FillInternal(DataSet数据集上,DataTable[]数据集,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand命令,CommandBehavior行为) 在System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand命令,CommandBehavior行为) 在System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) 在C:\ HERS_SearchQuery.Data.DataAccess.SQLServer.HERSScheduleRepository.GetScheduledTitles(CriteriaFields \nah\_criteria\Visual 2010\Projects\HERS_SchedulerSearch\HERS_SearchQuery.Data\DataAccess\SQLServer中
发布于 2014-12-29 20:21:01
几年前我有一个类似的问题,我用这个选项解决了这个问题。
用重新编译
在闪存的过程中。发生的情况是,SQL SERVER缓存的执行计划并不是所有参数都是有效的。
当然,我不知道这是否能解决你的问题,但我认为值得一试。
https://stackoverflow.com/questions/27694716
复制相似问题