日期:2014-05-18  浏览次数:20443 次

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

就可以了..