SQL参数化查询讲座 (九)

初学者使用参数化查询易犯的错误是仍以字符串格式化变量的观点理解查询参数。有的程序员老想把数据列名称也作为可变的参数,结果要么执行出错,要么输出数据出乎意料。比如为SQL语句“SELECT column1, FROM table1”指定参数“column2”,查询的结果的第2列并不是数据表table1column2数据列的数据,而是在每条记录中都是字符串column2本身。

要知道,数据表、数据列的名称在SQL语句中视为元数据,而数据列中的值才是某种类型的数据,可以作为查询参数。这就跟程序设计语言中函数、类的名称与字符串变量是两码事一样。事实上,如果数据列、数据表、数据库的名称甚至关键字可以在参数中改变,则查询计划没法预先生成,并且参数化查询的安全性也不再存在。

不少数据库中可使用TOP LIMIT关键字限制查询结果输出的行数。如果应用程序可动态指定输出行数的多少,有时确实很方便。不过,由于行数并不是数据列的值,绝大多数数据库都还不支持TOP ?LIMIT ?形式的参数化查询。实际上如果数据库引擎稍作改进,是完全可以支持这种查询方式的。在目前,您大概只能用字符串拼凑的方法设置输出的行数。

另外这里也客观地指出,应用程序中调试参数化查询比调试不含参数的SQL查询要困难一些。使用者最好充分使用ADOADO.NETODBC及开发工具中的诊断功能,以尽快发现和定位故障。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值