none
guardar datos datagridview en c# en sql server RRS feed

  • Pregunta

  • estoy guardando datos dentro de un datagridview y al finalizar el usuario debe guardar todos los registros que se encuentren dentro de este en la base de datos pero me da error al convertir una fecha y hora.

    específicamente me muestra el siguiente error

    "No se puede reconocer la cadena como valor DateTime válido"

    tengo el siguiente codigo.

    try
           {
                if ((dataGridView1.Rows.Count == 0))
                {
                    return;
                }
    
                string query = "insert into TB_RegistroPeso values (@bin, @peso, @Fecha, @Hora, @Ncontenedor)";
                SqlCommand cmd = new SqlCommand(query, conexionc.ObtenerConexion());
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@Bin", Convert.ToString(row.Cells["Bin"].Value));
                    cmd.Parameters.AddWithValue("@Peso", Convert.ToString(row.Cells["Peso"].Value));
                    //aqui esta el error al pasar la fecha y la hora no reconoce el formato
                    cmd.Parameters.AddWithValue("@Fecha",Convert.ToDateTime (row.Cells["Fecha"].Value));
                    //aqui esta el error al pasar la fecha y la hora no reconoce el formato
                    cmd.Parameters.AddWithValue("@Hora", Convert.ToDateTime(row.Cells["Hora"].Value));
                    cmd.Parameters.AddWithValue("@Ncontenedor", Convert.ToString(row.Cells["Ncontenedor"].Value));
                    cmd.ExecuteNonQuery();
                    conexionc.ObtenerConexion().Close();
                    MessageBox.Show("ingresado");
                }
    
            }
            catch (Exception f)
            {
    
               MessageBox.Show("error entro en el catch");
            }

    viernes, 8 de marzo de 2019 15:31

Respuestas

  • Hola sebastian19951995:

    Suponiendo que tu base de datos, la tabla fuese así:

    create table TB_RegistroPeso (bin int, peso int, fecha date, hora time, Ncontenedor varchar(10))
    go

    Luego en c#

                    SqlConnection connection = new SqlConnection(ConnectionString);
                    try
                    {
                        connection.Open();
    
                        string query = "insert into TB_RegistroPeso values (@bin, @peso, @Fecha, @Hora, @Ncontenedor)";
                        SqlCommand cmd = new SqlCommand(query, connection);
                        foreach (DataGridViewRow row in dataGridView1.Rows)
                        {
                            cmd.Parameters.Clear();
                            cmd.Parameters.AddWithValue("@Bin", Convert.ToString(row.Cells["Bin"].Value));
                            cmd.Parameters.AddWithValue("@Peso", Convert.ToString(row.Cells["Peso"].Value));
    
                            DateTime fecha = Convert.ToDateTime(row.Cells["Fecha"].Value);
                            cmd.Parameters.AddWithValue("@Fecha", fecha.ToString("dmy")); 
                            //formateo la fecha, para que sea independiente de la configuracion regional, o de codificacion del lenguaje
                            DateTime hora = Convert.ToDateTime(row.Cells["Hora"].Value);
                            // recojo solo la hora.
                            cmd.Parameters.AddWithValue("@Hora", hora.ToString("HH:mm:ss"));
                            cmd.Parameters.AddWithValue("@Ncontenedor", Convert.ToString(row.Cells["Ncontenedor"].Value));
                            cmd.ExecuteNonQuery();
    
                            MessageBox.Show("ingresado");
                        }
    
                    }
                    catch (Exception f)
                    {
    
                        MessageBox.Show("error entro en el catch"+f.Message.ToString());
                    }
                    finally
                    {
                        connection.Close();
                    }

    Pero el problema es siempre el mismo.

    Dependes de la introducción de datos del usuario, que si en tu datagrid, ha introducido algó que no encaja en formato, no funcionará la insercción.

    Espero te ayude

    viernes, 8 de marzo de 2019 17:04

Todas las respuestas

  • Hola sebastian19951995:

    Suponiendo que tu base de datos, la tabla fuese así:

    create table TB_RegistroPeso (bin int, peso int, fecha date, hora time, Ncontenedor varchar(10))
    go

    Luego en c#

                    SqlConnection connection = new SqlConnection(ConnectionString);
                    try
                    {
                        connection.Open();
    
                        string query = "insert into TB_RegistroPeso values (@bin, @peso, @Fecha, @Hora, @Ncontenedor)";
                        SqlCommand cmd = new SqlCommand(query, connection);
                        foreach (DataGridViewRow row in dataGridView1.Rows)
                        {
                            cmd.Parameters.Clear();
                            cmd.Parameters.AddWithValue("@Bin", Convert.ToString(row.Cells["Bin"].Value));
                            cmd.Parameters.AddWithValue("@Peso", Convert.ToString(row.Cells["Peso"].Value));
    
                            DateTime fecha = Convert.ToDateTime(row.Cells["Fecha"].Value);
                            cmd.Parameters.AddWithValue("@Fecha", fecha.ToString("dmy")); 
                            //formateo la fecha, para que sea independiente de la configuracion regional, o de codificacion del lenguaje
                            DateTime hora = Convert.ToDateTime(row.Cells["Hora"].Value);
                            // recojo solo la hora.
                            cmd.Parameters.AddWithValue("@Hora", hora.ToString("HH:mm:ss"));
                            cmd.Parameters.AddWithValue("@Ncontenedor", Convert.ToString(row.Cells["Ncontenedor"].Value));
                            cmd.ExecuteNonQuery();
    
                            MessageBox.Show("ingresado");
                        }
    
                    }
                    catch (Exception f)
                    {
    
                        MessageBox.Show("error entro en el catch"+f.Message.ToString());
                    }
                    finally
                    {
                        connection.Close();
                    }

    Pero el problema es siempre el mismo.

    Dependes de la introducción de datos del usuario, que si en tu datagrid, ha introducido algó que no encaja en formato, no funcionará la insercción.

    Espero te ayude

    viernes, 8 de marzo de 2019 17:04
  • me fue de gran utilidad su ayuda pero ahora al momento de insertar los datos almacenados en la base de datos siempre al final me guarda un dato mas con valores 0.

    ejemplo ingreso 13 registros a la grilla y al momento de guardar en la base de datos se guardan 14 registros con el ultimo registro en valores 0.

    viernes, 8 de marzo de 2019 19:09