不明楼主所说的是那个游标.
oracle没分server/client
在.net中,记录集一般默认是server,可以设成client,功能比较大

解决方案 »

  1.   

    我这边的环境是asp+oracle.
    碰到如下的错误,
    Microsoft Cursor Engine 错误 '80004005' 
    数据提供程序或其他服务返回 E_FAIL 状态。 请看下面链接的文章内容。说到要用server-side cursors。所以我就不明白如何解决。两者区别何在?
    http://support.microsoft.com/default.aspx?scid=kb;en-us;267455
      

  2.   

    是ado和odbc中的概念。
    ado的connection的cursorlocation分server-side和client-side.
    区别在于:
    1 Server_side,获得数据不是一次全部传到客户端,比如查询出1000,一次只返回100条,就把控制权交给你的应用程序,而服务器端应该有一个缓冲,等你recordset.movenext访问101的时候,在取100条,如此直到全部取道。Client-side,就是,有多少全部返回到客户端,才把控制权交给你的应用程序。这样,查询如果数据量很大的话,Server-side返回的速度快。但是movenext的时候,有时会慢。而client-side,前面慢,后来就不用担心。驱动程序会帮你做好之间的协调工作。
    2 上面说的,只是理论上的,但是,实际应用中,却并不相同,要仔细分析。你用的是asp开发,你首先考虑的是,internet上有大量的用户访问,你首先要解决的是如何协调资源,如果全部用server-side,服务器的资源会耗费在保持连接上,如果并发量大的话,资源很快就耗尽。
    3 所以,对于WEB的开发,首先需要建立一个Connection Pool,好在用ado,Microsoft为你做好了pool,不需要你自己开发代码,但是,条件是,你的程序必须立即释放资源。此时,应该用client-side.
    应该是这样的结构
    set cn=Server.CreateObject("adodb.connection")
    cn.open ...   '建立connection
    cn.cursorlocation=aduserlcient   '客户端
    set rs=Server.CreateObject("adodb.recordset")
    rs.open sql,cn,adopenstatic,adreadonly
    set rs.activeconnection=nothing   '释放连接资源
    cn.close
    ...后续处理代码以上代码指应付查询,是先释放资源,再处理结果。如果server-side,就做不到。但是,如果写数据库的代码,就不能这样了,到可以考虑用Server-side,因为,你再没有rs.update前是不能释放连接的。总之,原理就是这样,具体应用,看自己的需求。
      

  3.   

    你遇到的“数据提供程序或其他服务返回 E_FAIL 状态”,是驱动程序的问题,一般来说,不是所有数据库都能很好地兼容ado的server端的游标设置,那么,你别无选择,要么升级驱动程序,要么使用client-side.
      

  4.   

    client-side??
    我查MSDN网站,上面要求我用Server-side,
    http://support.microsoft.com/default.aspx?scid=kb;en-us;267455
      

  5.   

    对不起,我上面说的是对应于asp..NET下的ADO.NET本来就已经考虑的这点,而且我没有什么研究。
      

  6.   

    看Microsoft的说明,应该用Sever-side就没有问题了,你可以试一下,但是我认为,最好能支持client-side,因为,对于很多查询的页面,你应该能做到connection能很快地释放。
    还有,如果你用.NET开发的话,为什么不用oracle.net,Microsoft上可以下载的。