none
Update de TableAdapter en una Transaction. RRS feed

  • Pregunta

  • Sucede que a la hora de guardar unos registros Maestro-Detalle lo que mas se adapta a lo que quiero hacer es lo siguiente: https://msdn.microsoft.com/en-us/library/xzb1zw3x.aspx

    Ahora, ¿Cómo puedo hacer eso con Transacciones para usar bloqueos de algunos registros y en caso de presentarse algún error ejecutar su respectivo Rollback??.

    O si conocen una mejor forma de hacerlo y controlarlo que con DataAdapter.Update y Transaction.Rollback también seria de mucha ayuda.


    • Editado Green Bean viernes, 11 de marzo de 2016 18:44
    viernes, 11 de marzo de 2016 0:23

Respuestas

  • Hay dos formas de hacerlo: con un TransactionScope y con un SqlTransaction.

    Suponiendo que estás usando el método Update de un DataAdapter (y si usas un TableAdapter, recuerda que en realidad dentro contiene un DataAdapter), entonces fíjate en dónde estás construyendo el DataAdapter y en que por dentro encapsula varios objetos Command que a su vez encapsulan un Connection (en todo lo anterior, aplícales a los nombres de clase el prefijo oportuno según el proveedor que uses, por ejemplo, si utilizas el SqlClient entonces las clases son SqlDataAdapter, SqlCommand y SqlConnection). Bien, pues ese Connection es el que tienes que usar para controlar la transacción. El objeto Connection tiene una método BeginTransaction al que tienes que llamar después de hacer el Open y antes de hacer el Update del DataAdapter. Ese BeginTransaction devuelve un objeto Transaction (con su prefijo), que a su vez tiene un método Commit y un Rollback, a los que tendrás que llamar según proceda una vez que terminen tus operaciones de grabación.

    • Marcado como respuesta Green Bean viernes, 11 de marzo de 2016 18:39
    viernes, 11 de marzo de 2016 7:21

Todas las respuestas

  • Hay dos formas de hacerlo: con un TransactionScope y con un SqlTransaction.

    Suponiendo que estás usando el método Update de un DataAdapter (y si usas un TableAdapter, recuerda que en realidad dentro contiene un DataAdapter), entonces fíjate en dónde estás construyendo el DataAdapter y en que por dentro encapsula varios objetos Command que a su vez encapsulan un Connection (en todo lo anterior, aplícales a los nombres de clase el prefijo oportuno según el proveedor que uses, por ejemplo, si utilizas el SqlClient entonces las clases son SqlDataAdapter, SqlCommand y SqlConnection). Bien, pues ese Connection es el que tienes que usar para controlar la transacción. El objeto Connection tiene una método BeginTransaction al que tienes que llamar después de hacer el Open y antes de hacer el Update del DataAdapter. Ese BeginTransaction devuelve un objeto Transaction (con su prefijo), que a su vez tiene un método Commit y un Rollback, a los que tendrás que llamar según proceda una vez que terminen tus operaciones de grabación.

    • Marcado como respuesta Green Bean viernes, 11 de marzo de 2016 18:39
    viernes, 11 de marzo de 2016 7:21
  • Listo! había pasado por alto el adapter (y sus propiedades) del TableAdapter.

    Gracias por la respuesta! (Y)

    viernes, 11 de marzo de 2016 18:43