access查询:where语句如何引用变量?
我想做个带有很多参数的搜索,比如访客从前台提交了以下几个变量:
string my_id="id>1";
string my_page="page=2";
string my_sort="sort=3";
我想查询满足以上三个条件的结果,应该如何写where语句?要求引用变量名。
------解决方案--------------------sql = "select * from table where id>@id and page=@page and sort=@sort"
OleDbCommand cmd = new OleDbCommand(con, sql);
cmd.Parameters.Add("@id",OleDbType.VarChar);
cmd.Parameters.Add("@page",OleDbType.VarChar);
cmd.Parameters.Add("@sort",OleDbType.VarChar);
cmd.Parameters["@id"].Value = "1";
cmd.Parameters["@page"].Value = "2";
cmd.Parameters["@sort"].Value = "3";
------解决方案--------------------标准做法,用参数化的查询而不是拼接字符串
string str = "select * from yourtable where id > ? and page = ? and sort = ?";
OleDbCommand cmd = new OleDbCommand(str, yourConnection);
cmd.Parameters.Add("?", OleDbType.Integer).Value = id; //注意顺序不能错
cmd.Parameters.Add("?", OleDbType.Integer).Value = page;
cmd.Parameters.Add("?", OleDbType.Integer).Value = sort;
yourConnection.Open();
//这里查询
yourConnection.Close();
------解决方案--------------------如果要这样没有简单的办法,通常的做法是根据这些条件动态的拼接SQL语句(可以在程序里,也可以在存储过程中ACCESS应该是视图里),不过这样自己通常要过滤字符串以避免SQL注入
------解决方案--------------------这种情况为了减少sql语句里的where 后面条件之间的and判断,我一般是这么写
strsql="select * from table where 1=1",在这个后面再加条件的话就直接and xxx=@xx就可以了。
------解决方案--------------------可以这样写
strsql="select * from table where 1=1 adn mystr='+ TextBox1.text +'";
------解决方案--------------------方法很简单
你必须依次去判断 asp php jsp 这些是否选中...
如果选中的话那么就相应的在where 里面加上
可以用一个变量str存储以上的关系..
然后就 where true and str
就可以了..