今天做oledb参数化 结果发现他的参数不符合我的要求,首先参数必面是值,不能是个表达式,可能是出于安全考量,防止注入,我的参数有字段之外的值,比如字段有的值:已结帐 未结帐 这两个状态, 我选项上边还有个全部结帐状态,这个就没办法传到字段里边,除非查询语句 where 1=1, ,但是 oledb传的参数只能是where 字段=参数,查询语句判断的话代码量太大 ,如果有4组全部 那个的可能组合就应该是4的平方种组合,这不得搞死人啊。而且参数全部都是?来做占位符,必须按顺序来传值,顺序这个倒是好办,定义一个变量 先给变量 再用变量去赋给语句就可以了,要替换字段就只得用字符串替换了,所以我的sql语句先在要替换的地方用 {数字} 这种占位符先写上,再要传给查询前先作下替换,
用string.Format(前边是带了占位符的sql语句,后边是一个替换数组),如果出于安全考量还是要可以再传参数进去,我是个懒人,做到这里了就不考虑那些东东了,直接干字符串替换。
//条件1string queryWhere1 = par.roomStat == \"全部\" ? string.Format(\" 1=1 \") : string.Format(\" 字段1= {0} \", parStat);//条件2string queryWhere2 = par.roomType == \"全部\" ? string.Format(\" 1=1 \") : string.Format(\" 段段2= \'{0}\'\", par.roomType);//字符串替换参数string[] pars = new string[]{queryWhere1 ,queryWhere2};//字符串替换占位符sqlCmd = string.Format(sqlCmd, pars);
sql语句则这么来
SELECT* FROM 表1 WHERE {0} and {1}