回 帖 发 新 帖 刷新版面

主题:我换个方式来表达我的疑问,希望这次表达清楚了。。。关于rs.open

这有两段代码:
第一段:
dim sql,rs
  sql="select * from [user] where username='" & username & "'"
  set rs=server.createobject("adodb.recordset")
  rs.open sql,conn,1,3
  if not(rs.bof and rs.eof)
  then
    error=true
    errmsg=errmsg & "
<li>你注册的用户已经存在!请换一个用户名再试试!</li>"
  else
    rs.addnew
    .....    
    rs.update
    .....

第二段:
dim sql,rs
  sql = "select * from [user]"
  set rs=server.createobject("adodb.recordset")
  rs.open sql,conn,1,3
  rs.addnew
  .....    
  rs.update
  .....

大家都知道rs.open操作的对象或者说基础,必须要由sql语句来指定,那么第一段代码里面,sql语句指定的数据集是用户名为username的字段,而第二段代码里面,sql指定的数据集是所有字段,二者指定的内容不一样,但是都可以用rs.addnew来更新数据库,这是为什么?虽然第一段代码先做了用户名是否被占用的判断,但是对rs.addnew来说,他所操作的对象或者说基础是不一样的,但是都可以达到向数据库加入新用户的目的,这该怎么理解?


我自己的想法是:第一段代码,能执行rs.addnew的情况实际上只有一种,那就是用户名为username的字段集合为空的时候,而第二段代码,执行rs.addnew的基础其实在某种情况下也可以是字段集合为空,比如说对第一个来注册的用户来说,两段代码中sql指定的集合其实都为空。。。。。

回复列表 (共2个回复)

沙发

对,正如你所说,ASP也是这种模式,要执行语句,首先要把记录集打开就可以了,addnew没有非常严格的限制,在用这个命令之前只需要把记录集打开就可以增加记录了,没有特别的条款可说

板凳

大力感谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册