2009-09-18 117 views
0

我有一个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。

的错误读取 附近有语法错误“和”

+0

“我得到一个错误”你得到了什么错误? – Welbog 2009-09-18 16:14:31

+0

错误的语法靠近'和' – Eric 2009-09-18 16:16:47

+0

什么是最初的'SelectCommand'的值? – Welbog 2009-09-18 16:17:51

回答

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

这是说它无法找到我的列字段 – Eric 2009-09-18 16:25:47

+0

@Eric - 这是假定字段是数据库*表*中字段的名称。您需要将名称更改为有问题字段的名称 – 2009-09-18 16:27:51

+0

Russ谢谢。我把它当作v.field。我将它改为Field。它就像你说的那样工作。 +1也。谢谢 – Eric 2009-09-18 16:29:24

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

,这是一个有效的查询。

I don't want to use dynamic sql.

使用它。

你最好重写查询,因为这:

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

,并绑定NULL如果文本字段为空。

+0

+1最有可能 – 2009-09-18 16:20:52

0

可能是缺少where子句或SelectCommand引用存储过程。

2

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

+0

你说得对。这是一个订单。但我改变了它,它说它找不到标量变量@param。 – Eric 2009-09-18 16:26:51