2010-01-19 93 views
1

在此測試應用程序中,我通過兩個ControlParameters進行過濾。正如你在第一個代碼塊中看到的那樣,這兩個參數的默認值都是%。這段代碼很好用。但是,在第二個代碼塊中,請注意消除了默認值。只要文本框的文本都是空白,第二個代碼塊就會工作。出於某種原因,當.NET評估過濾器表達式並在表達式中插入「」時,它似乎漏掉了,並且沒有我的結果被過濾。ASP.NET - SQLDataSource - FilterExpression - 空字符串問題

我可以通過爲每個ControlParameter設置defaultvalue =「」來驗證此行爲。

顯然我找到了一個解決方法,但我想知道爲什麼FilterExpression在提供空字符串時出現故障。

任何想法?

碼塊1:

<asp:SqlDataSource ID="Customer_Data" runat="server" 
     ConnectionString='<%$ ConnectionStrings:connectionString %>' 
     SelectCommand="SELECT Station, StoreFront, CustomerID as CustID FROM vStations" 
     ProviderName="System.Data.SqlClient" 
     FilterExpression="StoreFront LIKE '%{0}%' and CustID LIKE '{1}%'" 
     EnableCaching="True" 
     CacheDuration="60"> 

     <FilterParameters> 
      <asp:ControlParameter ControlID="TextBox1" PropertyName="Text" DefaultValue="%" /> 
      <asp:ControlParameter ControlID="TextBox2" PropertyName="Text" DefaultValue="%" />    
     </FilterParameters> 
    </asp:SqlDataSource> 

碼塊2:

<asp:SqlDataSource ID="Customer_Data" runat="server" 
     ConnectionString='<%$ ConnectionStrings:connectionString %>' 
     SelectCommand="SELECT Station, StoreFront, CustomerID as CustID FROM vStations" 
     ProviderName="System.Data.SqlClient" 
     FilterExpression="StoreFront LIKE '%{0}%' and CustID LIKE '{1}%'" 
     EnableCaching="True" 
     CacheDuration="60"> 

     <FilterParameters> 
      <asp:ControlParameter ControlID="TextBox1" PropertyName="Text" /> 
      <asp:ControlParameter ControlID="TextBox2" PropertyName="Text" /> 
     </FilterParameters> 
    </asp:SqlDataSource> 

回答

3

嘗試兩個<asp:ControlParameter>「S的ConvertEmptyStringToNull屬性設置爲false。他們默認爲true,我猜測這些空值正在扔東西。

+0

瑞恩,那答案是正確的!我遇到了同樣的問題,並在提供LIKE子句的參數上設置ConvertEmptyStringToNull =「false」來解決問題。 – 2011-03-02 20:14:21