本文向您介绍动态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