2011-11-04 17 views
0

我需要提出有三個過濾器類似asp.net C#加載速度慢的時候,SqlDataSource的

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秒,並在下拉列表中的每個刷新也極其緩慢。

有什麼建議嗎?

+4

你有沒有試過分析你的SQL,看看它爲什麼很慢?使用select語句檢索多少數據? –

+1

它在哪裏慢?查詢需要很長時間才能運行?使用sql server查詢分析器(如果您使用sql server)找出。 –

+1

另外請記住,如果您將大量輸出呈現爲表格,則瀏覽器將等待整個表格在渲染前下載。如果您使用更簡單的標記,您可能會發現該頁面開始渲染更早。 –

回答

0

看起來你已經有了與線的煩惱:

[Lote] like '{0}%' 

當參數爲空 - SqlServer的比較「%」每一個簡單的記錄。在這種情況下,你可以嘗試黑客SQL語句:

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

這將使SQL服務器只計算第一部分,跳過第二個(如「{0}%」)時,{0}爲空。


但是對於未來我建議不要直接觸摸UI中的sql語句,這可能會使您的應用程序在某些時候非常僵化。因此,您將所有內容都移到代碼隱藏(甚至更好地隱藏代碼隱藏到數據訪問層)。