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

Trabajar con transacciones en VB.NET 2010

Estas en el tema de Trabajar con transacciones en VB.NET 2010 en el foro de .NET en Foros del Web. Buenas Estoy realizando un pequeño sistema en vb.net 2010 y me recomendaron trabajar con transacciones al momento de insertar registros a la BD, ya que ...
  #1 (permalink)  
Antiguo 06/12/2012, 08:14
 
Fecha de Ingreso: noviembre-2012
Ubicación: caracas
Mensajes: 53
Antigüedad: 11 años, 5 meses
Puntos: 0
Trabajar con transacciones en VB.NET 2010

Buenas

Estoy realizando un pequeño sistema en vb.net 2010 y me recomendaron trabajar con transacciones al momento de insertar registros a la BD, ya que estoy trabajando con un Datagrid que me importa los registros desde excel y luego me los guarda en la BD a traves de un boton... Actualmente si le doy al boton guardar y hay algun campo clave repetido me da el error pero igual almacena los registros anteriores al campo clave repetido... lo que quiero es que no se guarden los registros si hay cualquier tipo de error durante el almacenamiento...

Ahora les coloco el codigo de como estoy trabajando con las transacciones las cuales no me esta dando resultado ya que igual almacena los registros si hay error.

Código:
Imports System.Data.OleDb 'Importacion necesaria para trabajar con ficheros excel

Public Class frmInclusiondiario
    Dim myTrans As MySqlTransaction

    'EVENTO CLICK DEL BOTON XLS
    Private Sub btnXLS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnXLS.Click
        'Instanciamos nuestro cuadro de dialogo
        Dim openFileDialog1 As New OpenFileDialog
        'Directorio Predeterminado
        openFileDialog1.InitialDirectory = "C:\"
        'Filtramos solo archivos con extension *.xls
        openFileDialog1.Filter = "Archivos de Microsoft Office Excel (*.xls)|*.xls"
        'Si se presiona abrir entonces...
        If openFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
            'Asignamos la ruta donde se almacena el fichero excel que se va a importar
            txtRutaXLS.Text = openFileDialog1.FileName

            'Instanciamos nuestra cadena de conexion especial para excel,indicando la ruta del fichero
            Dim cadconex As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Me.txtRutaXLS.Text.Trim & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
            Dim cn As New OleDb.OleDbConnection(cadconex)
            Dim cmd As New OleDbCommand
            Dim da As New OleDb.OleDbDataAdapter
            Dim dt As New DataTable

            cmd.Connection = cn
            'Consultamos la hoja llamada Sheet de nuestro archivo *.xls

            cmd.CommandText = "select * from [Sheet1$]"
            cmd.CommandType = CommandType.Text
            da.SelectCommand = cmd
            'Llenamos el datatable
            da.Fill(dt)
            'Llenamos el Datagridview
            dgvImportacion.DataSource = dt
            'Ajustamos las columnas del DataGridView
            dgvImportacion.AutoSizeColumnsMode = 6
        End If
    End Sub
    Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        Me.Visible = False
        Me.Dispose()
        frmMenu.Show()
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        Dim cn As New MySqlConnection(frmConexion.ConexionMySQL)
        cn.Open()
        Try
            myTrans = cn.BeginTransaction()

            Dim sqli As String = "INSERT INTO operaciones (no,campo1, campo2,campo3) VALUES (@no,@campo1,@campo2,@campo3)"

            Dim cmd As New MySqlCommand(sqli, cn)
            Dim no As Integer = 0
            'Recorremos el Datagridview
            For Each fila As DataGridViewRow In dgvImportacion.Rows
                cmd.Parameters.Clear()
                no += 1
                'Dependiendo del Datagrid se colocan las filas
                cmd.Parameters.AddWithValue("@no", no)
                cmd.Parameters.AddWithValue("@campo1", fila.Cells(0).Value)
                cmd.Parameters.AddWithValue("@campo2", fila.Cells(2).Value)
                cmd.Parameters.AddWithValue("@campo3", fila.Cells(3).Value)

                'Ejecutar instruccion sql Insert
                cmd.ExecuteNonQuery()
                myTrans.Commit()

            Next
            MessageBox.Show("Registros Ingresados con Exito...")

        Catch ex As Exception
            myTrans.Rollback()
            'Anunciamos el error si lo hay
            MsgBox(ex.Message.ToString)
            MsgBox("No se pudo cargar a la base de datos")
            cn.Close()
        End Try

    End Sub

End Class
  #2 (permalink)  
Antiguo 06/12/2012, 09:45
 
Fecha de Ingreso: noviembre-2012
Ubicación: caracas
Mensajes: 53
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Trabajar con transacciones en VB.NET 2010

Código:
Imports System.Data.OleDb 'Importacion necesaria para trabajar con ficheros excel

Public Class frmInclusionantiguaop
    Dim myTrans As MySqlTransaction

    'EVENTO CLICK DEL BOTON XLSX
    Private Sub btnXLS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnXLSX.Click
        'Instanciamos nuestro cuadro de dialogo
        Dim openFileDialog1 As New OpenFileDialog
        'Directorio Predeterminado
        openFileDialog1.InitialDirectory = "C:\"
        'Filtramos solo archivos con extension *.xlsx
        openFileDialog1.Filter = "Archivos de Microsoft Office Excel (*.xlsx)|*.xlsx"
        'Si se presiona abrir entonces...
        If openFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
            'Asignamos la ruta donde se almacena el fichero excel que se va a importar
            txtRutaXLS.Text = openFileDialog1.FileName

            'Instanciamos nuestra cadena de conexion especial para excel,indicando la ruta del fichero
            Dim cadconex As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Me.txtRutaXLS.Text.Trim & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"""
            Dim cn As New OleDb.OleDbConnection(cadconex)
            Dim cmd As New OleDbCommand
            Dim da As New OleDb.OleDbDataAdapter
            Dim dt As New DataTable

            cmd.Connection = cn
            'Consultamos la hoja llamada GENERAL$ de nuestro archivo *.xlsx
            cmd.CommandText = "select * from [GENERAL$]"
            cmd.CommandType = CommandType.Text
            da.SelectCommand = cmd
            'Llenamos el datatable
            da.Fill(dt)
            'Llenamos el Datagridview
            dgvImportacion.DataSource = dt
            'Ajustamos las columnas del DataGridView
            dgvImportacion.AutoSizeColumnsMode = 6
        End If
    End Sub
    Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        Me.Visible = False
        Me.Dispose()
        frmMenu.Show()
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        Dim cn As New MySqlConnection(frmConexion.ConexionMySQL)
        cn.Open()

        Try
            myTrans = cn.BeginTransaction()

            Dim sqli As String = "INSERT INTO operaciones (no,campo1, campo2,campo3) VALUES (@no,@campo1,@campo2,@campo3)"

            'Recorremos el Datagridview
            For Each fila As DataGridViewRow In dgvImportacion.Rows

                'Dependiendo del Datagrid se colocan las filas
                Dim cmd As New MySqlCommand(sqli, cn)
                cmd.Transaction = myTrans
                cmd.Parameters.AddWithValue("@no", fila.Cells(1).Value)
                cmd.Parameters.AddWithValue("@campo1", fila.Cells(2).Value)
                cmd.Parameters.AddWithValue("@campo2", fila.Cells(3).Value)
                cmd.Parameters.AddWithValue("@campo3", fila.Cells(4).Value)
                

                'Ejecutar instruccion sql Insert
                cmd.ExecuteNonQuery()

                myTrans.Commit()
            Next
            MessageBox.Show("Registros Ingresados con Exito...")

        Catch ex As Exception
            myTrans.Rollback()
            'Anunciamos el error si lo hay
            MsgBox(ex.Message.ToString)
            MsgBox("no se pudo cargar a la base de datos")
        End Try
        cn.Close()
    End Sub
End Class
Ahora lo tengo asi pero en el mytrans.Rollback me tira el siguiente error No se controlo InvalidOperationException

AYUDA POR FAVOR

Última edición por heruxz; 06/12/2012 a las 09:54

Etiquetas: net, sql, transacciones, vb, windows
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 03:28.