asp.net-在数据库中搜索包含撇号的数据

本文关键字:包含撇 数据 搜索 net- 数据库 asp | 更新日期: 2023-09-27 18:26:04

您好!我很难解决这个问题。我一直在寻找这个问题的答案,但似乎很难找到最合适的答案。

我使用此查询根据用户在txtSearchRP文本框中输入的内容来搜索租户的名称,它对没有撇号的数据非常有效,但当用户搜索包含"的名称时,它的功能不好。

示例:用户输入MAX’S以搜索MAX’S RESTAURANT

从租户WHERE(名称LIKE"%"+txtSearchRP.Text+"%")中选择*

提前感谢您的帮助!


编辑以获取更多信息:

实际上,我将查询传递给sqlDataSource,以便在用户单击按钮后自动绑定网格视图。

SqlDataSource3.SelectCommand=SELECT*来自租户WHERE(名称LIKE"%"+txtSearchRP.Text+"%")

asp.net-在数据库中搜索包含撇号的数据

试试这个

conn =  new 
    SqlConnection("ConnectionString");
conn.Open();
SqlCommand cmd = new SqlCommand(
    "SELECT * from tenant WHERE (name LIKE @tenant)", conn);
SqlParameter param  = new SqlParameter();
param.ParameterName = "@tenant";
param.Value         = "%" + txtSearchRP.Text + "%"; // you can use any wildcard operator 
cmd.Parameters.Add(param);
SqlDataReader reader = cmd.ExecuteReader();

除了已经给出的答案外,在某些应用程序中,您可能需要考虑在用户提供的输入字符串中转义通配符,如%。

例如,如果用户输入"25%",则匹配"%25%%"将返回包含"25"的值,而不是限制为包含"25%"的值。

您可以按如下方式转义通配符(对于SQL Server):

 string value = ... value entered by user;
 value = value.Replace("[", "[[]");
 value = value.Replace("_", "[_]");
 value = value.Replace("%", "[%]");

创建存储过程的更好方法

SP:

Create proc sp_Search( @txtSearch nvarchar(150)) 
as begin
  SELECT * from tenant WHERE name like @txtSearch+'%'
end

代码隐藏:

 string txtSearch = txtSearchRP.Text;
        SqlDataReader dr;
        using (SqlConnection conn = new SqlConnection(cn.ConnectionString))
        {
            using (SqlCommand cmdd = new SqlCommand())
            {
                cmdd.CommandType = CommandType.StoredProcedure;
                cmdd.CommandText = "sp_Search";
                cmdd.Parameters.AddWithValue("@txtSearch", txtSearch);
                cmdd.Connection = conn;
                conn.Open();
                dr = cmdd.ExecuteReader(CommandBehavior.CloseConnection);
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        var name = dr["name"].ToString();
                        var location = dr["location"].ToString();
                    }
                } dr.Close();
                conn.Close();
            }
        }

更新:编写一个返回datatable的函数,这样我们就可以像我在下面的代码中所做的那样,将其绑定到我们的gridview控件

 public DataTable bindGridView() 
    {
     string txtSearch = txtSearchRP.Text;
     DataTable dt = new DataTable();
     using (SqlConnection con = new SqlConnection(cn.ConnectionString))
        {
            SqlCommand cmdd = new SqlCommand();
            cmdd.CommandType = CommandType.StoredProcedure;
            cmdd.CommandText = "sp_Search";
             cmdd.Parameters.AddWithValue("@txtSearch", txtSearch);
            cmdd.Connection = con;
            con.Open();
            SqlDataAdapter dap = new SqlDataAdapter(cmdd);
            DataSet ds = new DataSet();
            dap.Fill(ds);
            dt = ds.Tables[0];
            con.Close();
        }
        return dt;
    }

点击按钮:调用bindGridView()函数绑定Gridview控件

GridView1.DataSource = bindGridView();
GridView1.DataBind();

感谢所有分享知识和努力的人,最终通过字符串替换方法得到了答案

这是3行代码

string value = txtSearchRP.Text;
value = value.Replace("'", "['']");
sqlDataSource3.SelectCommand = "SELECT * from tenant WHERE  (name LIKE '%" + value.ToString() +"%')";

通过您在这里发布的答案,我们以最简单的形式解决了问题:)