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

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

dkretz
fuente
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
agni
fuente
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

Kiddo
fuente
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

Tim Meers
fuente
2

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

Jakob Alexander Eichler
fuente
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.

Singaravelan
fuente
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
KHALID
fuente
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;
    }
}
P Walker
fuente
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.

Manoher Kumar
fuente
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;
Mostafa Asadi
fuente