Добавить к команде выбора - PullRequest
       7

Добавить к команде выбора

0 голосов
/ 18 сентября 2009

У меня есть Gridview, который я хочу отфильтровать. Мой gridview находится на панели обновлений, а моя кнопка фильтра - нет. При нажатии кнопки у меня есть следующее

protected void bttnfilter_Click(object sender, ImageClickEventArgs e)
{
    if (TextBox1.Text != "")
    {
        SqlDataSource1.SelectCommand += " and field like '%' + @param + '%'";
        SqlConnection conn = new SqlConnection(SqlDataSource1.ConnectionString );
        SqlCommand cmd = new SqlCommand(SqlDataSource1.SelectCommand, conn);
        cmd.Parameters.Add(new SqlParameter("@param", TextBox1.Text));
    }

}

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

Ошибка чтения Неверный синтаксис рядом с 'и'

Ответы [ 4 ]

3 голосов
/ 18 сентября 2009

Скорее всего, вы добавляете запрос без предложения WHERE:

SELECT  *
FROM    mytable
        AND field LIKE '%test%'

выдаст вам эту ошибку.

Сделайте ваш запрос заглушкой следующим образом:

SELECT  *
FROM    mytable
WHERE   1 = 1

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

В вашем случае это даст:

SELECT  *
FROM    mytable
WHERE   1 = 1
        AND field LIKE '%test%'

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

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

Вы используете .

Вам лучше переписать ваш запрос так:

SELECT  *
FROM    mytable
WHERE   @param IS NULL
UNION ALL
SELECT  *
FROM    mytable
WHERE   field LIKE '%' + @param + '%'

и связывайте NULL, если ваше текстовое поле пусто.

2 голосов
/ 18 сентября 2009

Вы уверены, что последнее предложение в вашем операторе SQL является предложением WHERE? Если нет предложения WHERE или есть другое предложение после WHERE (GROUP BY, ORDER BY), вы получите эту ошибку.

1 голос
/ 18 сентября 2009

Что-то вроде этого должно сделать

private void bttnfilter_Click(object sender, ImageClickEventArgs e)
{
    string filterText = TextBox1.Text.Trim().ToLower();

    if (!String.IsNullOrEmpty(filterText))
        SqlDataSource1.FilterExpression = 
            string.Format("field LIKE '%{0}%'",filterText);         
}
0 голосов
/ 18 сентября 2009

Возможно, либо отсутствие предложения where, либо SelectCommand ссылается на хранимую процедуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...