[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[ASP]ASP+OO4O,OraDatabase.Parameters集合容易出现“参数重复”错误的解决方法。

上一篇:[备忘]CVS Server变更IP时,客户端的替换方法。
下一篇:[备忘]ASP+ADO的CSV出力及入力的一些注意事项

添加日期:2007/8/2 12:05:08 快速返回   返回列表 阅读5612次
如这段:


Dim OraDatabase,OraDynaset,sql
set OraDatabase = OraSession.getDatabaseFromPool(10)

sql="select...from ...where aaaa=:xx"
OraDatabase.Parameters.Add "xx", "haha", ORAPARM_INPUT, ORATYPE_VARCHAR2

Set OraDynaset = OraDatabase.DbCreateDynaset(sql, ORADYN_DEFAULT) 
................



如果只运行一次的话,不会出问题。

但是,这是不可能的,哪个页面都可能执行多次。

所以问题出现了……

--------------------------------------------
由于使用了Session池,你取到的可能还是上次那个OraDatabase对象(或者是别人用的对象),

你Add一次之后,它的Parameters集合中就一直都有…………

所以,你再Add,就会报“参数重复”、“Duplicate parameter name”这个错误。
--------------------------------------------
首先想到的就是用完就Remove掉,后来一想,如果半路出个错,没Remove掉,下次还是出错。

所以就想到,用之前遍历全部Remove掉。
---------------------------------------------
OraDatabase.Parameters.Remove xx
这个xx可以是下标,0到OraDatabase.Parameters.Count-1,也可以是Name。

开始用Name,太麻烦,换个页面就得重写一边,

想到用下标的方法。
----------------------------------------------
开始这样写:


For i=0 To OraDatabase.Parameters.Count-1
    OraDatabase.Parameters.Remove i
Next


感觉没啥错…………

可是,实际跑起来,感觉里面的参数没有Remove干净……

还以为下标范围不对,For i=0 To OraDatabase.Parameters.Count+1都不行……

郁闷。
-----------------------------------------------
Google之,有老外这样写:


For i=0 To OraDatabase.Parameters.Count-1
    OraDatabase.Parameters.Remove 0
Next


注意,那是个0哦……

开始还纳闷……干嘛写个0???

真是猪头脑袋!!(说我自己呢)
-----------------------------------------------
注意,Remove的时候,OraDatabase.Parameters.Count这个值一直在减小……

所以,造成了提早结束循环,这种循环,适合倒过来写。


For i=OraDatabase.Parameters.Count-1 To 0 Step -1
    OraDatabase.Parameters.Remove i
Next


================================================
所以,正确方法就是上面这个,和上上面那个。
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved