当前位置: 移动技术网 > IT编程>开发语言>Asp > asp(vbs)Rs.Open和Conn.Execute的详解和区别及&H0001的说明

asp(vbs)Rs.Open和Conn.Execute的详解和区别及&H0001的说明

2017年12月01日  | 移动技术网IT编程  | 我要评论

1. rs.open sql,conn,a,b,c
2. conn.execute(sql,rowsaffected,c)

一、conn.execute(sql,rowsaffected,c)

参数含义:

sql的值可以是sql语句、表名、存储过程名,也可以是数据提供者所能接受的任意字符串。为了提高性能,最好为c参数指定合适的值
可选参数rowsaffected
1、一个insert、update或delete查询执行以后,rowsaffected返回所影响的数目,这些查询会返回一个关闭的recordset对象。
2、一个select查询将返回rowsaffected值为-1并且返回带有一行或多行内容的打开的recordset。

<%
set conn=opendatabase'(opendatabase函数详见:asp中与access和mssql数据库建立连接方法)
conn.execute "update table1 set col1='123'",rowsaffected,&h0001
response.write rowsaffected&" 行受到影响"
conn.close
set conn=nothing
%>

二、rs.open sql,conn,a,b,c

set rs=server.createobject ("adodb.recordset")
sql="xxxx"
rs.open sql,conn,1,1,&h0001
irs=rs.getrows(10)

&h0001是什么意思?以前第一次见到这个时,着实迷惑了一阵。现在网站关于这个的资料满天飞了。在此提一下,下面参数说明中有具体说明。

a参数:游标类型

const adopenforwardonly=0 只读,缺省。在记录集内的记录间游标只允许往前移动。不支持分页、recordset、bookmark
const adopenkeyset=1 只读,键集游标,当前数据记录可自由移动,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、recordset、bookmark
const adopendynamic=2 可读写,当前数据记录可自由移动,动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览(access不支持)。
const adopenstatic=3 静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动

b参数:锁定类型

const adlockreadonly=1 缺省值,记录集是只读的,不能修改记录
const adlockpessimistic=2 '悲观锁定,当编辑时立即锁定记录,以确保成功地编辑记录。最安全的方式
const dlockoptimistic=3 '乐观锁定,直到用update方法提交更新记录时才锁定记录,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
const dlockbatchoptimistic=4 '批量乐观锁定,允许修改多个记录,只有调用updatebatch方法后才锁定记录。
当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,数据在这段时间被更新。这减少了资源的使用。

c参数:(指定sql语句类型)

const adcmdunknown=&h0008 '未知,需要系统来判断,速度慢,为缺省值
const adcmdtext=&h0001 '将执行一段sql
const adcmdtable=&h0002 '将操作一个表
const adcmdstoredproc=&h0004 '将操作存储过程名称
const adcmdfile= &h0100 '对象类型相应的文件名称
const adcmdtabledirect=&h0200 '是能直接从表中获取行内容的表名称

三、rs.open和conn.execute的区别

rs.open sql,conn
如果sql是delete,update,insert则会返回一个关闭的记录集,在使用过程中不要来个rs.close在文件最后再写rs.close中间可以来多个记录集rs1.open sql1,conn,最后一块关闭记录集:rs.close rs1.close
conn.execute(sql)
如果sql是delete,update,insert则会返回一个关闭的记录集,在使用过程中不要来个rs.close在文件最后再写rs.close中间可以来多个记录集rs1.open sql1,conn,最后一块关闭记录集:rs.close rs1.close.
如果sql是update,insert,delete则应该使用conn.execute(sql)也可以不要括号conn.execute sql
如果sql是select语句则应该使用set rs=conn.execute(sql)括号一定要,不能省略
这是因为vb的特性,带返回值的调用必须加括号,不带返回值的调用可以不要括号。

1、conn.execute

sql="select * from admin where username='xiaozhu'"
set rs=conn.execute(sql)
'执行完以后自动关闭记录集
'最后只需要关闭连接就可以了
conn.close
set conn=nothing

2、rs.open

set rs=server.createobject("adodb.recordset")
sql="select * from admin where username='xiaozhu'"
rs.open sql,conn,1,1
'可以自己设定一些参数,即锁定和游标的移动方式
'最后要关闭记录集和连接
rs.close
set rs=nothing
conn.close
set conn=nothing

3、command.execute

sql="select * from admin where username='xiaozhu'"
set rs=command.execute(sql)
1.
set rs=conn.execute("如果是select语句") 得到的rs.recordcount=-1
rs.open sql,conn("sql为select语句") 得到的rs.recordcount为正常的记录数
2.
rs.open是打开数据库 conn.execute 是执行sql指令
set rs=conn.execute(insert,update,delete)返回一个关闭了的记录集
set rs=conn.execute(select)返回一个没有关闭的记录集
3.
conn.execute(sql,rowsaffected,c)
参数含义:
sql的值可以是sql语句、表名、存储过程名,也可以是数据提供者所能接受的任意字符串。为了提高性能,最好为c参数指定合适的值。
可选参数rowsaffected将返回insert、update或delete查询执行以后所影响的数目。这些查询会返回一个关闭的recordset对象。
一个select查询将返回rowsaffected值为-1并且返回带有一行或多行内容的打开的recordset。
4.
conn.execute sql适合于不需返回recordset对象时使用,比如下面的代码:
sql="delete from news where id="&cstr(id)
conn.execute sql
如果需要返回recordset对象,则使用如下代码:
sql="select from news where id="&cstr(id)
set rs=conn.execute(sql)
如果去掉execute(sql)这儿的括号(即为set rs = conn.execute sql),就会提示“语句未结束”这样的错误提示,我翻看了一下语法格式,发现有二种格式,详解如下:

格式一:connection对象名.execute(sql指令)
格式二:connection对象名.execute(数据表名)
conn.execute(sql)(0)为数据集的第一个字段的值
conn.execute(sql) 返回记录集。
conn.execute sql 不返回记录集。一般用于插入、更新,删除等不带返回值的操作

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网