欢迎光临
我们一直在努力

ASP向SQL语句(不是存储过程)传递参数-ASP教程,数据库相关

建站超值云服务器,限时71元/月

四年前写的一个内容管理系统,应用在公司内部网上,昨天dba说其中的sql语句未使用参数化的调用,导致服务器负担加重,资源占用大。并列出了几个占用资源较大的语句,类似如下:

select art_id, art_title, … from usr_news.view_article where art_ispassed=y and art_class=4066 order by art_passtime desc

其中where子句中的art_class的值是先确定后组合好这样整条sql语句,然后通过ado去执行的。因参数值不同,在服务器端会产生不同的sql语句,如果有10万个值,服务器就会为这10万条sql语句创建缓存。dba说要改为art_class=:v方式(oracle数据库),我用与访问存储过程类似的代码来写,如下:

dim userid

userid=1234



command1.commandtext = "select * from users where userid=:v"

command1.parameters.append command1.createparameter(":v", , ,,userid)

set rs = command1.execute

运行时在createparameter语句处有以下出错提示:

adodb.command (0x800a0bb9)

参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。

晕死,为什么存储过程可以,直接sql语句不行呢?

把省略的参数加上,还是不对。

试了几次,都不行,于是找微软技术支持,几经周转终于解决了。原来通过ado访问时sql语句中的参数要用“?”不用“:”“@”,以下为微软工程师对此问题的小结:

问题描述:

在asp中,如果通过vbscript调用ado操作序列化sql查询. 您按照.net的调用方法出现0x800a0bb9错误。

解决办法:

在vb中调用ado的序列化查询,您可以参考下面两篇文章:

how to invoke a parameterized ado query using vba/c++/java

http://support.microsoft.com/?id=181734

info: visual basic accessing an oracle database using ado

http://support.microsoft.com/?id=176936

需要注意的是,在vbscript中,很多常量没有定义,比如adinteger, 我们需要用具体的数值代替。对于createparameter的详细说明,请参考:

createparameter method

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcreateparam.asp

再次感谢您致电微软。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP向SQL语句(不是存储过程)传递参数-ASP教程,数据库相关
分享到: 更多 (0)