Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con Transacciones mySQL en VB.NET

Estas en el tema de Problema con Transacciones mySQL en VB.NET en el foro de .NET en Foros del Web. Buenas tardes !!! Verán, la cuestión es ke estoy haciendo un ejemplo para eliminar X filas de una tabla usando una transacción. Mi intención es ...
  #1 (permalink)  
Antiguo 10/05/2005, 15:39
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Problema con Transacciones mySQL en VB.NET

Buenas tardes !!!

Verán, la cuestión es ke estoy haciendo un ejemplo para eliminar X filas de una tabla usando una transacción.

Mi intención es ke si no se pueden eliminar todas las filas, pues ke no se elimine ninguna.

Para ello, estoy intentando eliminar tres filas, basándome en un capo numérico, en la tercera fila, estoy metiendo un texto, para ke falle. Aún asi, me elimina las dos primeras.

El código es el siguiente:





Dim objTransaccionMySQL As MySqlTransaction
Dim objCmdMySQL As MySqlCommand
Dim Cadena() As String = {111, 222, "ww2"}
Dim i As Integer = 0

objCnMySQL.Open()
objTransaccionMySQL = objCnMySQL.BeginTransaction()
objCmdMySQL = objCnMySQL.CreateCommand()
objCmdMySQL.Connection = objCnMySQL
objCmdMySQL.Transaction = objTransaccionMySQL
Try
For i = 0 To Cadena.Length - 1
objCmdMySQL.CommandText = "delete from tusuarios where dni=" & Cadena(i)
objCmdMySQL.ExecuteNonQuery()
Next
objTransaccionMySQL.Commit()
Catch ex As Exception
MessageBox.Show(ex.Message)
objTransaccionMySQL.Rollback()
Finally
objCnMySQL.Close()
End Try

Por favor, ¿Alguien puede comentarme donde tengo el fallo?

Desde ya, muchas gracias por su atención.
__________________
Charlie.
  #2 (permalink)  
Antiguo 10/05/2005, 16:37
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Bueno a quien le interese, ya solucione el problema.

Resulta que las tablas, por defecto en MySQL se crean del tipo MyISAM, y para que una tabla acepte transacciones tiene ke ser del tipo innodb.

Para ello, al crear una tabla, hay que indicarle ke sea de tipo inndb.

create table ttabla(campos) type=innodb;

Espero que les sea útil. Saludos.
__________________
Charlie.
  #3 (permalink)  
Antiguo 30/10/2008, 19:20
Avatar de jorgelig  
Fecha de Ingreso: septiembre-2004
Ubicación: Chapis Data Center
Mensajes: 27
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Problema con Transacciones mySQL en VB.NET

Mi problema es que no ejecuta los querys, no marca ningun error; simplemente no hace nada. Mis Tablas en cuestion ya son InnoDB, incluso probe hacer la transaccion manualmente via consola y si funciono.

Utilizo este string de coneccion:

Código:
<add key="connStringGrabar" value="Server=miserver;Database=mibd;User id=usuario;Password=noteladigo;Pooling=false;Connection Lifetime=1; Max Pool Size=1" />
Utilizo esta funcion:
Código:
        Public Function EjecutaTrans(ByVal sentencias As ArrayList) As Boolean

            Dim hecho As Boolean = False

            Dim myConnection As New MySqlConnection
            myConnection.ConnectionString = cstrCadenaConexion
            myConnection.Open()

            Dim myCommand As MySqlCommand = myConnection.CreateCommand()
            Dim myTrans As MySqlTransaction

            ' Inicia transacción local.
            myTrans = myConnection.BeginTransaction()
            ' Must assign both transaction object and connection
            ' to Command object for a pending local transaction
            myCommand.Connection = myConnection
            myCommand.Transaction = myTrans

            Try
                Dim sentencia As String
                For Each sentencia In sentencias
                    myCommand.CommandText = sentencia
                    myCommand.ExecuteNonQuery()
                Next
                myTrans.Commit()
                hecho = True
            Catch e As Exception
                e.ToString()
                Try
                    myTrans.Rollback()
                Catch ex As MySqlException
                    If Not myTrans.Connection Is Nothing Then
                        Console.WriteLine("An exception of type " + ex.GetType().ToString() + _
                        " was encountered while attempting to roll back the transaction.")
                    End If
                    ex.ToString()
                End Try

                Console.WriteLine("An exception of type " + e.GetType().ToString() + _
                "was encountered while inserting the data.")
                Console.WriteLine("Neither record was written to database.")
            Finally
                myConnection.Close()
            End Try
            Return hecho
        End Function
Y la utilizo desde este metodo:
Código:
    Public Function Agregar() As String
      Dim ent As New ConsultasGenerales
      Dim dr As MySqlDataReader
            Dim objABCTablasSQL As New Normay.ElArco.Source.DataBase.ABCTablasSQL
            Dim transacciones As New ArrayList
            Dim strSQL As String = "INSERT INTO Traspaso (id_almacen_origen,id_almacen_destino,fecha,observaciones,id_empleado,entrego,costo) VALUES (" & _
          Me.intId_almacenorigen & "," & Me.intId_almacendestino & ",'" & Me.strFecha & "','" & _
          Me.strObservacionesGenerales & "','" & Me.strId_empleado & "','" & Me.strEntrego & "'," & Me.sngcosto & ");"
            Try
                transacciones.Add(strSQL)
                strSQL = ""
                Dim i As Integer
                strSQL = "INSERT INTO TraspasoProducto (id_traspaso,id_producto,cantidad,costo) VALUES "
                For i = 1 To colid_Productos.Count
                    If i < colid_Productos.Count Then
                        strSQL = [String].Concat(strSQL, "((SELECT MAX(id_traspaso) FROM Traspaso),'" & colid_Productos(i) & "'," & Me.colCantidades(i) & "," & Me.colcosto(i) & "),")
                    Else
                        strSQL = [String].Concat(strSQL, "((SELECT MAX(id_traspaso) FROM Traspaso),'" & colid_Productos(i) & "'," & Me.colCantidades(i) & "," & Me.colcosto(i) & ");")
                    End If
                    transacciones.Add(Actualiza(Me.intId_almacenorigen, Me.colCantidades(i), Me.colid_Productos(i), False))
                    transacciones.Add(Actualiza(Me.intId_almacendestino, Me.colCantidades(i), Me.colid_Productos(i), True))
                Next
                Try
                    transacciones.Add(strSQL)
                    objABCTablasSQL.EjecutaTrans(transacciones)
                Catch ex As Exception
                End Try
                Agregar = "¡El Traspaso fue registrado exitosamente!"
            Catch sqlExc As Exception
                Agregar = "¡Ocurrió un error al registrar el Traspaso! " & sqlExc.ToString
            End Try
    End Function
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:40.