Источник данных .nettiers не применяет фильтр к запросу - PullRequest
0 голосов
/ 10 октября 2018

У меня есть таблица с записями 13K и немного устаревшая машина sql.

На проблемной странице у меня есть источник данных netTiers, который отправляется по таймауту.Моя проблема в том, что на page_load я установил фильтр: vwImmobileCommessaAttivoDataSource.Filter = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";, который изменяет номер результата с 13K на 10. Но я вижу, что запрос на генерацию:

                BEGIN

                SELECT * FROM [dbo].[vwImmobileCommessaAttivo] 
                ORDER BY [CommessaId]

                -- get total count
                SELECT @@ROWCOUNT AS TotalRowCount;

                END

без фильтра и идет по таймауту.

Есть способ ускорить запрос?включая мой фильтр?

1 Ответ

0 голосов
/ 10 октября 2018

Я лично использую сетки DevExpress и привязываюсь непосредственно к ним, используя что-то вроде:

grid.DataSource = new vwImmobileCommessaAttivoService().Find(string.format("ImmobileId='{0}'", Request.QueryString["ImmobileId"]));
grid.DataBind();

Если ваш фильтр только уронит вас с 13k до 10k, а вы используете тайм-аут на 13k записей, тогда яЯ думаю, что вам нужно изучить какую-либо форму подкачки, чтобы получить меньше записей.Если вы включите функции SQL2005, то там будет встроено несколько страниц, но я никогда не пробовал лично, поэтому не знаю, насколько хорошо это работает.Пейджинг Nettiers по умолчанию по-прежнему получает все записи из sql и выполняет пейджинг внутри.

С точки зрения того, что ваш существующий код действительно выполняет то, что вы ожидаете..Filter работает, только если для EnablePaging и EnableSorting установлено значение false.Вы пытались вместо этого:

vwImmobileCommessaAttivoDataSource.SelectMethod = vwImmobileCommessaAttivoSelectMethod.Find;
vwImmobileCommessaAttivoDataSource.WhereClause = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";
...