0

現在、テキスト ボックスのフィルターを使用する ASP.NET グリッドビューでクエリを実行しています。私の現在のコードは次のようになります。

  <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 が有効になる正確な方法がわかりません (つまり、クエリを実行してからフィルター処理するのか、それとも最初からフィルターを使用して実行するのか)。また、誰かがクエリを最適化する方法を提案できますか?

ありがとう。

4

1 に答える 1

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>
于 2012-12-17T16:45:44.590 に答える