luckysusan(海闊天空) :你的意思是要我在执行a.Save2DB的时候不关闭连接,在执行完b.Save2DB再关闭,是这样吗?
但是这样我觉得有很大的安全隐患,而且也破坏了模块的独立性

解决方案 »

  1.   

    采用适配器操作SqlDataAdapter是可以的.
      

  2.   

    象你这样的操作应该把它封装在业务规则中。
    共用一个连接。
    开始事务
    a.Save2DB
    b.Save2DB
    结束事务
      

  3.   


    in class A:
    adp.SelectedCommand=new SqlCommand("getdata1",new SqlConnection(CONNECTSTRING));
    ...
    in class B:
    adp.SelectedCommand=new SqlCommand("getdata2",new SqlConnection(CONNECTSTRING));
    ...
    经过实例化以后两者不会产生相互影响
      

  4.   

    echeng192(阿飞):
    你的方法是
                Dim conn As SqlConnection
                Dim Transaction As SqlTransaction
                conn = New SqlConnection(Common.GetConnectionString)
                Transaction = conn.BeginTransaction            Dim a As A = New A(conn)
                Dim b As B = New B(conn)
                Try
                    a.Save2DB()
                    b.Save2DB()
                    Transaction.Commit()
                Catch
                    Transaction.Rollback()
                Finally
                    conn.Close()
                    conn.Dispose()
                End Try这样可以吗?
      

  5.   

    wacle([Smile!]):
    你的方法里A和B都是New出来的,这样岂不是等于两个连接,如果是两个连接的话,怎么用事物处理呢?
    我理解你的方法对吗?
      

  6.   

    我现在的理解是,只能在A,B产生一个新的实例之前用一外部连接来初始化,或者在A和B的Save2DB方法中设置一个连接参数,然后在外部设置这个连接,然后在对这个外部连接用事物;有没有可能在内部实现呢?
      

  7.   

    oh,sorry,i can't see clear.if you want to use transaction ,you must share only one connection.