ASP.NET SqlDataSource, как на SelectCommand

Я работаю на asp.net. У меня есть SqlDataSource с запросом, жестко заданным для команды selectcom:

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

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

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

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

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

Спасибо...

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам