Member 12183079 Ответов: 2

Тайм-аут истек. Время ожидания истекло до завершения операции или сервер не отвечает.


public DataSet GetFinalResultFormula(int? shiftID, int courseID, int specializationID, int instituteID, int sessionID, int USERID, int SubjectID,int pageno)
        {

            try
            {

                _sql = "CalculateGracemarksCat";
                _parms = new SqlParameter[8];
                _parms[0] = new SqlParameter("@ShiftID", SqlDbType.Int);
                _parms[0].Value = shiftID == 0 ? null : (object)shiftID;
                _parms[1] = new SqlParameter("@CourseID", SqlDbType.Int);
                _parms[1].Value = courseID;
                _parms[2] = new SqlParameter("@SpecializationID", SqlDbType.Int);
                _parms[2].Value = specializationID;
                _parms[3] = new SqlParameter("@InstituteID", SqlDbType.Int);
                _parms[3].Value = instituteID;
                _parms[4] = new SqlParameter("@SessionID", SqlDbType.Int);
                _parms[4].Value = sessionID;
                _parms[5] = new SqlParameter("@USERID", SqlDbType.Int);
                _parms[5].Value = USERID;
                _parms[6] = new SqlParameter("@EmpSubjectID", SqlDbType.Int);
                _parms[6].Value = SubjectID;
                _parms[7] = new SqlParameter("@pagenumber", SqlDbType.Int);
                _parms[7].Value = pageno == 0 ? null : (object)pageno;

                ManuplateTable(_sql, _parms);





                _sql = "GetFinalResultFormula";
                _parms = new SqlParameter[8];
                _parms[0] = new SqlParameter("@ShiftID", SqlDbType.Int);
                _parms[0].Value = shiftID == 0 ? null : (object)shiftID;
                _parms[1] = new SqlParameter("@CourseID", SqlDbType.Int);
                _parms[1].Value = courseID;
                _parms[2] = new SqlParameter("@SpecializationID", SqlDbType.Int);
                _parms[2].Value = specializationID;
                _parms[3] = new SqlParameter("@InstituteID", SqlDbType.Int);
                _parms[3].Value = instituteID;
                _parms[4] = new SqlParameter("@SessionID", SqlDbType.Int);
                _parms[4].Value = sessionID;
                _parms[5] = new SqlParameter("@USERID", SqlDbType.Int);
                _parms[5].Value = USERID;
                _parms[6] = new SqlParameter("@EmpSubjectID", SqlDbType.Int);
                _parms[6].Value = SubjectID;
                _parms[7] = new SqlParameter("@pagenumber", SqlDbType.Int);
                _parms[7].Value = pageno == 0 ? null : (object)pageno;

                //_parms[7] = new SqlParameter("@FilterResultStatus", SqlDbType.Char);
                //_parms[7].Value = FilterResultStatus == "(All)" ? null : (object)FilterResultStatus;
                //_parms[8] = new SqlParameter("@FiltersubjectId", SqlDbType.Int);
                //_parms[8].Value = Filtersubjectid == 0 ? null : (object)Filtersubjectid;

                _dataSet = RunProcedure(_sql, _parms, true);
                _dataSet.Tables[0].TableName = "GetFinalResultFormula";
                _dataSet.Tables[1].TableName = "GetFinalResult";
                return _dataSet;
            }
            catch
            {
                throw;
            }
        }


 <add name="Delhi" connectionstring="Data source=xxxxxxx;User Id=xx;Password=xxx; Initial Catalog=RU;Connection Timeout=900;" providername="System.Data.SqlClient">



<httpruntime executiontimeout="500" maxrequestlength="100000">


Что я уже пробовал:

выше я публикую свой код, поэтому, пожалуйста, помогите мне, как исправить эти проблемы

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
выше я публикую свой код, поэтому, пожалуйста, помогите мне, как исправить эти проблемы

На первый взгляд, в этом коде нет никакого исправления, поскольку в сообщении об ошибке говорится, что проблема заключается в SQL server. Вы забыли показать хранимую процедуру.


Member 12183079

когда я выполняю процедуру stroed, то это занимает 1:15 мин, и они получают желобчатый результат

Member 12183079

две процедуры вызова в одно и то же время я делюсь с вами процедурой





-- exec [CalculateGracemarksCat] 3,1,12,1,14,1,0



Создайте процедуру [dbo].[CalculateGracemarksCat]



@Идентификатор_курса целое,



@ShiftID INTEGER=null,



@SpecializationID целое число,



@InstituteID INTEGER,



@SessionID INTEGER=NULL,



@USERID ЦЕЛОЕ ЧИСЛО,



@EmpSubjectID целое число ,

@pagenumber int=null







АС



УСТАНОВИТЕ NOCOUNT ON



начать







Объявить целое число @EmployeeID



Объявить таблицу @EmployeeAssignSubject ( целое число subID )











Объявить Таблицу @CatMarksTbl



(



StudentID int,



SubjectID int,







Подкатегория varchar(10),



ExaminationID инт,



ExaminationTypeID инт,



Максимальные отметки десятичные(18,2),



Минмарки десятичные(18,2),



MarksObtained decimal(18,2),



Сорт нварчар(10),



StdStatus nvarchar(20),



[GraceMarks] десятичная дробь(18,2),



IsMain бит ,



Бит IsCat,







ShiftID INT ,



Идентификатор_курса инт ,



SpecializationID ИНТ ,



Код сеанса ИНТ











)







Объявить Таблицу @Mainmarksstbl



(



StudentID int,



SubjectID int,







Подкатегория varchar(10),



ExaminationID инт,



ExaminationTypeID инт,



Максимальные отметки десятичные(18,2),



Минмарки десятичные(18,2),



MarksObtained decimal(18,2),



Сорт нварчар(10),



StdStatus nvarchar(20),



[GraceMarks] десятичная дробь(18,2),



IsMain бит ,



Бит IsCat,



ShiftID INT ,



Идентификатор_курса инт ,



SpecializationID ИНТ ,



Код сеанса ИНТ











)



Если OBJECT_ID('dbo.CatGraceMarksParticularTBL', 'U') не равно нулю



Отбросьте таблицу dbo.CatGraceMarksParticularTBL;



-- Падение таблицы CatGraceMarksParticularTBL







создать таблицу CatGraceMarksParticularTBL



(



StudentID int,



SubjectID int,



ParticularsTypeID инт----1--Основной,2-Кошка,3-Грейс Маркс



MarksDetails Nvarchar(макс.)







)



















Если @CourseID = 0 -- при входе сотрудника в систему нет необходимости выбирать программу ,



НАЧАТЬ







Выберите @EmployeeID = EmployeeID из dbo.biz_EmployeeProfile, где UserID=@USERID







Если @EmpSubjectID = 0



НАЧАТЬ



Вставить в @EmployeeAssignSubject (subID)



Выберите subjectID из biz_AssignSubjectEmployee, где EmployeeID=@EmployeeID и (@ShiftID равно null или ShiftID=@ShiftID) и



isnull(IsSubjectSelect,0)=1



И isnull(IsActive,0)=1 и InstituteID= @InstituteID



КОНЕЦ



ЕЩЕ



УМОЛЯТЬ

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Рейтинг:
0

MadMyche

Исключение в значительной степени говорит о том, что ваша хранимая процедура занимает слишком много времени для запуска. Это означает, что вам нужно переключить свое внимание с вызывающего кода, ASP.NET; к вызываемому коду: хранимая процедура.

Если база данных работает на SQL Server, то лучшим способом отладки будет использование SSMS (Sql Server Mgmt Studio) и просмотр причин, по которым процедура занимает так много времени. Наиболее распространенной проблемой будет отсутствие или неправильные индексы для таблиц в базе данных.


Я заметил, что ваша строка подключения содержит ссылку для увеличения Connectiontimeout, т. до 15 минут ... немного чрезмерно и не имеет никакого отношения к проблеме, с которой вы столкнулись; это связано только с тем, сколько времени требуется вашему приложению, чтобы связаться с БД. Редко возникает законная необходимость установить это значение так как по умолчанию 15 секунд достаточно долго для того чтобы клиент установил соединение с сервером

Существует также CommandTimeout атрибут, который может быть помещен на фактический объект SqlCommand, чтобы обеспечить более длительный запуск запроса до истечения его времени ожидания. Значение по умолчанию-30 секунд. Изменения этого значения не влияют на контекстные соединения/методы asynch. Во всей реальности это повязка для плохих SQL-запросов или проектов.

Рекомендации:
Тайм – аут соединения и тайм-аут команды в SQL Server-Don Castelino[^]
Свойство sqlcommand.Свойство CommandTimeout (System.Data.SqlClient) | Microsoft Docs[^]