none
Obtener fecha para ingresar a una base de Datos en MySql

    Pertanyaan

  • Buenas Tardes,

    Es la primera vez ke utilizo este recurso, de forma que agradezco la información que me puedan brindar.

    En este momento estoy desarrollando una pequeña aplicacion de windows, en la cual necesito que cuando presione un boton guarde una informacion en una tabla de una BD creada previamente en MySQL. En cuanto a la conexion con la BD y el leer o escribir info en la base de datos no me implico gran problema, lo que se me ha dificultado, es que deseo ingresar la fecha, por lo cual lo he realizado de la siguiente forma:

    private void InsertarDatos()

    {

    string Consulta = "INSERT INTO DATOS(idDatos,Fecha) VALUES (9,'" + DateTime.Now + "')";

    MySqlConnection cnn = new MySqlConnection(this.ConexionBaseDatos);

    MySqlCommand mc = new MySqlCommand(Consulta, cnn);

    cnn.Open();

    mc.ExecuteNonQuery();

    cnn.Close();

    CargarDatos();

    }

    el anterior metodo lo llamo mediante un evento click y la conexion a la BD de datos se hizo previamente, el resultado al ejecutarse el anterior metodo sigue a continuacion:

    DD/MM/AAAA HRA:MIN:SEG  -------- Ej : 13/03/2009 0:00:00


    Una solucion preliminar que considere para obtener la informacion que necesito (es decir unicamente la fecha y eliminar la infomacion de la hora la cual no necesito, fue la siguiente)

    private void InsertarDatos()

    {

    string Consulta = "INSERT INTO DATOS(idDatos,Fecha) VALUES (9,'" + DateTime.Now.Day + "/"+ DateTime.Now.Month + "/"+ DateTime.Now.Year + "')";

    MySqlConnection cnn = new MySqlConnection(this.ConexionBaseDatos);

    MySqlCommand mc = new MySqlCommand(Consulta, cnn);

    cnn.Open();

    mc.ExecuteNonQuery();

    cnn.Close();

    CargarDatos();

    }

    Y el resultado generado en la base de datos fue la siguiente:

    DD/MM/AAAA ---------- Ej: 13/3/2009


    Mis preguntas son las siguiente:

    1. Existe otra forma de obtener la fecha sin necesidad de "partir" la informacion.
    2. Dado el caso en que la forma adecuada sea la segunda posibilidad que nombre, en el momento de hacer una consulta, puede llegar a presentar un problema al interpretar la informacion de la base de datos como una fecha?


    Muchas gracias, y espero atento a sus respuestas



    13 Maret 2009 21:52

Jawaban

  • hola,

    si necesitas dar formato a una fecha podrias hacer uso de DateTime.ToString(), recuerda que este puede recibir un parametro de formato.

    O sea podrias hacer algo como:

    string Consulta = "INSERT INTO DATOS(idDatos,Fecha) VALUES (9,'" + DateTime.Now.ToString("dd/MM/yyyy")+ "')";

    esto equivale a lo que tu lograste hacer partienedo la fecha en tres partes.

    Aqui tienes un link con una excelente explicacion de patrones de jemplo para dar foramtos a las fechas

    DateTime.ToString() Patterns

    Easy String to DateTime, DateTime to String and Formatting


    Con respecto a la segunda consulta, te puedo decir que depende, puede que no tengas ningun problema o puede que lo tengas, yo ultimamente estoy trabajando con sql server y no he tenido problemas, pero tambien trabaje con Access y ahi si que se me complicaban las cosas.
    El problema principalmente viene por la forma en que se instala la db, o se configuran los clientes, o sea que cultura se esta usando en cada momento, ya que si usas la de en-US, es una cosa pero si usas la es-AR, es muy distinta, con los signos de puntuacion tambien tendras problema en este caso.

    Yo te recomendaria que realices alguna prueba de concepto, o sea create una base de prueba, con alguna tabla que use datos del tipo fecha y realiza algunas consultas con desde una aplicacion de test, a ver con que te encuentras, puede que este todo ok, o puede que no, pero por lo menos no se te presenta cuando estas a full con el desarrollo y puedes realziar pruebas en un entorno que es de test y no ensucias tu codigo de produccion.

    Yo recuerdo que el Access por ejemplo cuando trabajabas con fechas requerias que la misma este encerrada entre #, para respetar el formato, puede que MySql tenga algunas cosas de esas, por eso te recomendaba la aplicacion de concepto, para que investigues antes de toparte con el tema en produccion.


    Espero te sea de utilidad
    Saludos



    Leandro Tuttini
    13 Maret 2009 22:41
  • hola,

    Si es que vas a almacenar fechas lo ideal es que sea del tipo fecha (date o datetime), o sea sino encuentras restricciones o problemas esa es la mejor decision.

    Ahora como te comente por ahi te podria convenir realizar algun programa bien simple que te permita jugar con algunos datos y ver como respende tu db a las consultas e inserciones, sino encuentras problemas y te es simple suar el tipo datetime en tu db, selecciona ese tipo de datos.
    Te lo decia para que evites encontrarte con esto en medio de desarrollo.

    Si la base fuera sql server la decision ni se piensa, es del tipo fecha, ya que se trabaja muy bien con esta.
    Ahora como te habia comentado si fuera MSAccess, por ahi la cosa hay que considerarla un poco mas ya que justamente realizando pruebas encontre que no es muy facil manupularlas sin problemas.

    Lo que si te recomiendo es que no uses el tipo de dato Varchar, o string para una fecha, usa datetime, o usa numerico (int).
    Y si usas int, guarda la fecha en formato yyyyMMdd.

    Bueno espero te sirva la recomendacion
    Saludos

    Leandro Tuttini
    16 Maret 2009 18:29

Semua Balasan

  • Que tipo de datos es la columna Fecha, en tu tabla?

    Por otro lado la recomendación es usar parametros en lugar de armar el query en String, revisa este ejemplo: http://www.programmingado.net/a-389/MySQL-NET-parameters-in-query.aspx, usa el MySqlParameter. Es lo mas recomendable (en cuanto a seguridad, SQL Injection), y mas ordenado.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    13 Maret 2009 22:39
  • hola,

    si necesitas dar formato a una fecha podrias hacer uso de DateTime.ToString(), recuerda que este puede recibir un parametro de formato.

    O sea podrias hacer algo como:

    string Consulta = "INSERT INTO DATOS(idDatos,Fecha) VALUES (9,'" + DateTime.Now.ToString("dd/MM/yyyy")+ "')";

    esto equivale a lo que tu lograste hacer partienedo la fecha en tres partes.

    Aqui tienes un link con una excelente explicacion de patrones de jemplo para dar foramtos a las fechas

    DateTime.ToString() Patterns

    Easy String to DateTime, DateTime to String and Formatting


    Con respecto a la segunda consulta, te puedo decir que depende, puede que no tengas ningun problema o puede que lo tengas, yo ultimamente estoy trabajando con sql server y no he tenido problemas, pero tambien trabaje con Access y ahi si que se me complicaban las cosas.
    El problema principalmente viene por la forma en que se instala la db, o se configuran los clientes, o sea que cultura se esta usando en cada momento, ya que si usas la de en-US, es una cosa pero si usas la es-AR, es muy distinta, con los signos de puntuacion tambien tendras problema en este caso.

    Yo te recomendaria que realices alguna prueba de concepto, o sea create una base de prueba, con alguna tabla que use datos del tipo fecha y realiza algunas consultas con desde una aplicacion de test, a ver con que te encuentras, puede que este todo ok, o puede que no, pero por lo menos no se te presenta cuando estas a full con el desarrollo y puedes realziar pruebas en un entorno que es de test y no ensucias tu codigo de produccion.

    Yo recuerdo que el Access por ejemplo cuando trabajabas con fechas requerias que la misma este encerrada entre #, para respetar el formato, puede que MySql tenga algunas cosas de esas, por eso te recomendaba la aplicacion de concepto, para que investigues antes de toparte con el tema en produccion.


    Espero te sea de utilidad
    Saludos



    Leandro Tuttini
    13 Maret 2009 22:41
  • sergio.msn dijo:

    Que tipo de datos es la columna Fecha, en tu tabla?

    Por otro lado la recomendación es usar parametros en lugar de armar el query en String, revisa este ejemplo: http://www.programmingado.net/a-389/MySQL-NET-parameters-in-query.aspx, usa el MySqlParameter. Es lo mas recomendable (en cuanto a seguridad, SQL Injection), y mas ordenado.

    Saludos,


    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.



    Gracias de antemano por las respuestas que me han entregado.

    Respondiendo a su pregunta, el tipo de dato en la Columna fecha, aun no lo he decidido, he hecho pruebas tanto de tipo VARCHAR como de DATE y no he definido ni he tenido el suficiente criterio para seleccionar que tipo de dato usar , (seria muy util, si me recomendara que tipo de dato usar, para facilitar tanto la consulta como la escritura)..

    De nuevo muchas gracias y espero sus comentarios
    16 Maret 2009 18:19
  • hola,

    Si es que vas a almacenar fechas lo ideal es que sea del tipo fecha (date o datetime), o sea sino encuentras restricciones o problemas esa es la mejor decision.

    Ahora como te comente por ahi te podria convenir realizar algun programa bien simple que te permita jugar con algunos datos y ver como respende tu db a las consultas e inserciones, sino encuentras problemas y te es simple suar el tipo datetime en tu db, selecciona ese tipo de datos.
    Te lo decia para que evites encontrarte con esto en medio de desarrollo.

    Si la base fuera sql server la decision ni se piensa, es del tipo fecha, ya que se trabaja muy bien con esta.
    Ahora como te habia comentado si fuera MSAccess, por ahi la cosa hay que considerarla un poco mas ya que justamente realizando pruebas encontre que no es muy facil manupularlas sin problemas.

    Lo que si te recomiendo es que no uses el tipo de dato Varchar, o string para una fecha, usa datetime, o usa numerico (int).
    Y si usas int, guarda la fecha en formato yyyyMMdd.

    Bueno espero te sirva la recomendacion
    Saludos

    Leandro Tuttini
    16 Maret 2009 18:29

  • Lo que si te recomiendo es que no uses el tipo de dato Varchar, o string para una fecha, usa datetime, o usa numerico (int).
    Y si usas int, guarda la fecha en formato yyyyMMdd.


    Gracias por su respuesta Leandro, de hecho en este momento estoy haciendo las pruebas en una mini aplicacion, para como ud dice, hacer las pruebas y jugar con la base de datos, pero me causo curiosidad el hecho de que cuando al iniciar mi aplicacion.

    Cuando finalice mis pruebas les comentare los resultados, pero veo como la posibilidad mas rapida utilizar el metodo que me sugirio (DateTime.Now.ToString ("dd/MM/yyyy"))...

    Gracias de nuevo


    16 Maret 2009 18:53

  • Excelente, que bueno que te sirvan los comentarios o sugerencias.

    Cuando llegues a una conclusion, puedes postear el resultado, asi les sirven a alguien que ande con el mismo problema.


    Saludos
    Leandro Tuttini
    16 Maret 2009 19:42