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.