c# - SQL LIKE % NOT SEARCHING

标签 c# asp.net sql sql-server sql-like

我想使用 SQL LIKE 函数执行简单搜索。不幸的是,由于某种原因,它似乎没有用。下面是我的代码。

private void gvbind()
{
    connection.Open();
    string sql = "";

    if (txtSearch.Text.Trim() == "")
    {
        sql = "SELECT a.cname,[bid],b.[bname],b.[baddress],b.[bcity],b.[bstate],b.[bpostcode],b.[bphone],b.[bfax],b.[bemail] FROM [CLIENT] a INNER JOIN [BRANCH] b ON a.clientID=b.clientID ORDER BY a.[clientID]";
    }
    else
    {
        sql = "SELECT a.cname,[bid],b.[bname],b.[baddress],b.[bcity],b.[bstate],b.[bpostcode],b.[bphone],b.[bfax],b.[bemail] FROM [CLIENT] a INNER JOIN [BRANCH] b ON a.clientID=b.clientID WHERE b.[bname] LIKE '%@search%' ORDER BY a.[clientID]";
    }

    SqlCommand cmd = new SqlCommand(sql,connection);
    cmd.Parameters.AddWithValue("@search", txtSearch.Text.Trim());
    cmd.CommandType = CommandType.Text;
    SqlDataAdapter adp = new SqlDataAdapter();
    adp.SelectCommand = cmd;
    DataSet ds = new DataSet();
    adp.Fill(ds);

    connection.Close();

    if (ds.Tables[0].Rows.Count > 0)
    {
        gvBranch.Enabled = true;
        gvBranch.DataSource = ds;
        gvBranch.DataBind();
    }
    else
    {
        ds.Tables[0].Rows.Add(ds.Tables[0].NewRow());
        ds.Tables[0].Rows.Add(ds.Tables[0].NewRow());

        gvBranch.DataSource = ds;
        gvBranch.DataBind();

        int columncount = gvBranch.Rows[0].Cells.Count;
        gvBranch.Rows[0].Cells.Clear();
        gvBranch.Rows[0].Cells.Add(new TableCell());
        gvBranch.Rows[0].Cells[0].ColumnSpan = columncount;
        gvBranch.Rows[0].Cells[0].Text = "No Records Found";
    }
    ds.Dispose();
}

上述方法在Page_Load()方法中调用

if((!Page.IsPostBack))
{
    gvBind();
}

它在按钮搜索点击时调用。但是,每当我执行搜索时,它都会返回 No record found。

最佳答案

使用

LIKE '%' + @search + '%'

代替

LIKE '%@search%'

完整查询;

...
else
{
    sql = "SELECT a.cname,[bid],b.[bname],b.[baddress],b.[bcity],b.[bstate],b.[bpostcode],b.[bphone],b.[bfax],b.[bemail] FROM [CLIENT] a INNER JOIN [BRANCH] b ON a.clientID=b.clientID WHERE b.[bname] LIKE '%' + @search + '%' ORDER BY a.[clientID]";
}

实际上,您不需要在查询中的每一列都使用方括号 ([])。如果您的标识符或对象名称是 reserved keyword,请使用它们.

Thanks. It works , but any explanation for that?

主要问题在这里,您的查询参数在引号内。在引号中,SQL Server 会将其识别为 string literal并且从不将其视为参数。

关于c# - SQL LIKE % NOT SEARCHING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18630575/

相关文章:

mysql - 按多个字段排序?

c# - 使用NEST在ElasticSearch的IEnumerable属性上配置分析器的问题

c# - 关于 C# 和 SQL 的问题

c# - 加密 App.Config 部分并部署到多台机器

c# - 为 Web 服务的响应设置时间限制

javascript - 在javascript中调用c#函数

c# - 为什么方法调用会将非 volatile 变量的值刷新到主线程?

asp.net - 如何将这两个模型连接到 View 模型中

mysql查询-统计用户之间的共同词

sql - 通过隐藏列进行分组 - SQL