<script language="javascript" runat="server">
  //用 JavaScript 写服务器端连接数据库的代码示例
  var conn = new ActiveXObject("ADODB.Connection");
  conn.Open("Provider=SQLOLEDB.1; Data Source=localhost; User ID=sa; "
    +"Password=password; Initial Catalog=meizz");  var rs = new ActiveXObject("ADODB.Recordset");
  var sql="select user_kind from tbRightSet where user_id='"+ Account +"'";  rs.open(sql, conn);
  if (!rs.EOF)
  {
    sysUserKind = (rs("user_kind")+"").replace(/^\s+|\s+$/, "");
  }
  rs.close(); rs = null; conn.close(); conn = null;
</script>

解决方案 »

  1.   

    meizz(梅花雪 封闭开发中) 兄这么一大段代码是想告诉我这两句吗?
    rs.close();
    rs = null;
      

  2.   

    1、用ADODB.Connection 或 ADODB.Command 的Execute方法不能返回操作所影响的记录数。
    cmd.Execute(count);
       而如果改用VBScript来写的话就可以了。请问是怎么回事?应该如何解决。
    re:
      你把recordset的游标设置, 设置为1或者22、VBScript里使用完ADODB.Recordset或ADODB.Connection对象后一般先关闭,然后再设为空
    conn.close
    set conn = nothing
       这样子,但在Javascript里应该如何释放这些对象呢?close就可以了吗?顺便问下VBScript中如果直接set conn = nothing的话会不会真正释放?
    re:
      rs.close(); //关闭记录集
      rs = null;  //前面的set的反操作, 这就是释放对象3、Javascript的函数中如果使用了ADODB.Connection对象,在调用结束退出函数时,如果未显示的释放掉对象,系统是否会自动释放呢???如果不在函数中,是全局变量呢???又会是什么情况???
    re:
      在函数里调用,若是没有手动释放, 则这个连接应该是一直连着的, 等这个ASP页面代码运行结束之后,可能会随机被系统释放.
      把连接放在全局变量的做法, 在数据库连接数不大的情况下, 是可行的, 一般把连接放在一个 application 里, 作为全局变量调用, 这个连接是不会被释放的, 直到application结束
      

  3.   

    把数据库连接放在application对象中的方法我想过,不过因为application对象是影响所有用户的,我怕在使用中如果某个用户操作启动了事务的话,如果操作失败的话要回滚事务,期间如果另外一个用户如果也进行一些操作,而且操作是正确的话,正确的操作是否也被一起回滚。这个没试过,所以想想还是不用application了,谢谢了!第一个问题还是没想清楚啊!
    如果如你所说"把recordset的游标设置, 设置为1或者2",如果我是update操作这样的操作就没有效了。
    这是ADO API参考上的说法For a Recordset-returning Command:Set recordset = command.Execute( RecordsAffected, Parameters, Options )
    For a non–recordset-returning Command:command.Execute RecordsAffected, Parameters, Options
    RecordsAffected 
    Optional. A Long variable to which the provider returns the number of records that the operation affected. The RecordsAffected parameter applies only for action queries or stored procedures. RecordsAffected does not return the number of records returned by a result-returning query or stored procedure. To obtain this information, use the RecordCount property. The Execute method will not return the correct information when used with adAsyncExecute, simply because when a command is executed asynchronously, the number of records affected may not yet be known at the time the method returns. RecordsAffected 应该是可以返回操作所影响的记录数的啊,但Javascript里不行,VBScript里却可以,不理解是为什么????
    等弄明白了一起给分。
      

  4.   

    1、应该不是我的程序有问题,我想也许是因为Javascript里函数的参数是传值而不是传址的原因。
    2、看了微软的例子
       conn.close();
       conn = null;
    3、我所指的全局变量不是Application那个,而是页面中定义在函数之外的变量。
    似乎它是会自动释放的,因为我做了测试,在一个页面中打开10个Connection对象,并且不关闭它们,然后使用"Microsoft Application Center Test"这个工具进行测试,模拟了100个浏览器持续3分钟的不断访问,内存的占用并不比关闭的使用得少。
    不知道是否我的测试是正确的。