2013-03-04 6 views
1

Я привязываю gridview к sqldatasource.my проблема в том, что когда я использую sqldatasource без предложения where в select statement, он отлично работает, но когда я использую его с предложением where, его работа отлично работает в Query Builder test и возвращать записи, но не работать во время выполнения. Я использовал Sql Profiler и вижу, что запрос не запускается, когда я использую where clause.I слышал, что .NET предотвращает запуск запроса с предложением where из-за SQL-инъекции, но я не знаю, как исправить мой запрос. Мой SqlDataSource:sqlDataSource select не работает с where where

<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> 

ответ

1

Наиболее вероятным виновником является то, что один из ваших параметров оценки к нулю, а SqlDataSource является отмена выбора запроса.

Чтобы исправить это, необходимо установить SqlDataSource.CancelSelectOnNullParameter свойство ложным (оно истинно по умолчанию) в вашей декларации 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)" 
    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>