none
Insertar datos de datagridview en sql pasando por capas RRS feed

  • Pregunta

  • Hola, si alguen se dispone a darme alguna ideia para hacer lo que necesito. Estoy desarrolando un sistema en 4 capas.

    Tengo un datagridview el cual es rellenado por unos textbox, luego en seguida lo grabo en sql por store procedure.

    En el datagridview tengo unas 10 filas para insertar en el sql. Necesito correr todas las filas del dgv y grabarlas en la base.

    Intenté harlo pero solo me graba una fila, la primera del dgv, no graba las demas.

    Onde está el error o faltante?

    Aqui está el codigo que utilizo

    Capa Datos

    Public Sub InsetarContabil(ByVal objLaçar As List(Of EntLançamentoContabil))

            cn = objCon.conectar
            Try

                cn.Open()



                da = New SqlDataAdapter("SP_INSERTAR_LANÇAMENTOCONTABIL", cn)
                da.SelectCommand.CommandType = CommandType.StoredProcedure

                For Each item In objLaçar

                    With da.SelectCommand.Parameters


                        '.Add("@ID", SqlDbType.Int).Value = objPlanoConta.id
                        .Add("@Lote", SqlDbType.Int).Value = item._Lote
                        .Add("@NumDocto", SqlDbType.Int).Value = item._NumDocumento
                         End With
                Next
                da.SelectCommand.ExecuteNonQuery()



                MsgBox(" informacion grabada", MsgBoxStyle.Information)


            Catch ex As Exception
                Throw ex
                'MsgBox(" erro al registrar", MsgBoxStyle.Critical)
            Finally
                da.Dispose()
                cn.Dispose()

            End Try
        End Sub

    Capa Entidad

    Public Class EntLançamentoContabil
       
        Public _Lote As Integer
        Public _NumDocumento As Integer
        
        
    End Class

    Capa Negocio

     Public Sub SalvarLancto(ByVal ObjLancamento As List(Of EntLançamentoContabil))
        
            ObjLancamentosContabeis.InsetarContabil(ObjLancamento)

        End Sub

    Capa Presentacion

     Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            Dim ObjLançto = New List(Of EntLançamentoContabil)()

            For Each row In DGVItemLançamento.Rows
                Dim item = New EntLançamentoContabil
                item._Lote = CInt(row.Cells(0).Value)
                item._NumDocumento = CInt(row.Cells(1).Value)
                

                ObjLançto.Add(item)

            Next
            CapaNegocio.SalvarLancto(ObjLançto)

        End Sub
    End Class


    sábado, 18 de enero de 2020 0:54

Respuestas

  • Hola:
    Prueba esto

    Public Sub InsetarContabil(ByVal objLaçar As List(Of EntLançamentoContabil))
            Try
                Using loConexion As New SqlConnection(TU_CADENA_DE_CONEXION)
                    loConexion.Open
                    For Each item In objLaçar
                            ' crear comando
                            Using loComando As New SqlCommand()
                                loComando.Connection = loConexion
                                ' Indicamos el nombre del procedimiento almacenado
                                loComando.CommandText = "SP_INSERTAR_LANÇAMENTOCONTABIL"
                                ' Indicamos que se trata de un procedimiento almacenado
                                loComando.CommandType = CommandType.StoredProcedure
                                'Añadir parametros
                                loComando.Parameters.AddWithValue("@Lote", item._Lote)
                                loComando.Parameters.AddWithValue("@NumDocto", item._NumDocumento))
                                loComando.ExecuteNonQuery()
                            End Using
                    Next
                End Using
                MsgBox(" informacion grabada", MsgBoxStyle.Information)
            Catch ex As Exception
                Throw ex
                'MsgBox(" erro al registrar", MsgBoxStyle.Critical)
            End Try
    End Sub

    Un saludo desde Bilbo
    Carlos

    sábado, 18 de enero de 2020 7:22
  • Gracias Joser Carlos por la ayuda, ahora funciona perfectamente!

    Por favor una duda, puedo utilizar el using en vez de "Dispose"? , como usted lo hizo? Parece que el End using ya lo hace cierto?

    Gracias

          

    Gracias comprendo!

    Saludos

    • Marcado como respuesta Leozinho-2020 martes, 28 de enero de 2020 21:49
    martes, 28 de enero de 2020 21:49

Todas las respuestas

  • Hola:
    Prueba esto

    Public Sub InsetarContabil(ByVal objLaçar As List(Of EntLançamentoContabil))
            Try
                Using loConexion As New SqlConnection(TU_CADENA_DE_CONEXION)
                    loConexion.Open
                    For Each item In objLaçar
                            ' crear comando
                            Using loComando As New SqlCommand()
                                loComando.Connection = loConexion
                                ' Indicamos el nombre del procedimiento almacenado
                                loComando.CommandText = "SP_INSERTAR_LANÇAMENTOCONTABIL"
                                ' Indicamos que se trata de un procedimiento almacenado
                                loComando.CommandType = CommandType.StoredProcedure
                                'Añadir parametros
                                loComando.Parameters.AddWithValue("@Lote", item._Lote)
                                loComando.Parameters.AddWithValue("@NumDocto", item._NumDocumento))
                                loComando.ExecuteNonQuery()
                            End Using
                    Next
                End Using
                MsgBox(" informacion grabada", MsgBoxStyle.Information)
            Catch ex As Exception
                Throw ex
                'MsgBox(" erro al registrar", MsgBoxStyle.Critical)
            End Try
    End Sub

    Un saludo desde Bilbo
    Carlos

    sábado, 18 de enero de 2020 7:22
  • Gracias Joser Carlos por la ayuda, ahora funciona perfectamente!

    Por favor una duda, puedo utilizar el using en vez de "Dispose"? , como usted lo hizo? Parece que el End using ya lo hace cierto?

    Gracias

          
    martes, 21 de enero de 2020 2:18
  • Hola:
    Cuando se hace uso de la estructura Using     End Using, NO hace falta la sentencia Dispose pues se hace automaticamente al salir del End Using.

    Un saludo desde Bilbo
    Carlos
    martes, 21 de enero de 2020 13:13
  • Gracias Joser Carlos por la ayuda, ahora funciona perfectamente!

    Por favor una duda, puedo utilizar el using en vez de "Dispose"? , como usted lo hizo? Parece que el End using ya lo hace cierto?

    Gracias

          

    Gracias comprendo!

    Saludos

    • Marcado como respuesta Leozinho-2020 martes, 28 de enero de 2020 21:49
    martes, 28 de enero de 2020 21:49