Impossibile convertire il valore di data / ora di MySQL in System.DateTime


86

Ottengo questo errore:

Impossibile convertire il valore di data / ora di MySQL in System.DateTime

mentre cerco di recuperare i dati da un database MySQL. Ho il tipo di dati della data nel mio database MySQL. Ma durante il recupero nel mio datatable, viene visualizzato l'errore sopra.

Come posso risolvere questo problema?


Risposte:


51

Se cerco su Google "Impossibile convertire il valore data / ora MySQL in System.DateTime" vedo numerosi riferimenti a un problema di accesso a MySQL da Visual Studio. È questo il tuo contesto?

Una soluzione suggerita è:

Questo non è un bug ma un comportamento previsto. Si prega di controllare il manuale sotto le opzioni di connessione e impostare "Consenti zero datetime" su true, come nelle immagini allegate, e l'errore scomparirà.

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


2
Suggerisco di non utilizzare "0000-00-00 00:00:00" come dati nelle colonne data / ora. Piuttosto usa valori di data reali nei tuoi dati, se stai usando .net. Tuttavia, MySQL può gestire qualsiasi data. È necessario eseguire la scansione di tutti i valori di data / ora.
Bimal Poudel

215

È necessario aggiungere Convert Zero Datetime=Truealla stringa di connessione, ad esempio:

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

3
Grazie! FYI: Questo va sulla stringa di connessione MySQL, non la stringa di connessione di SQL Server.
jp2code

mi ha fatto risparmiare tempo. Ha funzionato come un fascino
Puntatore Nullo

+1 - Perfetto! Avevo zero datetime perché quando la colonna non era piena scrivi sulla tabella MySQL lo zero datetime. Preferisco cambiarlo da ora per 0970-01-01.Grazie mille
Drako

21

ho aggiunto sia Convert Zero Datetime=True& Allow Zero Datetime=Truee funziona bene


3

Trascina il valore datetime verso il basso come una stringa e fai una DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);Dovresti solo impostare il formato della data per la data che stai tornando dal database. Molto probabilmente lo è yyyy-MM-dd HH:mm:ss. Almeno è per me.

Controlla qui maggiori informazioni sul DateTime.ParseExact



2

Ho anche affrontato lo stesso problema e ho ottenuto il nome delle colonne ei suoi tipi. Quindi lancia (col_Name as Char) dal nome della tabella. Da questo modo ottengo il problema come "0000-00-00 00:00:00", quindi aggiorno come data e ora valide in cui l'errore scompare per il mio caso.


1

È possibile rendere l'applicazione completamente compatibile con la data e l'ora utilizzate da MySql. Quando l'applicazione viene eseguita in fase di esecuzione, fornire questo codice. Per prima cosa vai agli eventi dell'applicazione. Nell'elenco degli strumenti

  1. Vai al progetto
  2. Proprietà del progetto
  3. Seleziona la scheda Applicazione
  4. Visualizza gli eventi dell'applicazione

Questo aprirà un nuovo file. Questo file contiene il codice utilizzato all'inizio dell'applicazione.

Scrivi questo codice in quel nuovo file:

 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

Anziché modificare la stringa di connessione, è possibile utilizzare la IsValidDateTimeproprietà MySqlDateTimedell'oggetto per determinare se è possibile eseguire il cast dell'oggetto come file DateTime.

Avevo uno scenario in cui stavo cercando di caricare i dati da una colonna "UpdateTime" che era impostata esplicitamente solo quando c'era un aggiornamento alla riga (al contrario di InsertedTime che era sempre impostato). Per questo caso, ho usato il MySqlDataReader.GetMySqlDateTimemetodo in questo modo:

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

0

se "allow zero datetime = true" non funziona, utilizzare le seguenti soluzioni: -

Aggiungi questo alla tua stringa di connessione: "allow zero datetime = no" - che ha fatto funzionare perfettamente il cast del tipo.


0

In un report Stimulsoft aggiungere questo parametro alla stringa di connessione (fare clic con il tasto destro su datasource-> modifica)

Convert Zero Datetime=True;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.