附加到选择命令

时间:2009-09-18 16:11:02

标签: c# asp.net sql vb.net visual-studio

我有一个想要过滤的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));
    }

}

所以我添加到select命令但是我收到了一个错误。我该怎么办呢?我不想使用动态sql。

错误读取 '和'

附近的语法不正确

4 个答案:

答案 0 :(得分:3)

很可能你是在没有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

答案 1 :(得分:2)

您确定SQL语句中的最后一个子句是WHERE子句吗?如果没有WHERE子句或者在WHERE(GROUP BY,ORDER BY)之后还有另一个子句,那么你将得到这个错误。

答案 2 :(得分:1)

这样的事情应该这样做

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);         
}

答案 3 :(得分:0)

可能缺少where子句,或者SelectCommand正在引用存储过程。