代码之家  ›  专栏  ›  技术社区  ›  Eric

附加到Select命令

  •  0
  • Eric  · 技术社区  · 15 年前

    我有一个要筛选的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。

    “and”附近的语法不正确

    4 回复  |  直到 15 年前
        1
  •  3
  •   Quassnoi    15 年前

    最有可能的情况是,您在添加查询时没有 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
  •  2
  •   Jeff Hornby    15 年前

    您确定SQL语句中的最后一个子句是WHERE子句吗?如果没有WHERE子句或WHERE(GROUP BY、ORDER BY)后面有另一个子句,则会出现此错误。

        3
  •  1
  •   Russ Cam    15 年前

    像这样的东西应该可以

    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);         
    }
    
        4
  •  0
  •   MartW    15 年前

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