asp.net C # медленное время загрузки при использовании sqldatasource - PullRequest
0 голосов
/ 04 ноября 2011

Мне нужно представить отчет, который имеет три фильтра, что-то вроде

select * from foo where condition 1 and condition 2 and condition 3

Так что я использую источник данных объекта и привязал три параметра к трем различным раскрывающимся спискам, и он прекрасно работает, однако яМеня спросили, что первым вариантом в раскрывающемся списке будет «Все», что означает отсутствие фильтра.Так как я знаю, как сделать это только с источником sqldata, я переключил элемент управления и использовал следующий код

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
            ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
            SelectCommand="SELECT * FROM [Tickets_data]  ORDER BY [Open_Time]"
            FilterExpression="[Lote] like '{0}%'">
           <FilterParameters>
          <asp:ControlParameter ControlID="DropLote" Name="Lote" PropertyName="SelectedValue" Type="String"/>
            </FilterParameters>
        </asp:SqlDataSource>

Это работает, но время загрузки очень медленное, как 9 или 10 секунд, и каждое обновление в выпадающемтакже очень медленно.

Есть предложения?

1 Ответ

0 голосов
/ 08 ноября 2011

Похоже, у вас проблемы с линией:

[Lote] like '{0}%'

, когда параметр пуст - SqlServer сравнивает каждую простую запись с "%".В этом случае вы можете попробовать взломать оператор sql:

'{0}' = '' or [Lote] like '{0}%' 

, что заставит SQL-сервер оценивать только первую часть и пропустить вторую (например, {0}% '), когда {0} пуст.


Но в будущем я бы посоветовал не прикасаться к операторам sql непосредственно из пользовательского интерфейса, что в какой-то момент может сделать ваше приложение очень жестким.Таким образом, вы перемещаете все в область кода (и, что еще лучше, в область кода) на уровень доступа к данным.

...