2011-11-04 2 views
0

sqldatasource 사용할 때 asp.net C# 느린 로딩 시간

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

같은 세 가지 필터가있는 보고서를 제시 할 필요가 있습니다. 개체 데이터 소스를 사용하고 있으며 세 가지 매개 변수를 세 가지 다른 드롭 다운에 바인딩했습니다. 그러나 훌륭하게 작동합니다. 드롭 다운의 첫 번째 옵션은 "All"(필터 없음)을 의미합니다. 내가 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> 
<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 초와 같이 매우 느리고 드롭 다운의 각 새로 고침은 다음과 같다. 또한 극도로 천천히.

어떤 제안이 있습니까?

+4

왜 SQL을 프로파일 링하여 속도가 느린 지 보셨습니까? select 문을 사용하여 검색하는 데이터의 양은 어느 정도입니까? –

+1

어디에서 천천히합니까? 쿼리를 실행하는 데 시간이 오래 걸리나요? 찾으려면 SQL Server 쿼리 프로파일 러 (SQL 서버를 사용하는 경우)를 사용하십시오. –

+1

많은 출력을 테이블로 렌더링하는 경우 브라우저는 렌더링 전에 전체 테이블을 다운로드 할 때까지 기다릴 것임을 명심하십시오. 보다 간단한 마크 업을 사용하면 페이지가 먼저 렌더링되기 시작할 수 있습니다. –

답변

0

보인다. 단지 첫 번째 부분을 평가하고 {0} 비어있을 때 ('{0} %'와 같은) 두 번째를 건너 SQL 서버를 만들 것

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

:이 경우 당신은에 SQL 문을 해킹을 시도 할 수 있습니다.


하지만 미래를 위해 나는 어떤 시점에서 응용 프로그램이 매우 엄격한 만들 수있는 직접 UI에서없는 감동 SQL 문을 건의 할 것입니다. 따라서 코드 비하인드로 모든 것을 이동합니다 (코드 비하인드의 뒤에는 데이터 액세스 레이어로 더 잘 전환 할 수 있습니다).