美好的一天!我很难解决这个问题。我一直在寻找答案,但似乎很难找到最合适的答案。
我使用此查询根据用户在txtSearchRP文本框中输入的内容搜索租户的名称,它对于没有撇号的数据非常有效,但是当用户搜索包含'的名称时,它不会功能很好。
示例:用户输入MAX'S以搜索MAX'S RESTAURANT
SELECT *来自租户WHERE(名称LIKE'%“+ txtSearchRP.Text +”%')
提前感谢您的帮助!
编辑以获取更多信息:
我实际上是在用户单击“按钮”后将查询传递给sqlDataSource以自动绑定gridview。
来自租户WHERE的SqlDataSource3.SelectCommand = SELECT *(名称LIKE'%“+ txtSearchRP.Text +”%')
答案 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)
这里是3个内线代码
string value = txtSearchRP.Text;
value = value.Replace("'", "['']");
sqlDataSource3.SelectCommand = "SELECT * from tenant WHERE (name LIKE '%" + value.ToString() +"%')";
通过联合努力,您在此处发布的答案,我们以最简单的形式解决问题:)