2013-04-09 4 views
1

Я работаю над asp.net. У меня есть SqlDataSource с запросом HARDCODED на SelectCommand:ASP.NET SqlDataSource, как на SelectCommand

<asp:SqlDataSource ID="DataSource1" runat="server" CancelSelectOnNullParameter="False" 
    ConnectionString="<%$ ConnectionStrings:S.Properties.Settings.ConnectionString %>" 
    SelectCommand="SELECT * FROM [table] 
    WHERE ([col1] like Case @col1_param When null Then col1 Else @col1_param End) 
    and ([col2] like Case @col2_param When null Then col2 Else @col2_param End)" 
    SelectCommandType="Text"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="TextBox1" Name="col1_param" PropertyName="Text" 
      Type="String" /> 
     <asp:ControlParameter ControlID="TextBox2" Name="col2_param" PropertyName="Text" 
      Type="String" /> 
    </SelectParameters> 

То, что я хочу, что если вы вводите данные на одном текстовом поле только, данные будут отображаться в соответствии с этим значением текстового поля только на ИНЕКЕ. И если никакие значения не помещаются ни для одного из текстовых полей, запрос выполняется так, как будто его нет.

Прямо сейчас с этим кодом происходит то, что если вы помещаете в одно текстовое поле, данные не отображаются. То же самое, если все текстовые поля пусты.

Я не хочу использовать хранимую процедуру sql.

Как я могу это решить?

Спасибо ...

ответ

1

Предполагая, что она проходит нуль, когда есть текст не введен, в противном случае вам нужно будет проверить пустую строку

SelectCommand="SELECT * FROM [table] 
    WHERE ([col1] like '%@col1_param%' or @col1_param is null) 
    and ([col2] like '%@col2_param%' or @col2_param is null)" 
+0

спасибо !!!!!!!!!!! – trek

0

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

Вы можете использовать формат

WHERE @col1_param IS NULL OR [col1] LIKE '%@col1_param%' 

собственности обрабатывать случай, когда параметр не указан.

См. my question on the issue для получения полного ответа. Конечно, это было сделано как хранимая процедура, но концепция будет одинаковой для вашего SQLDataSource.

Смежные вопросы