TableAdapters y Transactions

21/02/2007 - 08:27 por Carmelo J. Morales Muñoz | Informe spam
¡HOla!

¿Alguien sabe como se pueden usar transacciones con la nueva forma de
trabajar que propone microsoft?. Los tableAdapters.

gracias!

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
21/02/2007 - 12:55 | Informe spam
Carmelo,

Creo que para eso está la propiedad Connection del TableAdapter:

SqlTransaction tr = paisesTableAdapter.Connection.BeginTransaction();

try

{

paisesTableAdapter.Update(LinqDataSet.Paises);

tr.Commit();

}

catch (Exception x)

{

tr.Rollback();

throw x;

}


Usa tu DataSet y tu TableAdapter en lugar de los míos :-)

Slds - Octavio



"Carmelo J. Morales Muñoz" escribió en el mensaje
news:
¡HOla!

¿Alguien sabe como se pueden usar transacciones con la nueva forma de
trabajar que propone microsoft?. Los tableAdapters.

gracias!

Respuesta Responder a este mensaje
#2 Carmelo J. Morales Muñoz
21/02/2007 - 13:49 | Informe spam
Hola1


Eso ya lo probé,,,, y ciertamente me da un error que no se por donde
cogerlo.


ExecuteNonQuery requiere que el comando tenga una transacción cuando la
conexión asignada al mismo está en una transacción local pendiente. No se ha
inicializado la propiedad Transaction del comando.
"Octavio Hernandez"


Te pongo mi código:

// preparo un objeto TableAdapter para manejar el cliente
CapaDatos.DataSetClientesTableAdapters.CLIENTESTableAdapter cliente
new CapaDatos.DataSetClientesTableAdapters.CLIENTESTableAdapter();



// Preparo la conexión., le paso la cadena de autenticación windows
completa.

cliente.Connection.ConnectionString =Settings.Default.ServidorBaseDatos;

// Abro conexion, de lo contrario no puedo iniciar transaccion

cliente.Connection.Open();


// Creo un objeto transaccion

SqlTransaction tr = cliente.Connection.BeginTransaction();

try

{

bool? ResultadoOK = false;

string msjSalida = "";

// falla al llamar al metodo que solamente verifica si un cliente existe

cliente.ExisteCodigo(1, ref ResultadoOK, ref msjSalida);

tr.Rollback();

}

catch

{

}



¿alguna idea?. Porque debería ser mas fácil que utilizando Sqlcommand o
SqlDataAdapters pero no consigo entender como ha de hacerse.



gracias!
Respuesta Responder a este mensaje
#3 Octavio Hernandez
21/02/2007 - 14:20 | Informe spam
Carmelo,

Ya caigo!
Me imagino q lo han hecho así para obligarnos a usar el nuevo modelo de
transaccinoes de .NET 2.
Prueba lo siguiente:

- agregar referencia a System.Transactions;
- using System.Transactions;
- el siguiente código:

using (TransactionScope ts = new TransactionScope())

{

paisesTableAdapter.Update(LinqDataSet.Paises);

ts.Complete();

}


¿Más sencillo, no?

Slds - Octavio



"Carmelo J. Morales Muñoz" escribió en el mensaje
news:
Hola1


Eso ya lo probé,,,, y ciertamente me da un error que no se por donde
cogerlo.


ExecuteNonQuery requiere que el comando tenga una transacción cuando la
conexión asignada al mismo está en una transacción local pendiente. No se
ha inicializado la propiedad Transaction del comando.
"Octavio Hernandez"


Te pongo mi código:

// preparo un objeto TableAdapter para manejar el cliente
CapaDatos.DataSetClientesTableAdapters.CLIENTESTableAdapter cliente >
new CapaDatos.DataSetClientesTableAdapters.CLIENTESTableAdapter();



// Preparo la conexión., le paso la cadena de autenticación windows
completa.

cliente.Connection.ConnectionString =Settings.Default.ServidorBaseDatos;

// Abro conexion, de lo contrario no puedo iniciar transaccion

cliente.Connection.Open();


// Creo un objeto transaccion

SqlTransaction tr = cliente.Connection.BeginTransaction();

try

{

bool? ResultadoOK = false;

string msjSalida = "";

// falla al llamar al metodo que solamente verifica si un cliente existe

cliente.ExisteCodigo(1, ref ResultadoOK, ref msjSalida);

tr.Rollback();

}

catch

{

}



¿alguna idea?. Porque debería ser mas fácil que utilizando Sqlcommand o
SqlDataAdapters pero no consigo entender como ha de hacerse.



gracias!


Respuesta Responder a este mensaje
#4 Carmelo J. Morales Muñoz
21/02/2007 - 14:45 | Informe spam
Nuevamente muchas gracias octavio!


Parece que en principio funciona (no da error de ejecución), ahora voy a
hacer pruebas y buscar en la ayuda todo sobre TransactionScope.

Porque por defecto no veo un commit o un rollback, pero supongo que con el
framework 2.0 habrán simplificado mas las operciones.

Nuevamente muchas gracias, esto me tenía desesperado!
Respuesta Responder a este mensaje
#5 Octavio Hernandez
21/02/2007 - 14:46 | Informe spam
Carmelo,

- El "Complete()" implica un Commit.
- Si se sale del ámbito del using sin hacer un Complete(), la trans se
deshace (Rollback).
- Lo interesante es q hagas un Update en el que haya varias actualizaciones
y una de ellas esté mal, para comprobar q funciona transaccinoalmente.

Slds - Octavio



"Carmelo J. Morales Muñoz" escribió en el mensaje
news:
Nuevamente muchas gracias octavio!


Parece que en principio funciona (no da error de ejecución), ahora voy a
hacer pruebas y buscar en la ayuda todo sobre TransactionScope.

Porque por defecto no veo un commit o un rollback, pero supongo que con el
framework 2.0 habrán simplificado mas las operciones.

Nuevamente muchas gracias, esto me tenía desesperado!

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida