Member 11920344 Ответов: 1

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


Error Message :An error occurred while executing the command definition. See the inner exception for details.Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.


Запрос:
var checkit1 = (from pm in db.productmasters.AsNoTracking()
                                       join pimg in db.ProductImages.AsNoTracking()
                                       on pm.PID equals pimg.PID
                                       join sb in db.SubCategoryMasters.AsNoTracking()
                                        on pm.SUBID equals sb.SUBID
                                       where (
                                        pm.CID == i &&
                                             pm.Isdeleted == "NO" &&
                                             pimg.IsDeleted == "NO" &&
                                             pimg.FIMG == "YES" &&
                                             (
                                             pm.Descr.Contains(spara) || pm.Descr.StartsWith(spara) || pm.Descr.EndsWith(spara) || pm.Brand.Contains(spara) || pm.Brand.StartsWith(spara) || pm.Brand.EndsWith(spara) || pm.Class.Contains(spara) || sb.SubCategoryName.StartsWith(spara) || sb.SubCategoryName.EndsWith(spara) || sb.SubCategoryName.Contains(spara) || pm.productname.Contains(spara) || pm.productname.StartsWith(spara) || pm.productname.EndsWith(spara) ))
                                       orderby pm.PID descending
                                       select new CDBookModel
                                       {
                                           FIMG = pimg.FIMG,
                                           BRAND = pm.Brand,
                                           CID = (int)pm.CID,
                                           CLASS = pm.Class,
                                           DESCR = pm.Descr,
                                           ID = (int)pimg.ID,
                                           NAME = pimg.Name,
                                           PID = (int)pm.PID,
                                           PRICE = pm.Price,
                                           PRODUCTNAME = pm.productname
                                       })
                               .Distinct().ToList();
                       ViewBag.GetSearchData = checkit1;


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

Error Message :An error occurred while executing the command definition. See the inner exception for details

Richard Deeming

pm.Descr.Contains(spara) || pm.Descr.StartsWith(spara) || pm.Descr.EndsWith(spara)

Начните с упрощения этой части вашего запроса. Если колонка начинается с или заканчивается на определенное значение, то оно также содержит вот это ценность!

Все, что вам нужно, это:
pm.Descr.Contains(spara) || pm.Brand.Contains(spara) || pm.Class.Contains(spara) || sb.SubCategoryName.Contains(spara) || pm.productname.Contains(spara)


Я бы также задался вопросом, почему вы храните логические столбцы как строки "Да" / "нет" - они должны быть bool в вашем коде, и bit в вашей базе данных.

1 Ответов

Рейтинг:
2

OriginalGriff

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

Вам нужно попробовать запустить запрос непосредственно в SSMS и посмотреть, сможете ли вы оптимизировать его там или увеличить время ожидания соединения как часть вашей строки подключения. Имейте в виду, что значение по умолчанию составляет 30 секунд IIRC, поэтому, если вы превысите это значение, у вас могут возникнуть проблемы с дизайном вашего приложения или данных.

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