2010-05-29 7 views
10

J'utilise ibatis et C#. J'obtiens un résultat d'une requête select qui a CreatedDate comme l'un des champs. Le type de données de CreatedDate dans Mysql est Date. J'affecte le jeu de résultats de la requête de sélection à un Ilist < DeliveryClass>.Impossible de convertir la valeur date/heure MySQL en System.DateTime

Voici la classe DeliveryClass CreatedDate en tant que DateTime. Lorsque je lance l'application, je reçois Impossible de convertir la valeur de date/heure MySQL en System.DateTime. Quel pourrait être le problème?

Répondre

6

Le problème dans le format, en fait mysql ont un format différent (aaaa-mm-jj) pour la date/heure type de données et pour résoudre ce problème, utilisez la bibliothèque de connecteur mysql pour .net d'ici http://dev.mysql.com/downloads/connector/net/ il sera donner un autre type de données pour la date/heure appelée MysqlDateTime

ou vous pouvez formater les données de date/heure dans votre instruction SQL en utilisant DATE_FORMAT (date, format) vous pouvez obtenir plus de détails d'ici http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

mais Je ne le recommande pas car vous perdrez la puissance de la date/tim e type de données (par exemple vous ne pouvez pas comparer) parce que maintenant vous allez le convertir en chaîne mais je pense qu'il sera utile dans les rapports

+0

mise à jour du connecteur au dernier n'a pas résolu mon problème –

+0

le connecteur elle-même ne résoudra pas votre problème, il dépend comment vous récupérez vos données ?? par exemple j'ai utilisé mon modèle de génération de doodads pour remplacer la propriété de récupération pour le datetime (lire la valeur du datatable => le convertir de mysqldatetime en .net datetime) comment récupérer vos données? –

2

Il pourrait être en dehors de la plage d'un objet DateTime. J'ai déjà vu ça plusieurs fois. Essayez de changer le sql pour renvoyer la date actuelle au lieu de votre colonne et voir si elle vient à travers.

3

Je résolu mon problème en définissant la valeur par défaut de la colonne des données comme nulles plutôt que d'utiliser 00:00:00 0000-00-00:

mise à jour date de set de table = null

52
MySqlConnection connect = new MySqlConnection("server=localhost; database=luttop; user=root; password=1234; pooling = false; convert zero datetime=True"); 

Ajout convert zero datetime=True à la chaîne de connexion va automatiquement convertir 0000-00-00 valeurs de la date à DateTime.MinValue().

qui est RESOUDRE

7

Ajout « convertir zéro datetime = True » à la chaîne de connexion a résolu mon problème.

<connectionStrings> <add name="MyContext" connectionString="Datasource=localhost;Database=MyAppDb;Uid=root;Pwd=root;CHARSET=utf8;convert zero datetime=True" providerName="MySql.Data.MySqlClient" /> </connectionStrings> 

Cordialement PS