Asp.net sqlDataSource select not work with where子句

Asp.net sqlDataSource select not work with where子句,asp.net,ado.net,sqldatasource,Asp.net,Ado.net,Sqldatasource,我将gridview绑定到sqldatasource。我的问题是,当我在select语句中使用sqldatasource而不使用where子句时,它工作正常,但当我在查询生成器测试和返回记录中使用它时,它工作正常,但在运行时不工作。 我使用了Sql探查器,当我使用where子句时看到查询未运行。我听说.NET由于Sql注入而阻止使用where子句运行查询,但我不知道如何更正我的查询。 我的sqldatasource: <asp:SqlDataSource ID="SqlDataSource

我将gridview绑定到sqldatasource。我的问题是,当我在select语句中使用sqldatasource而不使用where子句时,它工作正常,但当我在查询生成器测试和返回记录中使用它时,它工作正常,但在运行时不工作。 我使用了Sql探查器,当我使用where子句时看到查询未运行。我听说.NET由于Sql注入而阻止使用where子句运行查询,但我不知道如何更正我的查询。 我的sqldatasource:

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
        ConnectionString="<%$ ConnectionStrings:chargeDBConnectionString %>"  SelectCommand="SELECT CARDNUMBER, VISITDATE, ACCNUMBER, ACTIONCODE FROM LOGTABLE WHERE (CARDNUMBER = @cardno OR @cardno IS NULL AND CARDNUMBER &lt;&gt; N'-' AND @ttype = 1 OR @ttype = 0) AND (VISITDATE &gt;= @fdate AND VISITDATE &lt;= @edate) AND (ACCNUMBER = @accno OR @accno IS NULL AND ACCNUMBER &lt;&gt; N'-' AND @ttype = 0 OR @ttype = 1) AND (ACTIONCODE = @actioncode OR @actioncode IS NULL)">
        <SelectParameters>
            <asp:FormParameter FormField="cardNo" Name="cardno" />
            <asp:ControlParameter ControlID="ddlType" Name="ttype" 
                PropertyName="SelectedValue" />
            <asp:FormParameter FormField="fromDate" Name="fdate" />
            <asp:FormParameter FormField="toDate" Name="edate" />
            <asp:FormParameter FormField="accNo" Name="accno" />
            <asp:ControlParameter ControlID="ddltransname" Name="actioncode" 
                PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>

最可能的罪魁祸首是您的一个参数计算结果为null,而
SqlDataSource
正在取消select查询

要更正此问题,需要在SqlDataSource声明中将属性设置为false(默认为true):

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:chargeDBConnectionString %>"  
    SelectCommand="SELECT CARDNUMBER, VISITDATE, ACCNUMBER, ACTIONCODE FROM LOGTABLE WHERE (CARDNUMBER = @cardno OR @cardno IS NULL AND CARDNUMBER &lt;&gt; N'-' AND @ttype = 1 OR @ttype = 0) AND (VISITDATE &gt;= @fdate AND VISITDATE &lt;= @edate) AND (ACCNUMBER = @accno OR @accno IS NULL AND ACCNUMBER &lt;&gt; N'-' AND @ttype = 0 OR @ttype = 1) AND (ACTIONCODE = @actioncode OR @actioncode IS NULL)"
    CancelSelectOnNullParameter="False">
    <SelectParameters>
        <asp:FormParameter FormField="cardNo" Name="cardno" />
        <asp:ControlParameter ControlID="ddlType" Name="ttype" 
            PropertyName="SelectedValue" />
        <asp:FormParameter FormField="fromDate" Name="fdate" />
        <asp:FormParameter FormField="toDate" Name="edate" />
        <asp:FormParameter FormField="accNo" Name="accno" />
        <asp:ControlParameter ControlID="ddltransname" Name="actioncode" 
            PropertyName="SelectedValue" />
    </SelectParameters>
</asp:SqlDataSource>