Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用文本框中的filterexpressions运行SQL查询_C#_Asp.net_Sql - Fatal编程技术网

C# 使用文本框中的filterexpressions运行SQL查询

C# 使用文本框中的filterexpressions运行SQL查询,c#,asp.net,sql,C#,Asp.net,Sql,我目前正在ASP.NET gridview中运行一个查询,该查询使用文本框中的过滤器。我当前的代码如下所示: <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ERPW2MIGConnectionString %>" SelectCommand="SELECT TOP 1000000 * FROM DWH.AIXW2S_

我目前正在ASP.NET gridview中运行一个查询,该查询使用文本框中的过滤器。我当前的代码如下所示:

  <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的确切生效方式(即,查询是先运行,然后过滤,还是从一开始就使用过滤器运行?)。另外,有人能提出任何优化查询的方法吗


谢谢。

不要使用
过滤器参数
使用
选择参数
。下面是一个例子

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>
SelectCommand=“从DWH.AIXW2S\u T6946\u TRANS\u IMS中选择TOP 1000000*
其中C6946_TRANS_NUM=@TRANS_NUM和….”
...

这不是对您的确切问题的回答,但这里有一个提示-在服务器端使用代码隐藏或类中的代码等进行所有数据库查询。不要使用这些愚蠢的ASP.NET过滤器,它们可以在您的ASPX页面上使用。它们导致了糟糕的、耦合的设计。在过去,我不得不使用使用它们的代码,老实说,它们真的很痛苦。你会发现没有他们会容易得多。实际上我以前从来没有做过这样的事情,我不是一个it人员。我不认为我能在原始代码中解决这个问题。啊,这太可惜了,我明白这不是一件小事。好吧,我承认我不知道你的问题的答案,但我只是想我会把这个提示作为将来的参考:)