none
Registro de DataGridView a sql

    Pregunta

  • Buenas, tengo un código para registrar todos los datos que tengo en un datagridview, pero resulta que cuando el datagridview tiene mas de 9 registros pues este simplemente me dice que hay un error y solo me guarda en mi tabla de SQL los primeros 9 registros, ¿alguien podría decirme si el código que estoy utilizando es incorrecto o tiene errores?

    Muchas gracias por toda su ayuda de antemano. 

    Este es el código que estoy utilizando:

     Private Sub BtnGUARDAR_Click(sender As Object, e As EventArgs) Handles BtnGUARDAR.Click
            Dim AGREGAR As SqlCommand = New SqlCommand("INSERT INTO CATALOGO_CUENTAS VALUES (@CODIGO, @CUENTA, @BALANCE, @TIPO, @CLASIFICACION, @CUENTA_CONTROL)", CONEXION)
            CONEXION.Open()
            Dim FILA As DataGridViewRow = New DataGridViewRow
            Try
                For Each FILA In DATAGRIDVIEW1.Rows
                    AGREGAR.Parameters.Clear()
                    AGREGAR.Parameters.AddWithValue("@CODIGO", Convert.ToString(FILA.Cells("CODIGO").Value))
                    AGREGAR.Parameters.AddWithValue("@CUENTA", Convert.ToString(FILA.Cells("CUENTA").Value))
                    AGREGAR.Parameters.AddWithValue("@BALANCE", Convert.ToDouble(FILA.Cells("BALANCE").Value))
                    AGREGAR.Parameters.AddWithValue("@TIPO", Convert.ToString(FILA.Cells("TIPO").Value))
                    AGREGAR.Parameters.AddWithValue("@CLASIFICACION", Convert.ToString(FILA.Cells("CLASIFICACION").Value))
                    AGREGAR.Parameters.AddWithValue("@CUENTA_CONTROL", Convert.ToString(FILA.Cells("CUENTA_CONTROL").Value))

                    AGREGAR.ExecuteNonQuery()

                Next
                MessageBox.Show("CUENTAS CONTABLES AGREGADAS EXITOSAMENTE")
            Catch ex As Exception
                MessageBox.Show("LAS CUENTAS CONTABLES NO FUERON AGREGADAS AL CATALOGO DE CUENTAS, VUELVA A INTENTARLO")
            Finally
                CONEXION.Close()
            End Try
        End Sub

    martes, 18 de octubre de 2016 2:42

Respuestas

  • Hola Gabriel.Abreu.VisualBasic,

    [-] ... me dice que hay un error y solo me guarda en mi tabla de SQL los primeros 9 registros

    ¿Qué error te muestra ?

    El bloque Catch es el encargado de capturar algún error que se produzca dentro del Try, por lo que si muestra el mensaje "Las cuentas contables no fueron agregadas....." es porque hay una Excepción, pero no sabes cuál es porque no lo muestras.

    Tu código no está mal que digamos, pero se podría mejorar :

    Try
        Using con As New SqlConnection("MiCadenaConexion")
            con.Open()
            Dim query = "INSERT INTO CATALOGO_CUENTAS VALUES " &
                       "(@CODIGO, @CUENTA, @BALANCE, @TIPO, @CLASIFICACION, @CUENTA_CONTROL)"
    
            Dim AGREGAR As New SqlCommand(query, con)
    
            For Each FILA As DataGridViewRow In DATAGRIDVIEW1.Rows
    
                AGREGAR.Parameters.Clear()
                AGREGAR.Parameters.AddWithValue("@CODIGO", CStr(FILA.Cells("CODIGO").Value))
                AGREGAR.Parameters.AddWithValue("@CUENTA", CStr(FILA.Cells("CUENTA").Value))
                AGREGAR.Parameters.AddWithValue("@BALANCE", CDbl(FILA.Cells("BALANCE").Value))
                AGREGAR.Parameters.AddWithValue("@TIPO", CStr(FILA.Cells("TIPO").Value))
                AGREGAR.Parameters.AddWithValue("@CLASIFICACION", CStr(FILA.Cells("CLASIFICACION").Value))
                AGREGAR.Parameters.AddWithValue("@CUENTA_CONTROL", CStr(FILA.Cells("CUENTA_CONTROL").Value))
    
                AGREGAR.ExecuteNonQuery()
            Next
    
            MessageBox.Show("CUENTAS CONTABLES AGREGADAS EXITOSAMENTE")
        End Using
    Catch ex As Exception
        MessageBox.Show("Se produjo un error : " & ex.Message) 'Muestra el mensaje de error
    End Try

    Procura usar Using en el SqlConnection para liberar el objeto y cerrar la conexión automáticamente.

    No obstante recomendaría el uso de Transacciones (SqlTransaction) al realizar una inserción de datos masivo, puedes echarle un ojo al siguiente link donde se plantea una pregunta similar.

    Guardar registros de un datagridview en sql

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 18 de octubre de 2016 3:01

Todas las respuestas

  • Hola Gabriel.Abreu.VisualBasic,

    [-] ... me dice que hay un error y solo me guarda en mi tabla de SQL los primeros 9 registros

    ¿Qué error te muestra ?

    El bloque Catch es el encargado de capturar algún error que se produzca dentro del Try, por lo que si muestra el mensaje "Las cuentas contables no fueron agregadas....." es porque hay una Excepción, pero no sabes cuál es porque no lo muestras.

    Tu código no está mal que digamos, pero se podría mejorar :

    Try
        Using con As New SqlConnection("MiCadenaConexion")
            con.Open()
            Dim query = "INSERT INTO CATALOGO_CUENTAS VALUES " &
                       "(@CODIGO, @CUENTA, @BALANCE, @TIPO, @CLASIFICACION, @CUENTA_CONTROL)"
    
            Dim AGREGAR As New SqlCommand(query, con)
    
            For Each FILA As DataGridViewRow In DATAGRIDVIEW1.Rows
    
                AGREGAR.Parameters.Clear()
                AGREGAR.Parameters.AddWithValue("@CODIGO", CStr(FILA.Cells("CODIGO").Value))
                AGREGAR.Parameters.AddWithValue("@CUENTA", CStr(FILA.Cells("CUENTA").Value))
                AGREGAR.Parameters.AddWithValue("@BALANCE", CDbl(FILA.Cells("BALANCE").Value))
                AGREGAR.Parameters.AddWithValue("@TIPO", CStr(FILA.Cells("TIPO").Value))
                AGREGAR.Parameters.AddWithValue("@CLASIFICACION", CStr(FILA.Cells("CLASIFICACION").Value))
                AGREGAR.Parameters.AddWithValue("@CUENTA_CONTROL", CStr(FILA.Cells("CUENTA_CONTROL").Value))
    
                AGREGAR.ExecuteNonQuery()
            Next
    
            MessageBox.Show("CUENTAS CONTABLES AGREGADAS EXITOSAMENTE")
        End Using
    Catch ex As Exception
        MessageBox.Show("Se produjo un error : " & ex.Message) 'Muestra el mensaje de error
    End Try

    Procura usar Using en el SqlConnection para liberar el objeto y cerrar la conexión automáticamente.

    No obstante recomendaría el uso de Transacciones (SqlTransaction) al realizar una inserción de datos masivo, puedes echarle un ojo al siguiente link donde se plantea una pregunta similar.

    Guardar registros de un datagridview en sql

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 18 de octubre de 2016 3:01
  • Muchísimas gracias Joel C. con el enlace que me enviaste pude resolver el problema con todos los registros. 
    martes, 18 de octubre de 2016 17:02