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

时间:2014-10-10 04:22:51

标签: c# sql asp.net

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

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

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

SELECT *来自租户WHERE(名称LIKE'%“+ txtSearchRP.Text +”%')

提前感谢您的帮助!


编辑以获取更多信息:

我实际上是在用户单击“按钮”后将查询传递给sqlDataSource以自动绑定gridview。

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

4 个答案:

答案 0 :(得分:2)

试试这个

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();

答案 1 :(得分:0)

更好地创建storedprocedure

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();

            }
        }

<强>更新 编写一个返回数据表的函数,以便我们可以将其绑定到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();

答案 2 :(得分:0)

除了已经给出的答案之外,在某些应用程序中,您可能需要考虑用户提供的输入字符串中的escaping wildcards such as %

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

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

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

答案 3 :(得分:0)

感谢所有分享知识和努力的人,最后通过String replace方法获得答案

这里是3个内线代码

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

通过联合努力,您在此处发布的答案,我们以最简单的形式解决问题:)