主要用到sql的isnull方法 和 DBNull.Value。
isnull(参数1,参数2) 判断参数1 是否为NULL,如果是 返回参数2 否则返回参数1.
select ... where cxljdzj_isvip=isnull(@ckb,cxljdzj_isvip).... 判断@ckb是否为null,如果为null则where cxljdzj_isvip=cxljdzj_isvip,如果不为null则cxljdzj_isvip=@ckb。
其中 where cxljdzj_isvip=cxljdzj_isvip 意思就是查询所有的数据,跟没有这个where约束一样。
还有一个问题,new SqlParameter("@ckb",ckb), 在参数化数值的时候,如果ckb为null,则报错。(需要参数 '@ckb',但未提供该参数。)
因为此null为c#的,而DbNull.Value才是数据库中的null,我们传入参数,如果你给参数@ckb赋值为null,相当于没赋,因为cmd.Parameters[@ckb].Value的默认值就是null,而不是DbNull.Value。所以综上所诉,使用这个方法的时候,必须先判断是否为Null或者空字符串。如果是,则必须将DbNull.Value 赋值给 ckb.
即: if (ckb == null || ckb.ToString() == "")
{
ckb = DBNull.Value;
}
其他多条件的。也依次类推即可。