none
Guardar fecha y hora de un datagridview en c# y sql server RRS feed

  • Pregunta

  • Hola, buenos dias tengo un datagridview y en sus columnas tengo fecha y hora por separado, deseo almacenar la informacion del datagrid pero cuando me almacena la hora en la tabla  me lo guarda en el siguiente formato 10:32:02.0000000, como hacer para que en los segundos no me salgan tantos ceros, con lo que respecta la fecha me lo guarda sin problemas en formato: 2012-09-05.

    Los campos en mi tabla en sql server 2008 estan de la siguiente manera:

    fecha date not null,    el resultado: 2012-09-05
     hora time not null;     el resultado: 10:32:02.0000000

    cuando recorro el datagrid para guardarlo en la tabla lo hago de la siguiente manera:

                txtSql = "insert into reg_asistencia values (@cod_docente, @idtarjeta, @nombre, @apellido, @curso, @tipo, @fecha, @hora)";
                cmSql = new SqlCommand(txtSql, conexion);

                foreach (DataGridViewRow row in dgvregistro.Rows)
                {
                    cmSql.Parameters.Clear();
                    cmSql.Parameters.AddWithValue("@cod_docente", Convert.ToInt16(row.Cells["cod_docente"].Value));
                    cmSql.Parameters.AddWithValue("@idtarjeta", Convert.ToInt32(row.Cells["idtarjeta"].Value));
                    cmSql.Parameters.AddWithValue("@nombre", Convert.ToString(row.Cells["nombre"].Value));
                    cmSql.Parameters.AddWithValue("@apellido", Convert.ToString(row.Cells["apellido"].Value));
                    cmSql.Parameters.AddWithValue("@curso", Convert.ToString(row.Cells["curso"].Value));
                    cmSql.Parameters.AddWithValue("@tipo", Convert.ToString(row.Cells["tipo"].Value));
                    cmSql.Parameters.AddWithValue("@fecha", Convert.ToDateTime(row.Cells["fecha"].Value));
                    cmSql.Parameters.AddWithValue("@hora", Convert.ToDateTime(row.Cells["hora"].Value));
                    cmSql.ExecuteNonQuery();
                }

    y al final me muestra el siguiente mensaje de error: Desbordamiento de SqlDateTime. Debe estar entre 1/1/1753 12:00:00 AM y 12/31/9999 11:59:59 PM.

    He hecho de algunas maneras y sigue saliendo el mismo error

    miércoles, 5 de septiembre de 2012 15:43

Respuestas

  • y al final me muestra el siguiente mensaje de error: Desbordamiento de SqlDateTime. Debe estar entre 1/1/1753 12:00:00 AM y 12/31/9999 11:59:59 PM.

    ese problema se presenta porque el campo de fecha debe estar en el rango que menciona

    ademas le hora de que tipo defines en la tabla? es tambien datetime

    podrias agregar una validacion que sea

    DateTime fecha = Convert.ToDateTime(row.Cells["fecha"].Value);

    if(fecha > new DateTime(1753,1,1)){

    cmSql.Parameters.AddWithValue("@fecha", Convert.ToDateTime(row.Cells["fecha"].Value));

    } else{

       cmSql.Parameters.AddWithValue("@fecha", DbNull.Value);

    }

    en realida deberias dejar que la fecha sea nula en la tabla si es que se puede asignar un valor no valido, sino una

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 5 de septiembre de 2012 17:26

Todas las respuestas

  • hola, la fecha y hora van de la mano? a que me refiero con esto si por decir en tu modulo se registra la fecha y la hora del sistema al dar clic en guardar, o tu le pones la hora a voluntad?

    si fecha y hora van de la mano te recomniendo poner un datetime picker y en tu bd solo poner el campo fecha como datetime y listo te ahorraras muchos problemas, saludos,

    si mi respuesta fue de utilidad votala como util, si resolvio tu duda marcala como respuesta

    miércoles, 5 de septiembre de 2012 15:55
  • Hola, el problema no es tu hora, es el formato de la fecha.

    Ejecuta esta consulta en tu SQL Management Studio:

    SELECT GETDATE()

    Eso te retornará la fecha y hora actual con el formato de fecha que tienes configurado para tu SQL.

    Entonces lo que debes hacer es enviar tu fecha como:

    var fecha = Convert.ToDateTime(row.Cells["fecha"].Value);
    
    cmSql.Parameters.AddWithValue("@fecha", fecha.ToString(MM/dd/yyyy));
    Donde esta MM/dd/yyyy, lo cambias por el formato correcto.



    Un saludo, Cristian Pérez

    miércoles, 5 de septiembre de 2012 16:26
  • y al final me muestra el siguiente mensaje de error: Desbordamiento de SqlDateTime. Debe estar entre 1/1/1753 12:00:00 AM y 12/31/9999 11:59:59 PM.

    ese problema se presenta porque el campo de fecha debe estar en el rango que menciona

    ademas le hora de que tipo defines en la tabla? es tambien datetime

    podrias agregar una validacion que sea

    DateTime fecha = Convert.ToDateTime(row.Cells["fecha"].Value);

    if(fecha > new DateTime(1753,1,1)){

    cmSql.Parameters.AddWithValue("@fecha", Convert.ToDateTime(row.Cells["fecha"].Value));

    } else{

       cmSql.Parameters.AddWithValue("@fecha", DbNull.Value);

    }

    en realida deberias dejar que la fecha sea nula en la tabla si es que se puede asignar un valor no valido, sino una

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 5 de septiembre de 2012 17:26