transaccion

22/03/2007 - 20:17 por Hugo Gsell | Informe spam
Trabajo con vb.net 2005 y sqlserver 2000.
Tengo un esquema de trabajo con base de datos de SOLO OPERAR A TRAVES DE
PROCEDIMIENTOS ALMACENADOS... cada uno devuelve un nro de error (o cero si
no ocurre error) utilizando la variable @@error de sqlserver.
Como puedo desde mi capa de datos ejecutar una transcacción... donde cada
PASO de la transacción será la llamada a un procedimiento almacenado.
Abajo muestro un código sacado de ELGUILLE pero que envía directamente
operaciones update (que podrian ser insert u otras)... pero no tengo
privilegios sobre la base (tablas) para estas operaciones... solo a traves
de storedprocedures
Es decir, ¿puedo utilizar el mísmo código? recordando que en mi caso es
cmd.CommandType = CommandType.StoredProcedure



HUGO A. GSELL
Sgo del Estero
Argentina


Public Sub Transferir(ByVal strCadenaConexion As String)
' Apertura de la conexión
Dim Conexion As New SqlConnection(strCadenaConexion)
Conexion.Open()

Dim Commando As New SqlCommand
Dim Transaccion As SqlTransaction

' Inicio de la transaccion
Transaccion = Conexion.BeginTransaction()

Commando.Connection = Conexion
Commando.Transaction = Transaccion

Try
' Comando para descontar $100 de la Cuenta A
Commando.CommandText = "Update into Cuentas Set Saldo = Saldo - 100
Where Cuenta = 'CuentaA'"
Commando.ExecuteNonQuery()

' Comando para aumentar $100 de la Cuenta B
Commando.CommandText = "Update into Cuentas Set Saldo = Saldo + 100
Where Cuenta = 'CuentaB'"
Commando.ExecuteNonQuery()

' Finalización exitosa de la transacción
Transaccion.Commit()
Console.WriteLine("El Dinero fue transferido con éxito")
Catch e As Exception
' Cancela toda la transacción
Transaccion.Rollback()
Console.WriteLine(("Se produjo un error al procesar la
transferencia" + vbNewLine + "Detalle:" + vbNewLine + e.ToString()))
Finally
Conexion.Close()
End Try
End Sub
 

Leer las respuestas

#1 Pablo Rodríguez
23/03/2007 - 15:43 | Informe spam
Yo también estoy buscando info acerca del uso de transacciones, pero mi duda
es si puedo hacer algo así:

1) Inicializo Transacción
2) Mando guardar los cambios de varias tablas contenidas en un DataSet
3) Si hay error hago RollBack

Como no he trabajado con transacciones en .net me cuesta por ahora hacer
esto.


Saludos!

__________
"Hugo Gsell" escribió en el mensaje
news:
Trabajo con vb.net 2005 y sqlserver 2000.
Tengo un esquema de trabajo con base de datos de SOLO OPERAR A TRAVES DE
PROCEDIMIENTOS ALMACENADOS... cada uno devuelve un nro de error (o cero si
no ocurre error) utilizando la variable @@error de sqlserver.
Como puedo desde mi capa de datos ejecutar una transcacción... donde cada
PASO de la transacción será la llamada a un procedimiento almacenado.
Abajo muestro un código sacado de ELGUILLE pero que envía directamente
operaciones update (que podrian ser insert u otras)... pero no tengo
privilegios sobre la base (tablas) para estas operaciones... solo a traves
de storedprocedures
Es decir, ¿puedo utilizar el mísmo código? recordando que en mi caso es
cmd.CommandType = CommandType.StoredProcedure



HUGO A. GSELL
Sgo del Estero
Argentina


Public Sub Transferir(ByVal strCadenaConexion As String)
' Apertura de la conexión
Dim Conexion As New SqlConnection(strCadenaConexion)
Conexion.Open()

Dim Commando As New SqlCommand
Dim Transaccion As SqlTransaction

' Inicio de la transaccion
Transaccion = Conexion.BeginTransaction()

Commando.Connection = Conexion
Commando.Transaction = Transaccion

Try
' Comando para descontar $100 de la Cuenta A
Commando.CommandText = "Update into Cuentas Set Saldo = Saldo -
100 Where Cuenta = 'CuentaA'"
Commando.ExecuteNonQuery()

' Comando para aumentar $100 de la Cuenta B
Commando.CommandText = "Update into Cuentas Set Saldo = Saldo +
100 Where Cuenta = 'CuentaB'"
Commando.ExecuteNonQuery()

' Finalización exitosa de la transacción
Transaccion.Commit()
Console.WriteLine("El Dinero fue transferido con éxito")
Catch e As Exception
' Cancela toda la transacción
Transaccion.Rollback()
Console.WriteLine(("Se produjo un error al procesar la
transferencia" + vbNewLine + "Detalle:" + vbNewLine + e.ToString()))
Finally
Conexion.Close()
End Try
End Sub

Preguntas similares