select * from (select * from table where ……) where ……本来是想用嵌套的办法去做 假如查询值全是string值的话是可以实现的 但是问题是:里面有不少int值和datatime值这样System.DateTime startDate = Convert.ToDateTime(TextBox3.Text.Trim()); 假如TextBox3是空的话是转换不到datatime的 还是要去判断TextBox3是否为空又回到问题的原点了实在是苦恼 想不到解决的办法
如果只是查询条件的话,将它们组成一个string就可以了吧你的意思是sql语句可能是select * from table where a=a,select * from table where a=a and b=b等等查询条件不同的意思吧?不明白为什么会出现“select * from (select * from table where ……) where …… ”这种写法……至于判断,那本身就是一定需要的。写个实际例子?
string sql = select * from table where 1=1 " if(姓名!="") { sql += " or 姓名 ='" + 姓名 + "'" } if(姓名!="") { sql += " or 性别 ='" + 性别 + "'" } ....... 应该用OR 估计楼主的意思是空的就不查,不空的就的参数就查
是的 就是你说的 假如有2个查询项 那就是有4种可能 select * from table where a=a select * from table where b=b select * from table where a=a and b=b select * from table 4种情况 我大不了全部罗列出来 也无所谓但是万一有10个查询项 那就是2的10次方种情况 这样穷举所有的情况,一一写出sql 我觉得总归是不现实的至于select * from (select * from table where ……) where …… 那就是查询的嵌套 全是string值的时候可行
应该是用and 属于联合查询
全部用AND连接就可以了,我公司的匡架就是这样做的
只要判断传了几个参数就可以了,在用AND连接搞定,给分
说下我的方法 写个方法获取查询条件,返回hashtable public hashtable getJoken() { hashtable ht = new hashtable (); if(string.isnullorempty(name.text)) { ht.add("name",name.text); } ... } 然后再逻辑层判断条件 如果取到 ht["name"] == null 则放弃该条件 反之追加 " and name ='" + ht["name"]。tostring() + "'" 最后拼接成一个查询条件即可。
那就要写32条sql 那样肯定不现实
应该是select * from table where 姓名=…………
然后有5个查询条件 都是可空的
就说是有32种可能
if(姓名!="")
{
sql += " and 姓名 ='" + 姓名 + "'"
}
if(姓名!="")
{
sql += " and 性别 ='" + 性别 + "'"
}
.......或是直接用Like
string a="select "
if(XX = 姓名)
{
a+= 姓名,
}
if(XX = 性别)
{
a+= 性别,
}
...string b= form 表string sql=a+b;不知道行不?我笨人就想到这么个笨法!!
select * from tablename where 姓名='@姓名' OR '@姓名'='ALL'
假如查询值全是string值的话是可以实现的
但是问题是:里面有不少int值和datatime值这样System.DateTime startDate = Convert.ToDateTime(TextBox3.Text.Trim());
假如TextBox3是空的话是转换不到datatime的
还是要去判断TextBox3是否为空又回到问题的原点了实在是苦恼 想不到解决的办法
if(姓名!="")
{
sql += " or 姓名 ='" + 姓名 + "'"
}
if(姓名!="")
{
sql += " or 性别 ='" + 性别 + "'"
}
.......
应该用OR
估计楼主的意思是空的就不查,不空的就的参数就查
是的 就是你说的
假如有2个查询项 那就是有4种可能
select * from table where a=a
select * from table where b=b
select * from table where a=a and b=b
select * from table
4种情况 我大不了全部罗列出来 也无所谓但是万一有10个查询项 那就是2的10次方种情况
这样穷举所有的情况,一一写出sql
我觉得总归是不现实的至于select * from (select * from table where ……) where …… 那就是查询的嵌套 全是string值的时候可行
应该是用and 属于联合查询
写个方法获取查询条件,返回hashtable
public hashtable getJoken()
{
hashtable ht = new hashtable ();
if(string.isnullorempty(name.text))
{
ht.add("name",name.text);
}
...
}
然后再逻辑层判断条件
如果取到
ht["name"] == null
则放弃该条件
反之追加
" and name ='" + ht["name"]。tostring() + "'"
最后拼接成一个查询条件即可。
{
oleConn.Open();
string strSql="select * from Table";
oleDbDataAdapter oleDap=new oleDbDataAdapter(strSql,oleConn);
DataSet ds=new DataSet();
oleDap.Fill(ds);
return ds.Tables[0];
}
在用户界面写相应的语名就可以了
strSql中的Table是数据库的表名
谢谢支持
你的写法没必要你是将简单问题复杂化了。假如是10个条件,即使你的写法是成立的,也等于要在数据库里进行10次查询。数据量一大就完蛋了。你还没理解我们说组成语句的意思,组语句根本不必先把所有情况罗列出来,而是应该需要一种情况才添加一种条件。大约应该是这样写string s1 = "select * from table";
然后
string s2 = " where 1=1"
当需要增加条件的时候,比如需要a=a的条件就这样
if (NeedA()) //判断方法名字只是我随便写的
s2 += " and a=a";
if (NeedB())
s2 += " and b=b";
...
这样写下去,1万个条件都能加进去然后整个查询串就是s1 + s2完成