none
SqlTransaction con 3 DataSet

    Pregunta

  • Hola a todos, y gracias por consultar mi duda.

    Me gustaría saber si puedo hacer un update a 3 tablas mediante un commandbuilder usando transacciones.

    Este código con solo 1 DataSet me funciona  pero no sé como se asocia la misma transaccion a los 3. Quiero que el Transaccion.Commit() se ejecute solo si los updates de las 3 tablas no generan ningún error.

    El código que tengo es el siguiente 


    Dim Transaccion As SqlTransaction = Nothing
    Dim UpadteBBDD As SqlCommandBuilder = Nothing

                                    Try
                                        Transaccion = Conexion_BBDD.BeginTransaction()

                                        UpadteBBDD = New SqlCommandBuilder(DARobotCab)
                                        UpadteBBDD.GetUpdateCommand()

                                        UpadteBBDD.GetUpdateCommand.Transaction = Transaccion
                                        UpadteBBDD.GetInsertCommand.Transaction = Transaccion
                                        UpadteBBDD.GetDeleteCommand.Transaction = Transaccion
                                        DARobotCab.Update(DSRobotCab, "Tabla1")


                                        UpadteBBDD = New SqlCommandBuilder(DARobotLin)
                                        UpadteBBDD.GetUpdateCommand()

                                        UpadteBBDD.GetUpdateCommand.Transaction = Transaccion
                                        UpadteBBDD.GetInsertCommand.Transaction = Transaccion
                                        UpadteBBDD.GetDeleteCommand.Transaction = Transaccion
                                        DARobotLin.Update(DSRobotLin, "Tabla2")

                                        UpadteBBDD = New SqlCommandBuilder(DALin)
                                        UpadteBBDD.GetUpdateCommand()

                                        UpadteBBDD.GetUpdateCommand.Transaction = Transaccion
                                        UpadteBBDD.GetInsertCommand.Transaction = Transaccion
                                        UpadteBBDD.GetDeleteCommand.Transaction = Transaccion
                                        DALin.Update(DSLin, "Tabla3")

                                        Transaccion.Commit()

                                    Catch Err As Exception
                                        MsgBox(Err.Message, MsgBoxStyle.OkOnly, "ErrorUpdate")
                                        ' Roll back the transaction.
                                        Transaccion.Rollback()
                                    End Try

                                    Transaccion.Dispose()

    viernes, 21 de octubre de 2016 7:32

Respuestas

  • hola

    pero alli veo que usas el mismo UpadteBBDD varias veces, no hace falta asignarlo todo el tiempo, solo lo asignas la primera vez y si dentro del bloque de la transaccion lo usas para varios dataset no tienes que volver asignarlo porque el objeto commandbuilder es el mismo para todos

    lo que si no uses el mismo command builder para distintos dataadapter, crea instancias con distintos nombres

    Ademas no evaluaste usar el TransactionScope ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    viernes, 21 de octubre de 2016 11:09

Todas las respuestas

  • hola

    pero alli veo que usas el mismo UpadteBBDD varias veces, no hace falta asignarlo todo el tiempo, solo lo asignas la primera vez y si dentro del bloque de la transaccion lo usas para varios dataset no tienes que volver asignarlo porque el objeto commandbuilder es el mismo para todos

    lo que si no uses el mismo command builder para distintos dataadapter, crea instancias con distintos nombres

    Ademas no evaluaste usar el TransactionScope ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    viernes, 21 de octubre de 2016 11:09
  • He solucionado de otra forma gracias

    Diego Regueira

    miércoles, 9 de noviembre de 2016 17:36