Error al exportar a SQL Server desde DataGridView que muestra información de Access

Buenos dias/tardes/noches

Tengo el siguiente formulario en .vb

Imports System. Data
Imports System. Data. OleDb
Imports System. Data. SqlClient
Public Class Form1
    Dim Cadena As New OleDbConnection
    Dim conexion As SqlConnection = New SqlConnection("Data Source=LAFABELA-MX16\SQLEXPRESS; Initial Catalog=checadas; User ID=sa; Password=123456")
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            Cadena.ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=\\reloj-mx16\Datos\Checador.mdb"
            Cadena.Open()
            Mostrar()
            MsgBox("Conectado con la base de datos, Access", vbInformation, "AVISO")
        Catch ex As Exception
            MsgBox("No se pudo conectar a la base de datos", vbCritical, "AVISO")
        End Try
    End Sub
    Private Sub Mostrar()
        Dim oda As New OleDbDataAdapter
        Dim ods As New DataSet
        Dim consulta As String
        consulta = "Select * From tblChecada"
        oda = New OleDbDataAdapter(consulta, Cadena)
        ods.Tables.Add("tblChecada")
        oda.Fill(ods.Tables("tblChecada"))
        DataGridView1.DataSource = ods.Tables("tblChecada")
    End Sub

en el que muestro esto:

y después el siguiente código:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim agregar As SqlCommand = New SqlCommand("insert into tblChecada values (@emp, @Trabajador, @Fecha, @Checada, @TipoChecada, @FijarTipo, @Terminal)", conexion)
        conexion.Open()
        Dim fila As DataGridViewRow = New DataGridViewRow()
        Try
            For Each fila In DataGridView1.Rows
                Agregar. Parameters. Clear()
                Agregar. Parameters. AddWithValue("@Emp", Convert.ToString(fila. Cells("Column1"). Value))
                Agregar. Parameters. AddWithValue("@Trabajador", Convert.ToString(fila. Cells("Column2"). Value))
                Agregar. Parameters. AddWithValue("@Fecha", Convert.ToString(fila. Cells("Column3"). Value))
                Agregar. Parameters. AddWithValue("@Checada", Convert.ToString(fila. Cells("Column4"). Value))
                Agregar. Parameters. AddWithValue("@TipoChecada", Convert.ToString(fila. Cells("Column5"). Value))
                Agregar. Parameters. AddWithValue("@FijarTipo", Convert.ToString(fila. Cells("Column6"). Value))
                Agregar. Parameters. AddWithValue("@Terminal", Convert.ToString(fila. Cells("Column7"). Value))
                Agregar. ExecuteNonQuery()
            Next
            MessageBox.Show("DATOS EXPORTADOS CORRECTAMENTE A SQL")
        Catch ex As Exception
            MsgBox("ERROR AL EXPORTAR DATOS, REVISAR CON EL DPTO DE IT SUPPORT", vbCritical, "AVISO")
        Finally
            conexion.Close()
        End Try
    End Sub
End Class

supuse que las columnas del DataGridView1 se llamaban "Column1, Column2, etc." pero creo ahí esta mi error. Me arroja directo al cath de error.

Si alguien podría ayudarme se los agradecería.

1 Respuesta

Respuesta
1

Yo creo que para indicar cada columna deberías hacerlo según te marca constructor. Pones el indice de la columna en numero o el nombre de la columna que sera lo que has puesto en la cabecera, o sea, Emp, etc.

Fila.cells(1) ó

Fila. Cells("Emp")

¡Gracias! Ya me esta registrando los datos en SQL Server... solo una duda más, espero y me puedas ayudar, ahora quiero que no duplique los registros, porque si le doy exportar a SQL vuelve a ponerlos todos de nuevo.

Tengo la columna "contador"

Esta la quisiera utilizar como ID único para cada registro y que al momento de darle de nuevo al botón exportar checadas a SQL no me las duplique.

Ya intente desde SQL Server poner un indice único pero al momento de dar el clic me manda al try catch del error.

Si vas a usar la columna contador como id en sql, yo antes cogería en un dataset una consulta a la tabla de sql y por cada fila que quieras insertar, tendrías que recorrer esa consulta por si existe el dato en la columna contador. Si existe el dato, rompe el bucle de recorrer el dataset para que te dure menos porque si tiene 1000 registros y lo encuentra en el primero, no tiene porque recorrer toda la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas