Impossible de convertir la valeur de date / heure MySQL en System.DateTime


85

J'obtiens cette erreur:

Impossible de convertir la valeur de date / heure MySQL en System.DateTime

pendant que j'essaye de récupérer les données d'une base de données MySQL. J'ai le type de données de date dans ma base de données MySQL. Mais tout en le récupérant dans ma table de données, il obtient l'erreur ci-dessus.

Comment puis-je réparer cela?


Réponses:


51

Si je cherche sur Google "Impossible de convertir la valeur de date / heure MySQL en System.DateTime", je vois de nombreuses références à un problème d'accès à MySQL à partir de Visual Studio. Est-ce votre contexte?

Une solution suggérée est:

Ce n'est pas un bogue mais un comportement attendu. Veuillez consulter le manuel sous les options de connexion et définir "Autoriser l'heure zéro" sur true, comme sur les images jointes, et l'erreur disparaîtra.

Référence: http://bugs.mysql.com/bug.php?id=26054


2
Je suggère de ne pas utiliser «0000-00-00 00:00:00» comme données dans les colonnes de date / heure. Utilisez plutôt des valeurs de date réelles dans vos données - si vous utilisez .net. Cependant, MySQL peut gérer toutes les dates. Vous devez parcourir toutes vos valeurs de date / heure.
Bimal Poudel le

212

Vous devez ajouter Convert Zero Datetime=Trueà votre chaîne de connexion, par exemple:

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

3
Merci! FYI: Cela va sur la chaîne de connexion MySQL - pas la chaîne de connexion SQL Server.
jp2code

a sauvé mon temps. A travaillé comme un charme
Null Pointer

+1 - Parfait! J'avais zéro date-heure parce que lorsque la colonne n'était pas remplie, écrivez sur la table MySQL la date zéro. Je préfère le changer à partir de maintenant pour le 0970-01-01 Merci beaucoup
Drako

21

i ajouté les deux Convert Zero Datetime=Trueet Allow Zero Datetime=Trueil fonctionne très bien


3

Tirez la valeur de date / heure vers le bas sous forme de chaîne et effectuez une opération. DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);Vous devez simplement définir le format de date pour la date à laquelle vous renvoyez de la base de données. Très probablement yyyy-MM-dd HH:mm:ss. Au moins c'est pour moi.

Vérifiez ici plus d'informations sur le DateTime.ParseExact



2

J'ai également rencontré le même problème, et j'ai obtenu le nom des colonnes et ses types. Puis cast (col_Name comme Char) à partir du nom de la table. De cette façon, j'obtiens le problème en tant que «0000-00-00 00:00:00», puis je mets à jour comme date et heure valides, l'erreur disparaît pour mon cas.


1

Vous pouvez rendre l'application entièrement compatible avec la date et l'heure utilisées par MySql. Lorsque l'application s'exécute au moment de l'exécution, fournissez ce code. Accédez d'abord aux événements de l'application. Dans la liste des outils

  1. Aller au projet
  2. Propriétés du projet
  3. Sélectionnez l'onglet Application
  4. Afficher les événements d'application

Cela ouvrira un nouveau fichier. Ce fichier contient du code utilisé au démarrage de l'application.

Écrivez ce code dans ce nouveau fichier:

 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

Plutôt que de modifier la chaîne de connexion, vous pouvez utiliser la IsValidDateTimepropriété de l' MySqlDateTimeobjet pour vous aider à déterminer si vous pouvez convertir l'objet en DateTime.

J'ai eu un scénario dans lequel j'essayais de charger des données à partir d'une colonne "UpdateTime" qui n'était explicitement définie que lorsqu'il y avait une mise à jour de la ligne (par opposition à InsertedTime qui était toujours défini). Pour ce cas, j'ai utilisé la MySqlDataReader.GetMySqlDateTimeméthode comme ceci:

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

0

si "allow zero datetime = true" ne fonctionne pas, utilisez les sollutions suivantes: -

Ajoutez ceci à votre chaîne de connexion: "allow zero datetime = no" - qui a fait fonctionner parfaitement le type cast.


0

Dans un rapport Stimulsoft, ajoutez ce paramètre à la chaîne de connexion (clic droit sur la source de données-> modifier)

Convert Zero Datetime=True;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.