告别where 1=1 最佳方案分享

已经有2年没有用过where 1=1了,没想到换了家公司后,又让我看到了它。在网络上面搜索了一下,发现没有人提供一个比较好的方案来解决这一问题。很多人说可以让数据库的优化机制去处理,但是,我想对于大部分程序来说,数据库都是负担最重的那个。能够自己去做优化的话,还是不要加重数据库的负担了吧。以下是两种相似的方法来解决where 1=1 的问题,供大家参考。

方案一、在数据库底层代码中这样处理:

if (!String.IsNullOrEmpty(strWhere))
            {
                string str = strWhere.TrimStart();//去除前置空格
                if (str.ToLower().IndexOf("and ") == 0)//若以and开头则自动去除第一个and
                {
                    strWhere = str.Substring(4);//若要保留前面一个空格,可以改为3
                }

                strSql.Append(" where " + strWhere);
            }

方案二、在匹配条件传入底层方法前,调用下面通用方法:

/// <summary>
         /// 验证sql匹配条件是否正确(若以and开头则自动去除)
         /// </summary>
         /// <param name="where">sql匹配条件</param>
        public static string CheckWhere(string where)
        {
            string str = where.TrimStart();//去除前置空格
            if (str.ToLower().IndexOf("and ") == 0)//若以and开头则自动去除第一个and
            {
                where = str.Substring(4);//若要保留前面一个空格,可以改为3
            }
            return where;
        }

第一次发博客,有不足的地方,欢迎大家指正。

时间: 2024-12-29 20:00:01

告别where 1=1 最佳方案分享的相关文章

备份方案 分享

备份方案 分享

Android DiskLruCache完全解析,硬盘缓存的最佳方案

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/28863651 概述 记得在很早之前,我有写过一篇文章Android高效加载大图.多图解决方案,有效避免程序OOM,这篇文章是翻译自Android Doc的,其中防止多图OOM的核心解决思路就是使用LruCache技术.但LruCache只是管理了内存中图片的存储与释放,如果图片从内存中被移除的话,那么又需要从网络上重新加载一次图片,这显然非常耗时.对此,Google又提供了一套硬

UITableView中cell边框和背景设置最佳方案

UITableView是iOS开发中最常用的视图控件,在平常用的iOS App中大部分都用到了UITableView. 需求很简单,就是在一个UITableView里面实现一个不一样的UITableViewCell,如下图里的“切换账号”按钮 正常情况下grouped样式(UITableViewStyleGrouped)UITableViewCell都是有边框的,所以如果只是用addSubView添加一个按钮的话,就会有边框在外面,不符合要求,也想过用一个大的图片,把这个cell给盖住,但是感觉

inline-block代替浮动布局float:left列表布局最佳方案

基于各位前辈的辛勤劳动,下面得出使用inline-block替换float:left;的最佳方案. html代码 <div class="list"> <ul> <li><img src="images/pic02.jpg" ></li> <li><img src="images/pic02.jpg" ></li> <li><img

使用 Python ssh 远程登陆服务器的最佳方案

首发自公.众.号:Python编程时光 在使用 Python 写一些脚本的时候,在某些情况下,我们需要频繁登陆远程服务去执行一次命令,并返回一些结果. 在 shell 环境中,我们是这样子做的. $ sshpass -p ${passwd} ssh -p ${port} -l ${user} -o StrictHostKeyChecking=no xx.xx.xx.xx "ls -l" 然后你会发现,你的输出有很多你并不需要,但是又不去不掉的一些信息(也许有方法,请留言交流),类似这样

旅游行业GIS应用方案分享

旅游地理信息系统(Travel GeographicInformation System, 简称TGIS) 是以旅游地理信息数据库为基础, 在计算机硬软件支持下, 运用系统工程和信息科学的理论和方法, 综合地.动态地获取.存储.管理.分析和应用旅游地理信息的多媒体信息系统.旅游信息系统的建立, 将以其快速高效收集.存储.整理.输出.查.询.检索等功能来提高旅游决策效率, 更以其优越的空间分析功能使旅游规划更为科学. 旅游与地理信息相关性极强,GIS 中如图形.区域景观资源信息.交通路线等诸多要素

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

出处:http://blog.csdn.net/lmj623565791/article/details/37936275 1.概述 众所周知,Activity在不明确指定屏幕方向和configChanges时,当用户旋转屏幕会重新启动.当然了,应对这种情况,Android给出了几种方案: a.如果是少量数据,可以通过onSaveInstanceState()和onRestoreInstanceState()进行保存与恢复. Android会在销毁你的Activity之前调用onSaveInst

Camtasia Studio 录制视频格式trec压缩发布最佳方案

在使用了一段时间Camtasia Studio后,录制视频格式trec,在[生成和分享]中,转换格式有很多种,但是经过尝试,按一下方式效果和大小得到完美控制: 1.首先,在 调  视频的 [编辑尺寸]到1080p,不要采用默认的720p 2.其次,在[生成和分享]选择后,选择[自定义生成设置],然后选择[推荐]即MP4,然后再 然后一直默认下去即可. 当然,在下一步的有一个[视频]选项卡,你要保证 视频大小确实是你的最佳分辨率大小.至于质量的压缩比例50%就行,70%的会压缩后的大小会更大而且质

c#并行任务多种优化方案分享(异步委托)

遇到一个多线程任务优化的问题,现在解决了,分享如下. 假设有四个任务: 任务1:登陆验证(CheckUser) 任务2:验证成功后从Web服务获取数据(GetDataFromWeb) 任务3:验证成功后从数据库获取数据(GetDatFromDb) 任务4:使用2.3的数据执行一个方法 (StartProcess) 一个比较笨的方法(本人最开始的方法,记为方法1)是直接开启一个线程,按照顺序依次执行四个任务: new Thread(delegate                {