Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/12/2012, 08:14
heruxz
 
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