SQLite ExecuteReader - & gt; DataTable.Load - & gt; FormatException (DateTime)
J'ai essayé de lire un échantillon de Comptoirs de base de données sqlite, mais obtenir une erreur sur certaines tables avec un datetime. Est-ce un problème de la base de données ou de mon Système.Les données.SQLite?
L'Exception est quelque chose comme: "la chaîne n'est pas valide DateTime"
http://system.data.sqlite.org/
De cource je peut lire les données enregistrées par moi-même avec de la bonne conversion de type datetime, mais ce n'est pas aussi performante que la lecture à l'aide d'une simple dt.Load()
SQLiteCommand dbCommand = myConnector.CreateCommand();
dbCommand.CommandText = "SELECT * FROM " + tablename;
SQLiteDataReader executeReader = dbCommand.ExecuteReader(CommandBehavior.SingleResult);
DataTable dt = new DataTable();
dt.Load(executeReader); //<-- FormatException
" bei Système.DateTimeParse.ParseExactMultiple(String s, String[]
formats, DateTimeFormatInfo dtfi, DateTimeStyles style)\r\n bei
Système.DateTime.ParseExact(String s, String[] formats, IFormatProvider
fournisseur de DateTimeStyles style)\r\n bei
Système.Les données.SQLite.SQLiteConvert.ToDateTime(String dateText,
SQLiteDateFormats format, DateTimeKind type)
c:\dev\sqlite\dotnet\System.Les données.SQLite\SQLiteConvert.cs:Zeile
322."
J'ai besoin d'une bonne aide à améliorer le code actuel.
source d'informationauteur masterchris_99
Vous devez vous connecter pour publier un commentaire.
Yep, j'ai connu le même problème, et j'ai trouvé une solution.
Tout d'abord, vous devez savoir pourquoi cela arrive.
http://www.sqlite.org/datatype3.html
**
**
Pour plus de la date/heure de fonctions, vous pouvez consulter cette page:
http://www.sqlite.org/lang_datefunc.html
SOLUTION:
Est juste un datetime fonction pour convertir votre compte valide .NET datatable format. Vous pouvez utiliser de quelqu'un à partir du lien ci-dessus, dans mon cas, je choisis:
ASTUCE 1
Si votre requête sur une vue, et vous ne pouvez pas toucher votre base de données, créez un point de vue différent ou quelque chose comme, vous êtes dans un peu de mal parce que le problème est sur la db côté comme je l'ai expliquer avant. Donc, la première solution est de remplacer la colonne d'une table avant de charger (un peu sale travail). Ou vous pouvez utiliser un Unix timbre sur un champ de texte, ou de toute souhaité timestamp.
Mais je pense que la meilleure solution est de créer votre requête sur votre application à partir de votre point de vue:
ASTUCE 2
Vous pouvez essayer aussi avec le SQLite Administrator et à jouer avec les fonctions date et heure avant pour vérifier le format.
ASTUCE 3
Être conscient de votre culture, la mondialisation a également, vous pouvez trouver un problème si vous changez la culture. Essayez à votre douce travailler avec un seul et afficher ce que vous voulez, pas que de la culture veut. Dans mon pays par exemple, nous utilisons le plus commun de ce format: jj/MM/aa et est une douleur, comme le point sur les nombres décimaux (nous utilisons une virgule)
ASTUCE 4
Si vous travaillez avec un assistant de connexion définis sur certains de rapport ou de l'entité ou quelque chose comme, assurez-vous de vérifier votre choix format de conversion. Pour exemple, j'utilise le plus commun et non problématique façon: ISO8601
Avez-vous essayez avec
SQLiteDataAdapter
comme si..Les Chances sont qu'il se comporte de la même, mais elle ne fait pas de mal d'essayer 😉
Voir cette publication sur SQLite DateTime et de stockage, sous le titre de Stockage DateTimes.