原创日志

sql2005遇到的一个递归效率问题

[ 2007-01-03 21:20:50 | 作者: admin ]
字号: | |
以前在sql2000下的一个递归程序放到sql2005下面居然非常的慢(虽然可正常运行),
检查整个程序并无问题,最后锁定在数据库的连接方式和rs的打开方式上面,
最后用

set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open SQL,Conn,3,1
来替代
set rs = conn.execute(sql)

问题解决。

其中用 rs.Open sql,Conn,adOpenStatic,adLockReadOnly 和 rs.Open sql,Conn,adOpenStatic,adLockReadOnly
都报参数不可识别错误,而用数字替代则正常运行。

附录1
=======================================
CONN.EXECUTE(SQL,RowsAffected,C)
参数含义:
SQL的值可以是SQL语句、表名、存储过程名,也可以是数据提供者所能接受的任意字符串。为了提高性能,最好为C参数指定合适的值
可选参数RowsAffected将返回INSERT、UPDATE或DELETE查询执行以后所影响的数目。这些查询会返回一个关闭的Recordset对象。
一个SELECT查询将返回RowsAffected值为-1并且返回带有一行或多行内容的打开的Recordset。

附录2
=======================================
rs.open方法后面有多个参数:
rs.open sql,conn,CursorType, LockType, CommandType
比如 rs.open sql,conn,1,1
也可以写成
rs.cursorType = 1
rs.LockType = 1
rs.open sql
其中CursorType代表从一个表或者一个SQL查询结果返回的记录。
这个参数有四个值分别是:
adOpenForwardOnly 表示只允许在记录集内的记录间往前移动。这个是缺省值。
adOpenKeyset 反映由其它用户所做的对记录的改变或者删除动作,但并不反映由其它用户做作的添加新记录的动作。
adOpenDynamic 反映由其它用户所做的对记录的改变或者删除动作,包括添加的新记录
adOpenStatic 不反映其它用户对记录所做的修改,添加,删除动作。
这四个值VBSCRIPT预定义位
adOpenForwardOnly = 0
adOpenKeyset = 1
adOpenDynamic = 2
adOpenStatic = 3

lockType 表示当打开记录集时,数据提供者用于锁定数据库的类型:
adLockReadOnly 数据不能改变,这是缺省值!
adLockPessimistic 数据提供者在开始编辑数据的时候锁定记录
adLockOptimistic 仅当调用update方法时,数据提供者锁定记录
adLockBatchOptimistic 用于批处理修改
他们的常量值定义分别是:
adLockReadOnly = 1
adLockPessimistic = 2
adLockOptimistic = 3
adLockBatchOptimistic = 4

CommandType这个参数由于很少用到
[最后修改由 admin, 于 2007-01-03 21:39:36]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=779

这篇日志没有评论。

此日志不可发表评论。