本人在开发MTS组件,并应用于C/S,B/S结构中,由于开发的组件是对数据库进行访问和操作的,讲直观一点就是当多个用户同时提交事务时(并发事务),怎样使事务序列化,保证数据的一致性?

解决方案 »

  1.   

    我是用存储过程,但是还是不能解决事务序列化问题。我在书上找到用
    CREATE PROCEDURE bUpt1
       
       @iSum int,
     @ID int output

    AS
    set transaction isolation level serializable 
    begin  transaction
    ......
    可是还是当几百个用户同时提交事务要向同一张表中插入数据行时,会发生数据丢失。
      

  2.   

    不会吧,存储过程也会这样吗,
    你可以考虑在Server端做一个堆栈,也就不会出现同时问题了
      

  3.   

    利用set transaction isolation level serializable好像可以解决问题,已开始我的程序有漏洞。它使并发事务序列化,只是速度很慢。不管了,能解决问题就行。 
      

  4.   

    遇到同样的问题,可以说是一模一样。
    也是MTS提交事务时,出现并发问题。
    强烈关注。
      

  5.   

    建议进行事务提交微软的事务处理服务器(Microsoft Transaction Server,MTS)和COM+都能够管理跨多个数据库的数据库事务处理。事务处理可以被定义为完成一项工作里某个单元所需要的一系列操作。事务处理模式是为参与事务处理的每个对象而设置的。它用来告知MTS对象所做出的更改是否应该被忽略。  当事务处理创建新对象的时候,MTS它会查看两个信息源来确定事务处理的模式。首先,它要确定对象的创建者是否正在另一个已经存在的事务处理里运行。其次,它要检查对象的事务处理模式。事务处理的模式能够通过VB6里的MTSTransactionMode属性来指定。这个属性位于类模块的属性表里。只有当项目是一个ActiveX DLL,而且类的实例(Instancing)属性(也在属性表里)不是私有(Private)的时候,它才可以被使用。MTSTransactionMode属性可能的值有:0-NotAnMTSObject——对象无法识别MTS或者事务处理,而且不参与其中。 
    1-NoTransactions——对象无法在事务处理模式里执行,即使它是由参与事务处理的某个对象调用的。 
    2-RequiresTransaction——对象必须在事务处理里运行。如果对象的创建者有事务处理,那么对象就要在其创建者的事务处理里运行。如果情况不是如此,那么就会为对象创建一个事务处理。 
    3-UsesTransaction——对象需要或者不需要事务处理都可以运行。如果对象的创建者在事务处理里运行,那么对象就会被放在事务处理里。如果其创建者不是在事务处理里运行,那么它也不会创建一个。 
    4-RequiresNewTransaction——对象需要在新的事务处理里运行。对象总是在一个新的事务处理里运行,而不管创建它的对象是否运行在某个事物对象里。 
    正确使用MTS的事务处理能够让多个对象将数据保存到一个数据库或者多个数据库里,并执行或者返回所有的更改。
      

  6.   

    请问:chenkangli(编程浪子) ( ) 信誉:78 像我们现在做的客户端创建的对象通过MTS调用,
    在数据保存时进行事务处理,
    我们应该用MTSTransactionMode属性的具体的哪个?现在我们这个问题很头痛,
    每个月的单据都有几十张是相同的。
    而且大多情况出现在:
    部分挂起、崩溃时。很头痛啊………………………………
      

  7.   

    系统默认的类模块 MTSTransactionMode属性好象是:
    3-UsesTransaction我看了一下我们系统的中间件,
    也都是3,帮我分析一下原因,谢谢。