我有一个想要过滤的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。
错误读取 '和'
附近的语法不正确答案 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正在引用存储过程。