Я пытаюсь выполнить хранимую процедуру (запрос) из ASP Web API. Я разработал его (таймаут команды составляет 300 секунд).SqlConnection Ошибка таймаута через API-интерфейс ASP.NET
В начале вызов хранимой процедуры из Web API выполняется очень быстро, но через несколько дней при вызове одного и того же WEB-интерфейса он дает мне ошибку тайм-аута (см. Ниже).
Между тем, если я попытаюсь выполнить одну и ту же хранимую процедуру с тем же параметром, даже в то же время, непосредственно из SQL Server Management Studio, она выполняется в течение нескольких секунд.
Код:
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, Действие 11 wrapCloseInAction)
завершение, Int32 тайм-аут, Задача & задачи, булева asyncWrite)
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, TaskCompletionSource
в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, метод String)
на System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String)
на System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String)
на System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (поведение CommandBehavior)
в System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader (поведение CommandBehavior)
в System.Data.Common.DbDataAdapter.FillInternal (DataSet dataset, DataTable [] datatables, Int32 startRecord, Int32 maxRecords, String srcTable , IDbCommand команды, поведение CommandBehavior)
в System.Data.Common.DbDataAdapter.Fill (DataSet DataSet, Int32, Int32 startRecord MaxRecords, струнного srcTable, команды IDbCommand, поведение CommandBehavior)
в System.Data.Common.DbDataAdapter.Fill (DataSet DataSet)
в HERS_SearchQuery.Data.DataAccess.SQLServer.HERSScheduleRepository.GetScheduledTitles (CriteriaFields _criteria) в C: \ Users \ Нах \ Documents \ Visual Studio 2010 \ Projects \ HERS_SchedulerSearch \ HERS_SearchQuery.Data \ DataAccess \ SQLServer
Вы пытались закрыть соединение после заполнения адаптера данных? – Tim
Как сказал Тим, кажется, что ваши соединения не закрываются; что количество подключений может связывать ваши вызовы SQL. Используйте con.Close() с окончательно в своих инструкциях Try Catch – sunnysidedown916
Пожалуйста, покажите, как выглядит _strDBConnection.Убедитесь, что «context connection = false» – MikeG