编程经验点滴 动态SQL的拼接技巧
{
if(id != null)
当然,这个 addParameterValue() 封装函数,是可有可无的。多写几个 DbParameter p = cmd.CreateParameter() 并没有什么大问题。
sql += " and name=?";
if(id>0 && string.IsNullOrEmpty(name))
DbParameter p = cmd.CreateParameter();
command.Parameters.Add(id);
cmd.Parameters.Add(p);
if(id != null)
2. 有几个动态参数,代码的重复量就成了这些参数的不同数量的组合数,动态参数越多,重复量越大。
command.CommandText = "select * from t1 where id=?";
"where 1=1" 虽是教科书中没有的小技巧,却很管用。
}
addParameterValue(cmd,name);
在数据库的理论中,没有指定的数据,是用 null 来表示的,不论是 string 还是 int/long。
这两个问题都很好解决,给一个正确的代码例子大家看看即可:
sql += " and id=?";
command.CommandText = "select * from t1 where id=? and name=?";
command.CommandText = sql;
复制代码 代码如下:
{
if(!string.IsNullOrEmpty(name))
command.Parameters.Add(name);
问题在于,0 是否是不正常的业务数值,代码中看不出来。不排除程序员随意指定一个数值,作为“用户无录入的默认值”,如果不巧这个默认值,实际上是有其他意义的,那就造成问题。
p.ParameterName = "@XXX";
}
这里的技巧在于,使用了一个 "where 1=1", 巧妙解决了后续 sql 拼接中,每行开头是否要有 "and" 的问题。而这个 "where 1=1",并不会对数据库的索引执行,造成性能上的影响。
常见的误解有:
string sql ="select * from t1 where 1=1";
对参数进行排列组合,然后写各种组合的 SQL,这个思路很奇怪。问题是,很多初学者,都有这个思维习惯。本人不是计算机科班出身,不知道是否哪本教科书,就是如此教导的。但很不幸的是,这个思维习惯是错误的。
if(id<=0 && !string.IsNullOrEmpty(name))
p.Value = TTT;
addParameterValue(cmd,name); 是一个简单封装的函数,用来封装如下一小段代码,目的是让最后的代码,较为简捷直观:
command.Parameters.Add(name);
}
对于第二个问题,以下的错误代码为其证据:
}
if(id<=0 && !string.IsNullOrEmpty(name))
另外,在程序中,一般会在用户界面上让使用用户录入数字,这个数字的数值,在代码中会自动变成 string,然后尝试 string 转换成 int/long,最后送到 sql 函数里。这里需要特别注意的是,很多人把某个特殊的数值,作为“用户无录入的默认值”,正如本文开头所写的错误代码那样:
上述代码中,
复制代码 代码如下:
}复制代码 代码如下:
{if(id>0 && string.IsNullOrEmpty(name))
复制代码 代码如下:
{复制代码 代码如下:
1. 只用 ado.net ,无法进行动态 SQL 拼接。command.CommandText = "select * from t1 where name=?";
这是一个很好的思路,同样可以用在这里的 sql 拼接中。因此,我们在后面的代码中,使用了这个:
command.Parameters.Add(id);
相关热词: 技巧
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/mssql/2200.shtml
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
sql server 关于设置null的一
时间:2020-12-28
-
详解SQL游标的用法
时间:2020-12-27
-
vs code连接sql server数据库步
时间:2020-12-27
-
图书管理系统的sqlserver数
时间:2020-12-25
-
详解SQL 通配符
时间:2020-12-25
-
sql四大排名函数之ROW_NUM
时间:2020-12-25
-
SQLServer数据库处于恢复挂
时间:2020-12-24
-
Win10 64位安装个人版SQL20
时间:2020-12-24
热门文章
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
-
SQL Server数据库入门学习总结
时间:2020-12-10
-
使用SqlBulkCopy时应注意Sqlserver表中使用缺
时间:2020-12-09
