2012-12-14 10 views
0

我目前在使用文本框中的過濾器的ASP.NET網格視圖中運行查詢。我當前的代碼如下所示:從文本框中使用filterexpressions運行SQL查詢

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ERPW2MIGConnectionString %>" 
    SelectCommand="SELECT TOP 1000000 * FROM DWH.AIXW2S_T6946_TRANS_IMS" 
     FilterExpression= "C6946_TRANS_NUM LIKE '{0}' AND (C6946_PART_KEY LIKE '{1}' OR ALIGNED_PART_NUMBER LIKE '{1}' OR C1001_ENG_PART_NUMBER LIKE '{1}') AND C6946_TRANS_DATE >= #{2}# AND C6946_TRANS_DATE <= #{3}#"> 

<FilterParameters> 
      <asp:ControlParameter ControlID="TextBox2" Name="TRANS_NUM" PropertyName="text" Type="String" DefaultValue="" ConvertEmptyStringToNull="false"/> 
      <asp:ControlParameter ControlID="TextBox3" Name="PART_KEY" PropertyName="text" Type="string" DefaultValue="" ConvertEmptyStringToNull="false"/> 
      <asp:ControlParameter ControlID="TextBox4" Name="TRANS_DATE" PropertyName="text" Type="DateTime" DefaultValue="" ConvertEmptyStringToNull="false"/> 
      <asp:ControlParameter ControlID="TextBox5" Name="TRANS_DATE2" PropertyName="text" Type="DateTime" DefaultValue="" ConvertEmptyStringToNull="false"/> 
     </FilterParameters> 
</asp:SqlDataSource> 

我想什麼幫助是這樣的:有沒有辦法在SELECT命令直接作爲WHERE語句運行我的過濾器?我的查詢需要永遠運行,我不知道filterexpressions生效的確切方式(即查詢運行,然後過濾,還是從一開始就運行過濾器?)。另外,有人可以建議任何方式來優化查詢?

謝謝。

+0

不是你的確切問題的答案,但這裏有一個提示 - 做所有的數據庫查詢服務器端,使用代碼隱藏或類中的代碼等。不要使用這些愚蠢的ASP.NET過濾器可以在ASPX頁面上使用。他們導致了一個糟糕的,耦合的設計。我必須在過去使用它們的代碼上工作,而且他們真的很痛苦。沒有它們你會發現它更容易。 –

+0

我以前從來沒有做過這樣的事情,我不是一個IT人。我不認爲我能夠弄清楚如何在原始代碼中執行此操作。 – mc91

+0

啊,這是一個恥辱,我知道這並不是一件微不足道的事情。好吧,我承認我不知道你的問題的答案,但我只是想我會拋出小費以備將來參考:) –

回答

0

而不是FilterParameters使用SelectParameters。下面是一個例子

SelectCommand="SELECT TOP 1000000 * FROM DWH.AIXW2S_T6946_TRANS_IMS 
       WHERE C6946_TRANS_NUM = @TRANS_NUM AND ...." 
<selectparameters> 
    <asp:ControlParameter ControlID="TextBox2" 
     Name="TRANS_NUM" PropertyName="text" Type="String" DefaultValue="" 
     ConvertEmptyStringToNull="false"/> 
    ... 
</selectparameters>