none
error al guardar hora y fecha RRS feed

  • Pregunta

  • buenos dias !! mi cuestion es la siguiente:

    tengo un formulario en asp.net y c# en el que asigno la fecha y hora a dos textbox respectivamente, la funcion de ellos es grabar mis checadas y la primera chechada sale perfecta el problema es que yo entro a las 8 am y por x motivo no cheque y decido hacerlo a pas 9:15 y modifico el textbox de la hora no graba mi modificacion sino la hora del sistema que son las 9:15 como puedo hacer editable ese campo para que acepte grabar la nueva nora que yo asigne y no la del sistema 

    de antemano muchas gracias

    lunes, 29 de junio de 2015 17:05

Respuestas

  • ahh bien si el campo fecha es datetime no puedes asignar un string

    tienes que usar

    private void agregarchecada(string estado, DateTime fecha, string hora){

    //resto codigo

    }

    o sea debes enviar un datetime por parametro en el insert

    igual recuerda validar la estructura del insert como comente en la respuesta anterior

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 29 de junio de 2015 19:22

Todas las respuestas

  • Hola Julio,

    Primero que si capturas datos de fecha y hora deberías utilizar componentes que te permitan el registro correcto de los datos como el control DateTimePicker o Masked. Para que pueda responder del porque sucede ello habría que ver que parámetro está recibiendo el método de inserción o actualización, probablemente posterior a la hora de ingreso permitida el parámetro es una valor de hora del sistema y obvia el dato registrado en el TextBox. Revisa el código para que determines que puede estar sucediendo.

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ

    lunes, 29 de junio de 2015 17:20
  • hola

    pero como estas definiendo el parametro de la fecha\hora cuando defines el parametro del INSERT o UPDATE ?

    porque se supone que en el parametro debas unir la fecha y la hora en un solo campo

    algo como ser

    using (SqlConnection conn = new SqlConnection("<connection string>"))  
    {      
    	conn.Open();   
        
    	string query = "INSERT INTO NombreTabla (campo1, campo2) VALUES (@param1, @param2)";      
    	SqlCommand cmd = new SqlCommand(query, conn);      
    	cmd.Parameters.AddWithValue("@param1", Convert.ToString(TextBox1.Text));     
    	cmd.Parameters.AddWithValue("@param2", Convert.ToDateTime(string.Format("{0} {1}", txtFecha.Text, txtHora.Text)));       
    	cmd.ExecuteNonQuery();   
    }

    la idea es unir la fecha y hora y convertirla a datetime para insertarlo en el campo de la tabla

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 29 de junio de 2015 17:38
  • gracias por contestar rapido!! creo me falto estos detalles:

    1 .- ya cambie mis textbox por : dateedit y timeedit

    2.- el load es asi:

               Fechaedit.Text = DateTime.Now.ToShortDateString();
               Timedit.Text = DateTime.Now.ToShortTimeString();

    3.- el metodo checada es asi :

     private void agregarchecada(string estado, string fecha, string hora)

    {

     str = @"insert into checadas values(estado, fecha,hora )

    }

    mi problema es cuando llego tarde y quiero registrar mi checada como si fuera a las 8 am no me lo permite pues graba la hora del sistema no la que yo asigno

    lunes, 29 de junio de 2015 17:38
  • Hola Julio,

    A ver, llegas tarde y por defecto tienes cargado la hora actual, modificas el control con la hora regular  (8:00) y el problema es que persiste la hora actual, no le encuentro sentido. ¿Has intentado corroborar que valores llegan al método en los parámetros fecha y hora? Es posible que haya una regla en algún lugar que este obviando el valor ingresado. Si al método le llega la hora esperada lo único que quedaría pensar es que tienes una regla a nivel de bd que reescribe la hora de ingreso.

    lunes, 29 de junio de 2015 17:43
  • hola

    >>3.- el metodo checada es asi :

    pero el campo fecha y hora no deberian ser separados, sino uno solo, uniendo y separando la camponente de la fecha y la hora

    cuando insertas unes la fecha y hora como mostre ams arriba

    cuando recuperas los separas

    DateTime fecha = Convert.ToDateTime(reader["fecha"]);

     Fechaedit.Text = fecha .ToShortDateString();
    Timedit.Text = fecha .ToShortTimeString();

    el reader es un datareader donde recuperas los datos de tu tabla en el SELECT

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 29 de junio de 2015 17:45
  • Sr. buenos dias su fama lo antecede!!

    he visto muchos foros y todos tienen aportes de usted!! gracias por responder

    la berdad desconozco si se unan o no los datos mas adelante yo soy del area de aministracion y quiero ententer eso!! 

    todos mis registros en tiempo y forma son correctos  pero imaginemos un empleado que llega tarde!!

    y quiere checar como si fuera horario correcto asi que se dislpone a abrir la pagina esta por load ya trae la fecha y hora del sistema.

    se dispone y edita la hora (recordemos que ya no es hora de checar; entrada = 8:00 am; nuestro empleado llego tarde y son las 9:14am) entonces al darle al boton guargar checada recibe un mensaje con sus datos re entrada en el cual se da cuenta que se grabo as: "entrada, 29/06/2015, 9:14am" mi problema es como corrigo ese error quiero que muestre la hora del sistema pero que me deje editarla para poder hacer checadas a deshoras

    de antemano gracias

    lunes, 29 de junio de 2015 18:05
  • asi es imaginemos que llego tarde son las 9:14 am

    asi qeu me dispongo a hacer mi checada inicial y lleno los campos estado, fecha y hora se cargan con los del sistema y se ven asi:

    estado :  ENTRADA

    fecha: 29/06/2015

    hora: 9:14

    entonces hago la modificacion

     

    estado :  ENTRADA

    fecha: 29/06/2015

    hora: 8:00

    y le doy al boton grabar

    recibo un mensaje mostrando

    ENTRADA, 29/06/2015, 9:14

    cuando debio ser mi hora editada

    no tengo mas codigo estoy atorado en eso

    gracias por su paciencia

    lunes, 29 de junio de 2015 18:09
  • Julio,

    ¿Has revisado los valores que reciben los  parámetros fecha y hora en el método agregarchecada? Cerciórate que esté recibiendo la hora modificada es decir las 8:00. Si recibe las 9:14 dirigite a donde se está llamando el método para ver si no existe alguna condicional (regla de negocio) que esté actualizando los datos ingresados.

    lunes, 29 de junio de 2015 18:14
  • hola

    >>desconozco si se unan o no los datos mas adelante yo soy del area de aministracion

    ahh ok, pense que estabas diseñando la aplicacion

    puedes determinar los campos en la tabla de que tipo son ? seran quizas del tipo varchar

    la base que usas es Sql Server, no?

    en tu codigo usas parametros ? o sea el Parameters de SqlCommand

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 29 de junio de 2015 18:30
  • revisando el metodo esta asi:

    load

    Fechaedit.Text = DateTime.Now.ToShortDateString();
    Timedit.Text = DateTime.Now.ToShortTimeString();

    3.- el metodo checada es asi :

     private void agregarchecada(string estado, string fecha, string hora)

    {

     string estadochecada = estado;

      string horachecada = hora;
       string fechachecada = fecha;

     str = @"insert estado,fecha,hora into checadas values(@estado, @fecha,@hora )

    sqlcommand sqlcmd = new sqlcommand(str,conexion);

    conexion.open();

       

    sqlcmd.Parameters.AddWithValue("@fechachecada", fecha);
    sqlcmd.Parameters.AddWithValue("@estadochecada",estadochecada);
    sqlcmd.Parameters.AddWithValue("@horachecada", hora);

    sqlcmd.ExecuteNonQuery();
                conexion.Close();

    }

    4 .- en el boton gruardar asi:

    string estado = Convert.ToString(txtestado.Text);
    string fecha = Convert.ToString(deFecha.Text);
    string hora = Convert.ToString(txtTimedit.Text);

    agregarchecada(estado,  fecha,  hora)

    en el metodo al hacer debug hora tiene el valor del sistema algo estoy haciendo mal solo que no veo que??

    lunes, 29 de junio de 2015 18:43
  • pues si es necesario que desarrolle esto lo hare lo que buscaba es solucionarlo usted que me recomienda desarrollo desde cero ?? 

    revisando el metodo esta asi:

    load

    Fechaedit.Text = DateTime.Now.ToShortDateString();
    Timedit.Text = DateTime.Now.ToShortTimeString();

    3.- el metodo checada es asi :

     private void agregarchecada(string estado, string fecha, string hora)

    {

     string estadochecada = estado;

      string horachecada = hora;
       string fechachecada = fecha;

     str = @"insert estado,fecha,hora into checadas values(@estado, @fecha,@hora )

    sqlcommand sqlcmd = new sqlcommand(str,conexion);

    conexion.open();

       

    sqlcmd.Parameters.AddWithValue("@fechachecada", fecha);
    sqlcmd.Parameters.AddWithValue("@estadochecada",estadochecada);
    sqlcmd.Parameters.AddWithValue("@horachecada", hora);

    sqlcmd.ExecuteNonQuery();
                conexion.Close();

    }

    4 .- en el boton gruardar asi:

    string estado = Convert.ToString(txtestado.Text);
    string fecha = Convert.ToString(deFecha.Text);
    string hora = Convert.ToString(txtTimedit.Text);

    agregarchecada(estado,  fecha,  hora)

    en el metodo al hacer debug hora tiene el valor del sistema algo estoy haciendo mal solo que no veo que??


    lunes, 29 de junio de 2015 18:46
  • hola

    la db que usas es Sql Server ?

    los campos en la tabla de que tipo son ?

    en el insert te faltan parantesis

     str = @"INSERT INTO checadas (estado,fecha,hora) values(@estado, @fecha, @hora)";

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 29 de junio de 2015 18:57
  • la bd es sql server 2012

    los campos en la tabla son : 

    estado = nvarchar

    hora  = nvarchar

    fecha = datetime

    lunes, 29 de junio de 2015 19:16
  • ahh bien si el campo fecha es datetime no puedes asignar un string

    tienes que usar

    private void agregarchecada(string estado, DateTime fecha, string hora){

    //resto codigo

    }

    o sea debes enviar un datetime por parametro en el insert

    igual recuerda validar la estructura del insert como comente en la respuesta anterior

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 29 de junio de 2015 19:22