c# Oledb参数化解决办法

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

          //条件1
            string queryWhere1 = par.roomStat == "全部" ? string.Format(" 1=1 ") : string.Format(" 字段1= {0} ", parStat);
            //条件2
            string 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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值