Adodb.Command 平时很少注意到的一个参数

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 inelm 的 blog

我们在 asp 中调用 sql server 的存储过程时,如果使用 adodb.command 对象,通常使用如下的代码:

dim cmd, rs

set cmd = server.createobject("adodb.command")
cmd.activeconnection = conn
cmd.commandtype = adcmdstoredproc
cmd.commandtext = "testproc"
cmd.parameters.append cmd.createparameter("@a" , adinteger, adparaminput, 4, 1)
cmd.parameters.append cmd.createparameter("@b" , advarchar, adparaminput, 50, 'b')
...
set rs = cmd.execute

今天我在调试一个程序的时候发现, asp 页面上提示某个参数没有赋值, 而实际上我没赋值的却是另一个参数。 于是我打开 sql server 的事件探察器, 执行了一遍程序, 捕捉到实际上 asp 发送给 sql server 的 sql 语句实际上是如下的形式:

execute testproc 1, 'b', ....

原因现在很明显了,ado 引擎没有把对存储过程的调用翻译为完整的语法, 而是采用了上述简写方式, 这样,当中间某个参数丢失的时候, 就有可能因为错位而误判为另一个参数丢失。
然后我查了一下 command 对象的属性, 加了如下一句:

cmd.namedparameters = true

也就是说指定要使用显式命名的变量形式, 然后再执行一边程序, 发现事件探察器中捕捉到的语句变成了:

exec testproc @a = 1, @b = 'b', ...

报错的参数也是正确的。
everything is ok now

本文关键:Adodb.Command 平时很少注意到的一个参数
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top