动态SQL的拼接技巧有哪些

技术动态SQL的拼接技巧有哪些这篇文章给大家介绍动态SQL的拼接技巧有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。常见的误解有: 1. 只用 ado.net ,无法进行动态 SQL 拼接。 2

本文向您介绍动态SQL的拼接技巧,非常详细。感兴趣的朋友可以参考一下,希望对你有所帮助。

常见的误解有:

1.只使用ado.net,不能进行动态SQL拼接。

2.有几个动态参数,代码的重复量成为这些参数不同个数的组合数。动态参数越多,重复量越大。

对于第二个问题,以下错误代码是证据:

代码如下:

if(id0字符串。IsNullOrEmpty(name)){ 0

命令。CommandText='从t1中选择*其中id=?';

命令。参数.添加(id);

}

if(id=0!字符串。IsNullOrEmpty(name)){ 0

命令。CommandText='从t1中选择*其中name=?';

命令。参数.添加(名称);

}

if(id=0!字符串。IsNullOrEmpty(name)){ 0

命令。CommandText='从t1中选择*其中id=?和名称=?”;

命令。参数.添加(id);命令。参数.添加(名称);

}

这两个问题都很容易解决。只要给我们一个正确的代码示例:

代码如下:

字符串sql='从t1中选择*其中1=1 ';

if(id!=null) { sql='和id=?';

addParameterValue(cmd,id);}

if(!字符串。IsNullOrEmpty(name)) { sql='和name=?';

addParameterValue(cmd,name);}

命令。CommandText=sql

这里的诀窍是使用一个' where 1=1 ',这巧妙地解决了后续sql拼接中每行开头是否应该有' and '的问题。而这个‘其中1=1’不会执行数据库的索引,这会影响性能。排列组合参数然后编写各种组合的SQL是一个很奇怪的想法。问题是很多初学者都有这种思维习惯。我不是计算机班出身,不知道哪本教材是这样教的。不幸的是,这种思维习惯是错误的。其中“1=1”是课本上没有的小技巧,但是非常有用。另外,在程序中,通常会要求用户在用户界面中输入一个数字,这个数字的数值会在代码中自动变成一个字符串,然后尝试将这个字符串转换成int/long,最后发送给sql函数。这里需要特别注意的是,很多人把一个特殊的数值视为“用户没有输入的默认值”,就像本文开头写的错误码一样:

代码如下:

if(id0字符串。IsNullOrEmpty(名称))

问题是0是否是异常的业务值,在代码中看不到。不排除程序员可以任意指定一个数值为“用户没有输入的默认值”。如果这个默认值碰巧有其他含义,就会引起问题。在数据库理论中,没有指定的数据,无论是字符串还是int/long,都用null表示。这是一个好主意,也可以用在sql拼接这里。因此,我们在下面的代码中使用它:

代码如下:

if(id!=null)

在上面的代码中,添加ParameterValue(cmd,name);是一个简单的封装函数,用于封装下面的短代码。目的是使最终代码更简单、更直观:

代码如下:

DbParameter p=cmd。createParameter();p . ParameterName=' @ XXX价值=TTT;cmd。参数。添加(p);

当然,这个addParameterValue()包装函数是可选的。多写几个db parameter p=cmd . create parameter()没有什么大问题。

动态SQL的拼接技巧呢,希望在这里分享一下。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/128955.html

(0)

相关推荐

  • 军人敬礼简笔画,敬礼的小学生怎么画,简笔画

    技术军人敬礼简笔画,敬礼的小学生怎么画,简笔画敬礼的小学生简笔画如下军人敬礼简笔画: 1、敬礼分为举手礼、注目礼、举枪礼和少先队礼等。行礼表示尊敬,用于书信结尾表示尊敬,对人恭敬,以礼相待。如《吕氏春秋·怀宠》:“求其孤

    生活 2021年10月31日
  • Python与Go请求速度哪个更快

    技术Python与Go请求速度哪个更快这篇文章主要介绍“Python与Go请求速度哪个更快”,在日常操作中,相信很多人在Python与Go请求速度哪个更快问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年11月26日
  • Windows 9x屏幕取词的实现方法是什么

    技术Windows 9x屏幕取词的实现方法是什么Windows 9x屏幕取词的实现方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。有关屏幕取词"

    攻略 2021年11月24日
  • 孩子生在美国,去美国生子孩子有必要吗

    技术孩子生在美国,去美国生子孩子有必要吗想要顺利去美国生宝宝,具有关键性的一部是办理签证,只有拿到签证才能进入美国孩子生在美国。当然了,美国的签证也有很多种类,可分为移民签证和非移民签证两种,非移民签证主要为“短期”或“

    生活 2021年10月23日
  • Jupyter Notebook快捷键及使用

    技术Jupyter Notebook快捷键及使用 Jupyter Notebook快捷键及使用一、什么是cellcell:一对In Out会话被视作一个代码单元,称为cell
    cell行号前的 * ,表

    礼包 2021年11月15日
  • SQL Server中的Forwarded Record计数器影响IO性能的解决方法

    技术SQL Server中的Forwarded Record计数器影响IO性能的解决方法SQL Server中的Forwarded Record计数器影响IO性能的解决方法,针对这个问题,这篇文章详细介绍了相对应的分析和

    攻略 2021年12月1日