改善sql字符串的可读性(2) - 多个可选条件拼接的优化

本文探讨了在面对多种查询条件时如何高效地构建SQL查询语句。通过将SQL主体与条件部分分离,使得代码更易于管理和维护。介绍了使用参数化方式避免SQL拼接所带来的问题,并提供了一种简洁明了的实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

报表众多的系统,“多个可选条件拼接”就会大量存在。因为程序员需要根据条件录入框的的值是否存在来决定是否拼接这个对应条件。有点抽象,还是看代码。

 

string sql =

@"select n.vchcode,n.summary,n.Comment,e.fullname efullname                  

      from dlyndx n left join employee e on n.etypeid = e.id

   where n.draft=0 ";

if (queryParams.vchCode != "")

{

  sql += " and n.number like @number";

  dbHelper.AddParameter("@number", AppUtils.GetLikeStr(queryParams.vchCode));

}

if (queryParams.comment != "")

{

  sql += " and n.comment like @comment";

dbHelper.AddParameter("@comment", AppUtils.GetLikeStr(queryParams.comment));

}

 

这个sql的最大问题是,sql的条件部分和sql主题不在一起,并且需要根据外部条件(这里是单据号,备注等查询字段是否有值)来决定是否拼接sql。改进的方法当然是把sql都放在一块代码内,参数都放到以外一块内代码内。

 

看看新的代码:

string sql = @"

select n.vchcode,n.summary,n.Comment,e.fullname efullname                  

    from dlyndx n left join employee e on n.etypeid = e.id

  where n.draft=0

  and (@enableNumber and n.number like @number)

    and (@enableComment and and n.comment like @comment)

";

dbHelper.AddParameter("@enableNumber", queryParams.vchCode != "");

dbHelper.AddParameter("@number", AppUtils.GetLikeStr(queryParams.vchCode));

dbHelper.AddParameter("@enableComment",queryParams.comment != "");

dbHelper.AddParameter("@comment", AppUtils.GetLikeStr(queryParams.comment));

 

代码混合是问题的温床,这段代码做到了sql和参数的分离,sql和代码不会胶合在一起。容易阅读。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值