none
Parameter not found in the collection datagridview, consulta parametrizada RRS feed

  • Pregunta

  • hola comunidad ando renegando con un modulo adonde tengo que cargar datos de un datagridview en una tabla de mysql el problema lo tengo cuando quiero parametrizar los valores de las columnas del datagridview 


     Sub venta(ByVal DGV As DataGridView)
            Dim total As Double
    
            Dim maxidfactura As String = "select MAX(codfactura) from factura"
            objConn.Open()
            Dim cmd As New MySqlCommand(maxidfactura, objConn)
            Dim IDfactura = Convert.ToInt32(cmd.ExecuteScalar())
            IDfactura = +1
    
    
            Dim maxidventa As String = "select MAX(codventa) from ventas"
            Dim cmd1 As New MySqlCommand(maxidventa, objConn)
            Dim IDventa = Convert.ToInt32(cmd1.ExecuteScalar())
    
            Dim insertventa As String = "insert into ventas (codventa,codfactura,codproducto,preciounitario,cantvendida
            values @codventa,@codfactura,@codproducto,@preciounitario,@cantvendida"
    
            Dim cmdventa As New MySqlCommand(insertventa, objConn)
    
            cmdventa.Parameters.Add("@codventa", MySqlDbType.Int32)
            cmdventa.Parameters.Add("@codfactura", MySqlDbType.Int32)
            cmdventa.Parameters.Add("@codproducto", MySqlDbType.Int32)
            cmdventa.Parameters.Add("@preciounitario", MySqlDbType.Double)
            cmdventa.Parameters.Add("@cantvendida", MySqlDbType.Int32)
    
            For i = 0 To DGV.Rows.Count - 1
                cmd.Parameters.Item("@codventa").Value = Val(IDventa) + 1
                cmd.Parameters.Item("@codfactura").Value = Val(IDfactura)
                cmd.Parameters.Item("@codprodcuto").Value = DGV.Item(1, i).Value
                cmd.Parameters.Item("@preciounitario").Value = DGV.Item(4, i).Value
                cmd.Parameters.Item("@cantvendida").Value = DGV.Item(0, i).Value
                total += DGV.Item(4, i).Value
            Next
            cmdventa.ExecuteNonQuery()
    
            Dim insertfactura As String = "insert into Factura (CodFactura,FechaVenta,total) values
            @codfactura,@fechaventa,@total"
    
            Dim cmdfactura As New MySqlCommand(insertfactura, objConn)
            cmdfactura.Parameters.Add("@codfactura", MySqlDbType.Int32)
            cmdfactura.Parameters.Add("@fechaventa", MySqlDbType.Date)
            cmdfactura.Parameters.Add("@total", MySqlDbType.Double)
    
            cmd.Parameters.Item("@codfactura").Value = Val(IDfactura)
            cmd.Parameters.Item("@fechafactura").Value = DateTime.Now.ToString("dd/MM/yyyy")
            cmd.Parameters.Item("@total").Value = total
            cmdfactura.ExecuteNonQuery()
    
            objConn.Close()
            disconect()
        End Sub

    martes, 20 de octubre de 2020 21:16

Respuestas

  • Hola:
    Prueba este codigo

    Sub venta(ByVal DGV As DataGridView)
            Try
                Using lConexion As New MySqlConnection(Conexion)
                    lConexion.Open()
                    'Iniciamos una transaccion, hay que añadir una referencia a System.Transactions
                    Using MiTransaccion As New Transactions.TransactionScope
                         Dim maxidfactura As String = "select MAX(codfactura) from factura"
                         Dim IDfactura As Integer=0
                         Using lComando As New MySqlCommand(maxidfactura, lConexion)
                            IDfactura = Convert.ToInt32(lComando.ExecuteScalar())
                         End Using
                         IDfactura += 1

                         Dim maxidventa As String = "select MAX(codventa) from ventas"
                         Dim IDventa As Integer=0
                         Using lComando As New MySqlCommand(maxidventa, lConexion)
                              IDventa = Convert.ToInt32(cmd1.ExecuteScalar())
                         End Using
                         IDventa += 1
                         Dim total As Double=0

                         Dim insertventa As String = "insert into ventas (codventa,codfactura,codproducto,preciounitario,cantvendida
                         values @codventa,@codfactura,@codproducto,@preciounitario,@cantvendida"
                         For i = 0 To DGV.Rows.Count - 1   
                              Using lComando As New MySqlCommand(insertventa, lConexion)
                                   lComando.Parameters.Add(New MySqlParameter("@codventa", IDventa))
                                   lComando.Parameters.Add(New MySqlParameter("@codfactura", IDfactura))
                                   lComando.Parameters.Add(New MySqlParameter("@codproducto", DGV.Item(1, i).Value))
                                   lComando.Parameters.Add(New MySqlParameter("@preciounitario", DGV.Item(4, i).Value))
                                   lComando.Parameters.Add(New MySqlParameter("@cantvendida", DGV.Item(0, i).Value)
                                   total += DGV.Item(4, i).Value
                                   lComando.ExecuteNonQuery()
                              End Using
                         Next

                         Dim insertfactura As String = "insert into Factura (CodFactura,FechaVenta,total) values
                         @codfactura,@fechaventa,@total"

                         Using lComando As New MySqlCommand(insertventa, lConexion)
                              lComando.Parameters.Add(New MySqlParameter("@codfactura", IDfactura))
                              lComando.Parameters.Add(New MySqlParameter("@fechaventa", DateTime.Now.ToString("dd/MM/yyyy")))
                              lComando.Parameters.Add(New MySqlParameter("@total", total)
                              lComando.ExecuteNonQuery()
                         End Using
                         MiTransaccion.Complete()
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    End Sub

    Un saludo desde Bilbo
    Carlos

    • Editado J. Carlos Herrero martes, 20 de octubre de 2020 22:43
    • Marcado como respuesta Conceptx jueves, 22 de octubre de 2020 20:11
    martes, 20 de octubre de 2020 22:38

Todas las respuestas

  • Hola:
    Prueba este codigo

    Sub venta(ByVal DGV As DataGridView)
            Try
                Using lConexion As New MySqlConnection(Conexion)
                    lConexion.Open()
                    'Iniciamos una transaccion, hay que añadir una referencia a System.Transactions
                    Using MiTransaccion As New Transactions.TransactionScope
                         Dim maxidfactura As String = "select MAX(codfactura) from factura"
                         Dim IDfactura As Integer=0
                         Using lComando As New MySqlCommand(maxidfactura, lConexion)
                            IDfactura = Convert.ToInt32(lComando.ExecuteScalar())
                         End Using
                         IDfactura += 1

                         Dim maxidventa As String = "select MAX(codventa) from ventas"
                         Dim IDventa As Integer=0
                         Using lComando As New MySqlCommand(maxidventa, lConexion)
                              IDventa = Convert.ToInt32(cmd1.ExecuteScalar())
                         End Using
                         IDventa += 1
                         Dim total As Double=0

                         Dim insertventa As String = "insert into ventas (codventa,codfactura,codproducto,preciounitario,cantvendida
                         values @codventa,@codfactura,@codproducto,@preciounitario,@cantvendida"
                         For i = 0 To DGV.Rows.Count - 1   
                              Using lComando As New MySqlCommand(insertventa, lConexion)
                                   lComando.Parameters.Add(New MySqlParameter("@codventa", IDventa))
                                   lComando.Parameters.Add(New MySqlParameter("@codfactura", IDfactura))
                                   lComando.Parameters.Add(New MySqlParameter("@codproducto", DGV.Item(1, i).Value))
                                   lComando.Parameters.Add(New MySqlParameter("@preciounitario", DGV.Item(4, i).Value))
                                   lComando.Parameters.Add(New MySqlParameter("@cantvendida", DGV.Item(0, i).Value)
                                   total += DGV.Item(4, i).Value
                                   lComando.ExecuteNonQuery()
                              End Using
                         Next

                         Dim insertfactura As String = "insert into Factura (CodFactura,FechaVenta,total) values
                         @codfactura,@fechaventa,@total"

                         Using lComando As New MySqlCommand(insertventa, lConexion)
                              lComando.Parameters.Add(New MySqlParameter("@codfactura", IDfactura))
                              lComando.Parameters.Add(New MySqlParameter("@fechaventa", DateTime.Now.ToString("dd/MM/yyyy")))
                              lComando.Parameters.Add(New MySqlParameter("@total", total)
                              lComando.ExecuteNonQuery()
                         End Using
                         MiTransaccion.Complete()
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    End Sub

    Un saludo desde Bilbo
    Carlos

    • Editado J. Carlos Herrero martes, 20 de octubre de 2020 22:43
    • Marcado como respuesta Conceptx jueves, 22 de octubre de 2020 20:11
    martes, 20 de octubre de 2020 22:38
  • muchas gracias por la ayuda pero ahora no me toma los valores del datagredview me tira el siguiente cartel:

    si le pongo un punto de interrupcion me toma los datos del datagridview pero si lo ejecuto no me los toma en el valor me aparece nothing 
    • Editado Conceptx miércoles, 21 de octubre de 2020 0:10
    martes, 20 de octubre de 2020 23:53
  • Hola:
    El error que te da es: > la columna codproducto no puede ser nula <
    Esto solo lo puedes comprobar tu poniendo un punto de interrupcion.

    Un saludo desde Bilbo
    Carlos
    miércoles, 21 de octubre de 2020 7:33
  • cuando ejecuto el programa me arroja ese error no cuando utilizo un punto de interrupción, lo que digo es que cuando pongo un punto de interrupción me reconoce los valores de la columna del datagridview
    miércoles, 21 de octubre de 2020 13:56
  • Hola:
    > cuando ejecuto el programa me arroja ese error no cuando utilizo un punto de interrupción, lo que digo es que cuando pongo un punto de interrupción me reconoce los valores de la columna del datagridview <
    Es decir cuando pones un punto de interrupcion se comporta de manera diferente a cuando NO lo tiene.
    Me has roto "ESQUEMAS", no se que decirte

    Un saludo desde Bilbo
    Carlos
    miércoles, 21 de octubre de 2020 15:21
  • Hola:
    > cuando ejecuto el programa me arroja ese error no cuando utilizo un punto de interrupción, lo que digo es que cuando pongo un punto de interrupción me reconoce los valores de la columna del datagridview <
    Es decir cuando pones un punto de interrupcion se comporta de manera diferente a cuando NO lo tiene.
    Me has roto "ESQUEMAS", no se que decirte

    Un saludo desde Bilbo
    Carlos

    muchas gracias por tu ayuda carlos , la unica solucion que encontre fue colorcar un try catch donde salga el error por msgbox y siga funcionando igual

    Claro si yo ejecuto el formulario normalmente, no me detecta la columnas del datagridview me toma valor nothing en cambio si le pongo un punto de interrupción si me toma los valores del datagridview la verdad es una cosa que nunca me había pasado

    miércoles, 21 de octubre de 2020 23:55
  • Hola Conceptx, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Gracias por usar los foros de MSDN.  

    Andres Aguilar 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    jueves, 22 de octubre de 2020 17:42
    Moderador