No se puede convertir el valor de fecha / hora de MySQL a System.DateTime


85

Me sale este error:

No se puede convertir el valor de fecha / hora de MySQL a System.DateTime

mientras intento recuperar los datos de una base de datos MySQL. Tengo el tipo de datos de fecha en mi base de datos MySQL. Pero al recuperarlo en mi tabla de datos, aparece el error anterior.

¿Cómo puedo arreglar esto?


Respuestas:


51

Si busco en Google "No se puede convertir el valor de fecha / hora de MySQL a System.DateTime", veo numerosas referencias a un problema para acceder a MySQL desde Visual Studio. ¿Ese es tu contexto?

Una solución sugerida es:

Esto no es un error, sino un comportamiento esperado. Consulte el manual en las opciones de conexión y configure "Permitir fecha y hora cero" en verdadero, como en las imágenes adjuntas, y el error desaparecerá.

Referencia: http://bugs.mysql.com/bug.php?id=26054


2
Sugiero no usar '0000-00-00 00:00:00' como sus datos en las columnas de fecha / hora. En su lugar, utilice valores de fecha real en sus datos, si está utilizando .net. Sin embargo, MySQL puede manejar cualquier fecha. Debe escanear todos los valores de fecha y hora.
Bimal Poudel

212

Debe agregar Convert Zero Datetime=Truea su cadena de conexión, por ejemplo:

server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True

3
¡Gracias! FYI: Esto va en la cadena de conexión de MySQL, no en la cadena de conexión de SQL Server.
jp2code

me salvó el tiempo. Funcionó como un encanto
Null Pointer

+1 - ¡Perfecto! Tenía cero fechas y horas porque cuando la columna no estaba llena, escriba en la tabla MySQL la fecha cero. Prefiero cambiarlo desde ahora por 0970-01-01.Muchas gracias
Drako

21

he añadido tanto Convert Zero Datetime=TrueY Allow Zero Datetime=Truey funciona bien


3

Baje el valor de fecha y hora como una cadena y haga una DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);. Solo necesitaría configurar el formato de fecha para la fecha en que regresa de la base de datos. Lo más probable es que lo sea yyyy-MM-dd HH:mm:ss. Al menos lo es para mí.

Consulta aquí más información sobre DateTime.ParseExact


2

Deje que MySql convierta su marca de tiempo de Unix en una cadena. Utilice la función mysql FROM_UNIXTIME (113283901)


2

También enfrenté el mismo problema y obtuve el nombre de las columnas y sus tipos. Luego lanza (col_Name como Char) desde el nombre de la tabla. De esta manera, obtengo el problema como '0000-00-00 00:00:00' y luego actualizo como fecha y hora válidas en que el error desaparece para mi caso.


1

Puede hacer que la aplicación sea totalmente compatible con la fecha y hora que utiliza MySql. Cuando la aplicación se ejecute en tiempo de ejecución, proporcione este código. Primero, vaya a Eventos de la aplicación. En la lista de herramientas

  1. Ir al proyecto
  2. Propiedades del proyecto
  3. Seleccione la pestaña Aplicación
  4. Ver eventos de aplicaciones

Esto abrirá un nuevo archivo. Este archivo contiene el código utilizado al inicio de la aplicación.

Escriba este código en ese nuevo archivo:

 Partial Friend Class MyApplication

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        My.Application.ChangeCulture("en")
        My.Application.ChangeUICulture("en")
        My.Application.Culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongTimePattern = "HH:mm:ss"
        My.Application.Culture.DateTimeFormat.ShortTimePattern = "HH:mm:ss"
    End Sub


End Class

1

En lugar de cambiar la cadena de conexión, puede usar la IsValidDateTimepropiedad del MySqlDateTimeobjeto para ayudarlo a determinar si puede convertir el objeto como un DateTime.

Tuve un escenario en el que estaba tratando de cargar datos de una columna "UpdateTime" que solo se configuraba explícitamente cuando había una actualización en la fila (a diferencia del InsertedTime que siempre estaba configurado). Para este caso, utilicé el MySqlDataReader.GetMySqlDateTimemétodo así:

using (MySqlDataReader reader = await MySqlHelper.ExecuteReaderAsync(...))
{
    if (await reader.ReadAsync())
    {
        DateTime? updateTime = reader.GetMySqlDateTime("UpdateTime").IsValidDateTime ? (DateTime?)reader["UpdateTime"] : null;
    }
}

0

si "permitir cero fecha y hora = verdadero" no funciona, utilice las siguientes soluciones: -

Agregue esto a su cadena de conexión: "allow zero datetime = no" - eso hizo que el tipo de conversión funcionara perfectamente.


0

En un informe de Stimulsoft, agregue este parámetro a la cadena de conexión (haga clic con el botón derecho en la fuente de datos-> editar)

Convert Zero Datetime=True;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.