none
guardar datos de un datagridview mysql RRS feed

  • Pregunta

  • ayudaaaaaaaa

    porfavor cuando ingresos datos en el datagridview, al llevarlos a la base de datos, solo me guarda el ultimo registro que ingrese al datagridview

    no se endonde esta el error

     

    for (i = 0; i < dataGridView1.Rows.Count-1; i++)
                {
                    v.Codigo = Convert.ToString(dataGridView1.Rows[i].Cells[0].Value);               
                    v.Cantidad = Convert.ToString(dataGridView1.Rows[i].Cells[3].Value);
                    v.Precio = Convert.ToString(dataGridView1.Rows[i].Cells[5].Value);
                    v.Preciotot = Convert.ToString(dataGridView1.Rows[i].Cells[6].Value);
                    v.Nombre = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
                    con.GestCadena = v.nuevofac();
                  
                   
                }

     

    gracias

    martes, 6 de diciembre de 2011 17:20

Respuestas

  • pero por cada invocacion a v.nuevofac() realizas el ExecuteNonQuery de ese insert ?

     

    ademas porque no usas parametros ? no es bueno concatenar en un string la query

    using (SqlConnection cnn = new SqlConnection("connection string")) {

        string query = @"insert into factura (cod_prodet,cantidad,precio,precio_tot,nombre)
                        values (@codigo, @cantidad, @precio, @preciotot, @nombre)";
        SqlCommand cmd = new SqlCommand(query, cnn);
      
        cmd.Parameters.AddWithValue("@codigo", this.codigo);
        cmd.Parameters.AddWithValue("@cantidad", this.cantidad);
        cmd.Parameters.AddWithValue("@precio", this.precio);
        cmd.Parameters.AddWithValue("@preciotot", this.preciotot);
        cmd.Parameters.AddWithValue("@nombre", this.nombre);

        cmd.ExecuteNonQuery()

    }

    de esta forma es que deberias implementarlo, con parametros

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 6 de diciembre de 2011 18:06

Todas las respuestas

  • pero alli no veo dodne estas ejecutando el INSERT o UPDATE por cada ciclo que realiza el for

    ademas usa

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {

                   NombreClase v = new NombreClase();
                    v.Codigo = Convert.ToString(row.Cells[0].Value);               
                    v.Cantidad = Convert.ToString(row.Cells[3].Value);
                    v.Precio = Convert.ToString(row..Cells[5].Value);
                    v.Preciotot = Convert.ToString(row.Cells[6].Value);
                    v.Nombre = Convert.ToString(row.Cells[1].Value);
                    con.GestCadena = v.nuevofac();
                  
                   
    }

    el foreach es mejor que el for en este caso

    peor sobre todo crea una nueva instancia en cada interaccion

    aunque sino entendi mal no necesitas de una lsita de facturas

    o sea List<NombreClase>

    puse nombre clase porque no se cual es el nombre del que defines

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 6 de diciembre de 2011 17:30
  • gracias y si me puedes ayudar te lo agradeseria

     

    ya intente con el codigo que me posteaste, pero al enviarlos me sale un error como si no estubiera capturando los datos, values('','','','','')

     

    y el codigo lo llamo mediante la funcion v.nuevofac y alli se encuentra el metodo insert, que en este caso seria el siguente.

     

    @"insert into factura (cod_prodet,cantidad,precio,precio_tot,nombre)values('" + this.codigo + "','" + this.cantidad + "','" + this.precio + "','" + this.preciotot + "','" + this.nombre + "')";

     

    gracias Leonardo Avendaño

    • Editado dlap1022 martes, 6 de diciembre de 2011 17:50
    martes, 6 de diciembre de 2011 17:42
  • pero por cada invocacion a v.nuevofac() realizas el ExecuteNonQuery de ese insert ?

     

    ademas porque no usas parametros ? no es bueno concatenar en un string la query

    using (SqlConnection cnn = new SqlConnection("connection string")) {

        string query = @"insert into factura (cod_prodet,cantidad,precio,precio_tot,nombre)
                        values (@codigo, @cantidad, @precio, @preciotot, @nombre)";
        SqlCommand cmd = new SqlCommand(query, cnn);
      
        cmd.Parameters.AddWithValue("@codigo", this.codigo);
        cmd.Parameters.AddWithValue("@cantidad", this.cantidad);
        cmd.Parameters.AddWithValue("@precio", this.precio);
        cmd.Parameters.AddWithValue("@preciotot", this.preciotot);
        cmd.Parameters.AddWithValue("@nombre", this.nombre);

        cmd.ExecuteNonQuery()

    }

    de esta forma es que deberias implementarlo, con parametros

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 6 de diciembre de 2011 18:06
  • pues la verdad ejecuto un Query para todos, y cuando ingreso un solo registro funciona, pero al cargar varios registros solo ingresa el ultimo.

    por esto uso el ciclo for, y de esta menera me funciana, pero como te digo solo guarda el ultimo registro de todos los que se han ingresado al datagredview

     

    Leonardo Avendaño

    martes, 6 de diciembre de 2011 18:21
  • como es el codigo completo de nuevofac() ?

    o el codigo que usas cuando invocas el ExecuteNonQuery()

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 6 de diciembre de 2011 18:37
  • public string nuevofac()
            {
                string cadena = @"insert into factura (cod_prodet,cantidad,precio,precio_tot,nombre)values('" + this.codigo + "','" + this.cantidad + "','" + this.precio + "','" + this.preciotot + "','" + this.nombre + "')";
                return cadena;

     

    cuando ejecuto el for me envia a la base de datos, solamente el ultimo registro

    for (i = 0; i < dataGridView1.Rows.Count-1; i++)
                {
                    v.Codigo = Convert.ToString(dataGridView1.Rows[i].Cells[0].Value);               
                    v.Cantidad = Convert.ToString(dataGridView1.Rows[i].Cells[3].Value);
                    v.Precio = Convert.ToString(dataGridView1.Rows[i].Cells[5].Value);
                    v.Preciotot = Convert.ToString(dataGridView1.Rows[i].Cells[6].Value);
                    v.Nombre = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
                    con.GestCadena = v.nuevofac();

    y cuando ejecuto

     foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                   
                    v.Codigo = Convert.ToString(row.Cells[0].Value);
                    v.Cantidad = Convert.ToString(row.Cells[3].Value);
                    v.Precio = Convert.ToString(row.Cells[5].Value);
                    v.Preciotot = Convert.ToString(row.Cells[6].Value);
                    v.Nombre = Convert.ToString(row.Cells[1].Value);
                    con.GestCadena = v.nuevofac();

     

    sale un error en el query values('','','','','') claro esta que estoy manejando mysql

     

    Leonardo Avendaño

    martes, 6 de diciembre de 2011 18:51
  • saludos,,,

    lo anterior ya lo reslovi gracias por tu ayuda por que se estaba herrado en el monento de llamar la consulta,,

     

    pero resulta que ahora cuando ingreso los registros a la base de datos, me duplica el ultimo registro..... como puedo hacer una validacion, para evitar que el datagridview envie filas ya leidas

    gracias si me puedes colaborar en esto

     

    Saludos leonardo

    miércoles, 7 de diciembre de 2011 0:45
  • ESTOY USANDO ESTE CODIGO PERO NO SE CUALES SON LOS PARAMETROS Y ME GUARDA EL PRIMER DATO REPETIDO 3 VECES Y MIRA EL CODIGO A VER SI PUEDES AYUDARME GRACIAS DE ANTEMANO

     Dim i As Integer
            Dim referencia As DataGridViewRow
            referencia = New DataGridViewRow
            Dim producto As DataGridViewRow
            producto = New DataGridViewRow
            ''producto = DataGridView1.Rows(i).Cells(1).ToString()
            Dim cantidad As DataGridViewRow
            cantidad = New DataGridViewRow
            ''cantidad = DataGridView1.Rows(i).Cells(2).ToString()
            Dim valor As DataGridViewRow
            valor = New DataGridViewRow
            'valor = DataGridView1.Rows(i).Cells(3).ToString()

     Using con As New MySqlConnection(parametro)
                    con.Open()
                    If DataGridView1.Rows.Count > 0 Then
                        'Dim arreglo As New ArrayList
                        'For i = 0 To DataGridView1.Rows(i).Cells.Count - 1
                        For i = 0 To DataGridView1.RowCount
                            'For Each row As DataGridViewRow In DataGridView1.Rows
                            Dim sql As String = "insert into ventadetalle(referencia,producto,cantidad,valor,numfactura)values(@referencia,@producto,@cantidad,@valor,@numfactura)"
                            'Dim sql As String = "insert into ventadetalle(referencia,producto,cantidad,valor,numfactura) VALUES('" & DataGridView1.Rows(i).Cells(0).Value.ToString() & "','" & DataGridView1.Rows(i).Cells(1).Value.ToString() & "','" & DataGridView1.Rows(i).Cells(2).Value.ToString() & "','" & DataGridView1.Rows(i).Cells(3).Value.ToString() & "','" & numfactura2 & "'"
                            Dim command As New MySqlCommand(sql, con)
                            With command
                                .Parameters.Clear()
                                .Parameters.AddWithValue("@referencia", referencia.Cells(0).Value)
                                .Parameters.AddWithValue("@producto", producto.Cells(1).Value)
                                .Parameters.AddWithValue("@cantidad", cantidad.Cells(2).Value)
                                .Parameters.AddWithValue("@valor", valor.Cells(3).Value)
                                .Parameters.AddWithValue("@numfactura", numfactura2)
                                '.Parameters.AddWithValue("@referencia", DataGridView1.Rows(i).Cells(0).Value.ToString())
                                '.Parameters.AddWithValue("@producto", DataGridView1.Rows(i).Cells(1).Value.ToString())
                                '.Parameters.AddWithValue("@cantidad", DataGridView1.Rows(i).Cells(2).Value.ToString())
                                '.Parameters.AddWithValue("@valor", DataGridView1.Rows(i).Cells(3).Value.ToString())
                                '.Parameters.AddWithValue("@numfactura", numfactura2)
                                'arreglo.Add(sql)


                            End With
                            command.ExecuteNonQuery()


                        Next
                        MessageBox.Show("registro detalle almacenado")
                    End If


                End Using

    miércoles, 14 de marzo de 2012 21:41