各位大侠:
  小弟在写ASP+VB+SQL Server 2k的三层结构网站,从ASP中调用VB COM+组件(组件中设置Transaction为Required),然后向SQL Server 2K中读写数据。  问题是这样的:在页面上我打开了三个组件(每个的Transaction都为Required,我们假设这三个组件为Class1、Class2、Class3),调用这三个组件的4个方法,都是访问同一个数据库,Class1.Method1和Class2.Method1访问同一个表,其它都访问不同的表,顺序为:1. Class1.Method1
2. Class1.Method2
3. Class2.Method1
4. Class3.Method1  前面两个非常正常,到底三个Class2.Method1的时候,先打开了一个connection,然后select,然后objConn.Close,然后set objConn=nothing,就是这个objConn=nothing巨慢,需要超过30秒的时间才能完成,很是郁闷!  还有,Class2.Method1在数据库中生成了2个进程,然后由两个Shared Locks锁住了同一个表(我单步跟踪到这里发现的)。更是郁闷。  各位高手、大侠、兄弟姐妹、父老乡亲,望各位多支持支持,看看有什么解决的办法,然后给小弟我提个醒,在此谢谢了!  对了,一般的数据库访问原则小弟还是了解的,比如objContext到最后要setAbort或者setComplete,所以这些比较小的问题就可以不用考虑了。我想最有可能是数据库锁的问题,要不就是connection pooling的问题,但是对这两块我都不太懂!唉!望各位多多提意见。谢谢!

解决方案 »

  1.   

    检查一下你的游标类型建议认真阅读下面这个帖子:
    http://jinesc.6600.org/myweb/disp.asp?idd=44&room=1010同时参考:
    http://tutorial.huacool.com/article.php?articleid=117
      

  2.   

    当设置游标为客户端游标,游标类型会自动变成静态游标,无论你设置成什么。因为客户端游标只支持静态游标。当这种游标打开后,服务器端所有的锁都释放了,连tempdb中都没有锁。
      

  3.   

    connection pooling的问题?
    如果驱动程序支持连接池,请确认在数据驱动程序中允许连接池的选项已经打开。
    另外还需要设置连接在不活动之后保留多长时间,以便提高性能
      

  4.   

    如果使用了COM+的手工事务
    组件中的选项请设置
    mtstransactionmode属性设置为2-requirestransaction
      

  5.   

    改一下mtstransactionmode属性试一下,没理由的啊!
      

  6.   

    谢谢各位技术巨头在这里花费时间为效地指点迷津,特别感谢:online(龙卷风(白学了,重新充电中)),来,看看名字,呵呵,我是JimOnline,你是Online,有缘有缘!  我明天在在实际项目中试一下,会用客户端的游标,看看结果,其实我描述的情况是简化了的情况,实际的项目中还更复杂一些,还有一个Transaction被设置为Not Supported的类参与这个过程,而且前后两次读写了同一个表,还有,所有的参与同一个表的读写的类中的方法都是对同一条记录进行操作。反正头大得要死。  另外,能不能请各位高手推荐几个联接或什么文章,描述DTC, COM+, ADO, SQL Server之间的联系和交互步骤的,或者那位大侠有空写一点这方面的东西,给大家参考参考,或者系统地说一下这些内容。比如:在ADO中设置不同的游标和结合不同的锁定方式,在SQL Server中会产生什么样的锁定,这些方面知识多多益善!  各位大侠也可以在这片帖子中讨论,然后我来归纳、整理,争取给大家网友在这些方面弄出个FAQ、Best Practices这样的东西,为了我国的公益事业出点力。  再次谢谢各位!
      

  7.   

    各位大侠,不行啊,把油标设置为adUseClient也不行,而且共享锁没有马上释放?set objConnection = nothing依然巨慢。我怀疑是不是整个这些处理在一个由COM+控制的事务里面啊?不懂!能在帮忙出出点子吗?  你们有没有遇到这样的情况?
      

  8.   

    http://www.microsoft.com/china/msdn/library/techart/complus.asp