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+"%")
试试这个
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() +"%')";
通过您在这里发布的答案,我们以最简单的形式解决了问题:)