none
guardar datos de datagridview en sql c# RRS feed

  • Pregunta

  • Buena tarde.

    Que tal, nuevamente solicitando de su ayuda y sus conocimientos, ahora resulta que no puedo guardar los datos que tengo en un DataGridView en una tabla en SQL, mi codigo es el siguiente:

     protected void BtnGuardar_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection("Data Source=DESKTOP-GBLB5KE\\SQL;Initial Catalog=Propuestas;Integrated Security=True;"))
            {
                conn.Open();
    
                string query = "INSERT INTO Propuestas_Asimilados (NEmpleados, Nombre, FechaAlta, Sueldo, ISR, SueldoaPercibir, Total)  VALUES (@NEmpleados, @Nombre, @FechaAlta, @Sueldo, @ISR, @Sueldo, @SueldoaPercibir, @Total)";
                SqlCommand cmd = new SqlCommand(query, conn);
    
                try
                {
    
                    foreach (GridViewRow row in GVListaGrupal.Rows)
                    {
                        cmd.Parameters.Clear();
    
                        cmd.Parameters.Add("@NEmpleados", SqlDbType.Float).Value = Convert.ToDouble(GVListaGrupal.row[1].Cells("NEmpleados").Value);
                        cmd.Parameters.AddWithValue("@NEmpleados", Convert.ToDouble(row.Cells("Nombre").Value));
                        cmd.Parameters.AddWithValue("@Nombre", (DateTime)Convert.ToDateTime(row.Cells("FechaAlta").Value));
                        cmd.Parameters.AddWithValue("@FechaAlta", (DateTime)Convert.ToDateTime(row.Cells("Sueldo").Value));
                        cmd.Parameters.AddWithValue("@ISR", (float)Convert.ToDouble(row.Cells("ISR").Value));
                        cmd.Parameters.AddWithValue("@Sueldo", (float)Convert.ToDouble(row.Cells("SueldoaPercibir").Value));
                        cmd.Parameters.AddWithValue("@SueldoaPercibir", (float)Convert.ToDouble(row.Cells("Total").Value));
                       
    
                        cmd.ExecuteNonQuery();
                    }
    
                    
    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    conn.Close();
                }
            }
        }

    Las dos primeras lineas se repite el parámetro NEmpleados pero solo lo puse para modificar algo el código pero en la primera la primera linea me marca el error en la palabra row y entodas las demás en la palabra Cells no se que es lo que me hace falta.

    De antemano muchas gracias.

    jueves, 4 de mayo de 2017 22:36

Respuestas

  • hola

    >>realice el debugg con el breakpoint pero no muestra ningún error

    si ejecutas paso a paso, puedes validar que ingresa en el

     foreach (GridViewRow row in GVListaGrupal.Rows)

    quizas no esta iterando las rows del grid


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 5 de mayo de 2017 19:25

Todas las respuestas

  • Hola,

    Estaba visualizando tu codigo, y hay formas de optimizarlo..

      string query = "INSERT INTO Propuestas_Asimilados (NEmpleados, Nombre, FechaAlta, Sueldo, ISR, SueldoaPercibir, Total)  VALUES (txtEmpleados.text, Nombre.text, FechaAlta.text, Sueldo.text, ISR.text, Sueldo.text, SueldoaPercibir.text, Total.text)";

    Obten los datos directamente de tus cajas de texto...

    jueves, 4 de mayo de 2017 22:44
  • OOhh disculpa no especifique los datos de los textbox se van almacenando en el grid en forma de lista y al final quiero guardar toda la lista que se almacene en el grid
    jueves, 4 de mayo de 2017 22:59
  • hola

    Pero el DataGridView  de winform, o es el GridView de asp.net ?

    En asp.net no puees acceder a la celda por el nombre

    cmd.Parameters.AddWithValue("@NEmpleados", Convert.ToDouble(row.Cells[1].Text));

    es un array por eso  [] y ademas se usa el .Text porque seguro sera un BoundField

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 5 de mayo de 2017 1:00
  • Buen día.

    Para llenar el gridview en asp.net utilizo el siguiente codigo.

     public DataTable filldata1()
        {
    
            DataTable dt2 = new DataTable();
            dt2.Columns.Add("Numero de Empleados", typeof(string));
            dt2.Columns.Add("Nombre", typeof(string));
            dt2.Columns.Add("Fecha de Alta", typeof(string));
            dt2.Columns.Add("Sueldo", typeof(string));
            dt2.Columns.Add("ISR", typeof(string));
            dt2.Columns.Add("Sueldo A Percibir", typeof(string));
            dt2.Columns.Add("Total", typeof(string));
            return dt2;
    
        }


      protected void BtnAddRegistro_Click(object sender, EventArgs e)
        {
    
            if (Session["dt2"] == null)
            {
                DataTable dt2 = filldata1();
                DataRow Row2;
                Row2 = dt2.NewRow();
                Row2["Numero de Empleados"] = this.TextBox23.Text;
                Row2["Nombre"] = this.TextBox3.Text;
                Row2["Fecha de Alta"] = this.TextBox4.Text;
                Row2["Sueldo"] = this.TextBox6.Text;
                Row2["ISR"] = this.TextBox19.Text;
                Row2["Sueldo A Percibir"] = this.TextBox1.Text;
                Row2["Total"] = this.TextBox21.Text;
                dt2.Rows.Add(Row2);
                GVListaGrupal.DataSource = dt2;
                GVListaGrupal.DataBind();
                Session["dt2"] = dt2;
    
            }
            else
            {
                DataTable dt2 = (Session["dt2"]) as DataTable;
                DataRow Row2;
                Row2 = dt2.NewRow();
                Row2["Numero de Empleados"] = this.TextBox23.Text;
                Row2["Nombre"] = this.TextBox3.Text;
                Row2["Fecha de Alta"] = this.TextBox4.Text;
                Row2["Sueldo"] = this.TextBox6.Text;
                Row2["ISR"] = this.TextBox19.Text;
                Row2["Sueldo A Percibir"] = this.TextBox1.Text;
                Row2["Total"] = this.TextBox21.Text;
                dt2.Rows.Add(Row2);
                GVListaGrupal.DataSource = dt2;
                GVListaGrupal.DataBind();
                Session["dt2"] = dt2;
    
            }
        }

    y ya modifique el codigo de insetar y me quedo asi.

      protected void BtnGuardar_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection("Data Source=DESKTOP-GBLB5KE\\SQL;Initial Catalog=Propuestas;Integrated Security=True;"))
            {
                conn.Open();
    
                string query = "INSERT INTO Propuestas_Asimilados (NEmpleados, Nombre, FechaAlta, Sueldo, ISR, SueldoaPercibir, Total)  VALUES (@NEmpleados, @Nombre, @FechaAlta, @Sueldo, @ISR, @Sueldo, @SueldoaPercibir, @Total)";
                SqlCommand cmd = new SqlCommand(query, conn);
    
                try
                {
    
                    foreach (GridViewRow row in GVListaGrupal.Rows)
                    {
                        cmd.Parameters.Clear();
    
                        cmd.Parameters.AddWithValue("@NEmpleados", Convert.ToDouble(row.Cells[1].Text));
                        cmd.Parameters.AddWithValue("@Nombre", (DateTime)Convert.ToDateTime(row.Cells[2].Text));
                        cmd.Parameters.AddWithValue("@FechaAlta", (DateTime)Convert.ToDateTime(row.Cells[3].Text));
                        cmd.Parameters.AddWithValue("@ISR", (float)Convert.ToDouble(row.Cells[4].Text));
                        cmd.Parameters.AddWithValue("@Sueldo", (float)Convert.ToDouble(row.Cells[5].Text));
                        cmd.Parameters.AddWithValue("@SueldoaPercibir", (float)Convert.ToDouble(row.Cells[6].Text));
                       
    
                        cmd.ExecuteNonQuery();
                    }
    
                    
    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    pero al presionar el botón no pasa nada como si no tuviera código.

    viernes, 5 de mayo de 2017 15:00
  • Hola Ekc21

    Primero, estamos seguros que tu evento está asociado a ese botón?

    Segundo, realiza un debug (un paso a paso, coloca un punto de interrupción), de esa forma identificarás más rápido si algo esta ocurriendo y podamos apoyarte.

    Tercero, coloca el siguiente código después de tu conexión, reemplaza estas líneas, veo un punto y coma después de tu Integrated Securirty=True. fíjate en el paso a paso si abre bien la conexión.

     using (SqlConnection conn = new SqlConnection("Data Source=DESKTOP-GBLB5KE\\SQL;Initial Catalog=Propuestas;Integrated Security=True"))
    {
     if (conn.State != ConnectionState.Open)
       {
          conn.Open(); 
       }

    Nos comentas

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    viernes, 5 de mayo de 2017 15:17
  • Que tal.  ya he seguido los consejos que me dijiste ya revise el evento del botón y si es el correcto ya aplique el codigo que me pasaste después de la cadena de conexión y realice el debugg con el breakpoint pero no muestra ningún error y  tampoco inserta nada.

    muchas gracias por sus comentarios.

    viernes, 5 de mayo de 2017 19:00
  • hola

    >>realice el debugg con el breakpoint pero no muestra ningún error

    si ejecutas paso a paso, puedes validar que ingresa en el

     foreach (GridViewRow row in GVListaGrupal.Rows)

    quizas no esta iterando las rows del grid


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 5 de mayo de 2017 19:25
  • tienes razón Leandro  entra al foreach pero no itera las row del grid, solo que no se que hacer en este caso si me pudieran dar alguna sugerencia por favor.

    gracias.

    viernes, 5 de mayo de 2017 20:39