动态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)

相关推荐

  • 加拿大动物,加拿大的代表动物是什么

    技术加拿大动物,加拿大的代表动物是什么加拿大的国兽,海狸(英语叫BEAVER),也叫河狸,它是一种躯体肥胖的啮齿类动物,外型酷似大老鼠。海狸身上有两宝,一种是用于制作香水的原料,属于海狸性腺分泌的液体;另一种是海狸油光水

    生活 2021年10月27日
  • windows API怎么使用入门sleep

    技术windows API怎么使用入门sleepwindows API怎么使用入门sleep,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。windows

    攻略 2021年10月23日
  • windows中链栈和顺序栈相比的优势是什么

    技术windows中链栈和顺序栈相比的优势是什么本篇内容介绍了“windows中链栈和顺序栈相比的优势是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧

    攻略 2021年11月9日
  • jq如何修改css属性

    技术jq如何修改css属性本篇内容介绍了“jq如何修改css属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    攻略 2021年11月17日
  • Kubernetes架构设计与核心组件工作流是什么

    技术Kubernetes架构设计与核心组件工作流是什么这篇文章主要讲解了“Kubernetes架构设计与核心组件工作流是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“

    攻略 2021年10月29日
  • 【转载】EXCEL VBA 20个有用的ExcelVBA代码

    技术【转载】EXCEL VBA 20个有用的ExcelVBA代码 【转载】EXCEL VBA 20个有用的ExcelVBA代码1.显示多个隐藏的工作表
    如果你的工作簿里面有多个隐藏的工作表,你需要花很多

    礼包 2021年11月13日