Problème de récupération de données dans la base de donnée

Inspiration_224 Messages postés 8 Date d'inscription samedi 12 mars 2022 Statut Membre Dernière intervention 13 mars 2022 - Modifié le 12 mars 2022 à 05:29
hypothetix Messages postés 136 Date d'inscription dimanche 19 janvier 2020 Statut Membre Dernière intervention 21 mai 2023 - 13 mars 2022 à 14:19
Bonjour.
Actuellement je travail sur une application winForm en C#, mais j'ai rencontre un souci.
Je veux récupérer les informations dans la base de donnée SQLite et les afficher dans un DataGridView
mais j'ai un message d'erreur l'ors de la récupération la chaine n'a pas été reconnue en tant que DateTime
valide.
format de la date dd/MM/yyyy HH:mm:ss

Quelqu'un peut m'aide??
Merci!

14 réponses

Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023 623
12 mars 2022 à 07:57
Bonjour

dans ma boule de cristal, je vois qu'il manque une pinte à la ligne 1664.

Ha tu voulais une réponse sérieuse? Et bien ce que tu veux convertir en date n'y ressemble pas

Ça n'est pas suffisant?

Alors il faut que tu donnes des éléments pour qu'on puisse y répondre.
A commencer par le bout de code qui plante (en précisant à quellle ligne exactement).
Pour poster ton code il faut faire comme décrit là https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code ça c'est pour qu'on puisse comprendre comment tu manipules tes données (y'a 1000 façons de faire) et ou tu essayes cette conversion.
Ensuite, il faut nous donner le contenu des variables au moment du planté, ça c'est pour qu'on puisse comprendre pourquoi la conversion ne marche pas
0
Inspiration_224 Messages postés 8 Date d'inscription samedi 12 mars 2022 Statut Membre Dernière intervention 13 mars 2022
Modifié le 17 mars 2022 à 22:46
Bonjour encore de retour voici le code qui plante.

       try
            {
                dgv.Rows.Clear();
                con.openConnect();
                string sql = "SELECT date_entree,quantite,reference,type_pneu FROM stock_entrant";
                SQLiteCommand cmd = new SQLiteCommand(sql, con.getConnexion);
                SQLiteDataReader data = cmd.ExecuteReader();
                while (data.Read())
                {
                    dgv.Rows.Add(data.GetValue(0), data.GetValue(1),
                        data.GetValue(2), data.GetValue(3));
                }
                con.closeConnect();

            }catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


En fait je veux afficher les donnez dans mon datagridview, j'utilise base de donnee SQLite et dans la table stock_entrant la première colonne correspond a la date du type date.
Mais il génère une exception la chaine n'a pas été reconnue comme DateTime valide.

Merci
0
Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023 623
13 mars 2022 à 09:13
Tu n'a pas bien lu le tuto concernant les balises de code.
Pour tes prochains messages, merci de le relire et d'appliquer correctement.

Ensuite, la façon dont tu peuples ton datagridview n'utilise pas le potentiel de C#.
Ce que tu devrais faire, c'est écrire un objet "métier" qui correspond à tes données, charger une collection de ces données et à la fin binder la collection sur le datagridwiev.

Dans ce bout de code, il n'y a pas de conversion en DateTime, à mon avis ça n'est pas là que ça plante.
Pour en être sûr, enlèves, le try / catch et relance ton programme avec Visual Studio.

Si Visual Studio s'arrête là, alors tu pourras nous donner les éléments que je t'ai demandé dans mon premier messages.
Si VS ne s'arrête pas là, c'est que ça plante ailleurs
0
Inspiration_224 Messages postés 8 Date d'inscription samedi 12 mars 2022 Statut Membre Dernière intervention 13 mars 2022
13 mars 2022 à 10:34
J'ai enlevé le try/catch et bien sur le programme plante juste a ce niveau
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Inspiration_224 Messages postés 8 Date d'inscription samedi 12 mars 2022 Statut Membre Dernière intervention 13 mars 2022
Modifié le 13 mars 2022 à 10:47
En plus vous avez dit ci haut
la façon dont tu peuples ton datagridview n'utilise pas le potentiel de C#.
Ce que tu devrais faire, c'est écrire un objet "métier" qui correspond à tes données, charger une collection de ces données et à la fin binder la collection sur le datagridwiev
.

s'il vous plait vous pouvez me donner un exemple de code de cette manière je suis débutant en c#
0
Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023 623
13 mars 2022 à 11:04
J'ai enlevé le try/catch et bien sur le programme plante juste a ce niveau

Et donc les informations demandées?


s'il vous plait vous pouvez me donner un exemple de code de cette manière je suis débutant en c#

Vu que tu n'as toujours pas donné les informations demandées, non, tu n'as pas acquis les bases nécessaires.

Je suppose que comme beaucoup de débutants (moi y compris il y a quelques années) tu t'es lancé dans ton projet en négligeant d'apprendre les bases. Et bien ça ne marche pas.

Commence par lire ce cours https://tahe.developpez.com/dotnet/csharp/ de A à Z, même les chapitres que tu trouves simples. Ce cours ne fera pas de toi un codeur hors pair, mais il te donneras le socle nécessaire pour commencer ta formation.
0
Inspiration_224 Messages postés 8 Date d'inscription samedi 12 mars 2022 Statut Membre Dernière intervention 13 mars 2022
Modifié le 13 mars 2022 à 11:25
Merci pour tes conseil.

Mais si j'enleve les try/catch il genere une exception de type
 System.FormatException : 'La chaîne n'a pas été reconnue en tant que DateTime valide.'

voici les details:
System.FormatException
  HResult=0x80131537
  Message=La chaîne n'a pas été reconnue en tant que DateTime valide.
  Source=mscorlib
  Arborescence des appels de procédure :
   à System.DateTimeParse.ParseExactMultiple(String s, String[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style)
   à System.DateTime.ParseExact(String s, String[] formats, IFormatProvider provider, DateTimeStyles style)
   à System.Data.SQLite.SQLiteConvert.ToDateTime(String dateText, SQLiteDateFormats format, DateTimeKind kind, String formatString)
   à System.Data.SQLite.SQLite3.GetDateTime(SQLiteStatement stmt, Int32 index)
   à System.Data.SQLite.SQLite3.GetValue(SQLiteStatement stmt, SQLiteConnectionFlags flags, Int32 index, SQLiteType typ)
   à System.Data.SQLite.SQLiteDataReader.GetValue(Int32 i)
   à AFRI_ASIA.UC.UC_list_enter_pneus.UC_list_enter_pneus_Load(Object sender, EventArgs e) dans D:\PROJET C#\PROJET VS2019\AFI_ASIA\AFRI ASIA\AFRI ASIA\UC\UC_list_enter_pneus.cs :ligne 43
   à System.Windows.Forms.UserControl.OnLoad(EventArgs e)
   à System.Windows.Forms.UserControl.OnCreateControl()
   à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   à System.Windows.Forms.Control.CreateControl()
   à System.Windows.Forms.Control.SetVisibleCore(Boolean value)


et voic le code sans try/catch

 dgv.Rows.Clear();
            con.openConnect();
            string sql = "SELECT date_entree,quantite,reference,type_pneu FROM stock_entrant";
            SQLiteCommand cmd = new SQLiteCommand(sql, con.getConnexion);
            SQLiteDataReader data = cmd.ExecuteReader();
            while (data.Read())
            {
                dgv.Rows.Add(data.GetValue(0), data.GetValue(1),
                    data.GetValue(2), data.GetValue(3));
            }
            con.closeConnect();


Merci .
0
Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023 623
13 mars 2022 à 11:43
Je t'ai demandé à quelle ligne ça plante et le contenu des variables à cette ligne.

C'est la base de la base pour pouvoir débogguer, et on ne peut pas coder sans débboguer (on fait toujours des erreurs qu'il faut corriger).
Donc si tu veux de l'aide, tu commences par le cours de Tahé pour apprendre les base de C# (je ne sais plus s'il y a un chapitre sur le débbogage, je l'ai lu en 2008 ou 2009...) Si ça n'est pas le cas, une fois que tu l'auras lu, je te donnerai un tuto sur le débbogage et après seulement on se penchera sur ton problème.
0
Inspiration_224 Messages postés 8 Date d'inscription samedi 12 mars 2022 Statut Membre Dernière intervention 13 mars 2022
Modifié le 13 mars 2022 à 11:55
Au faite je l'ai deja dit depuis je pense, le programme plante au niveau de l'ajout des donnees dans le dataGridView

dgv.Rows.Add(data.GetValue(0), data.GetValue(1),data.GetValue(2), data.GetValue(3));

En levant une exception de type System.FormatException avec le message d'erreur La chaîne n'a pas été reconnue en tant que DateTime valide

La seule variable concerné c'est l'objet data (SQLiteDataReader data = cmd.ExecuteReader()) qui stock le resultat de la requette

Merci d'avance aussi.
0
Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023 623
13 mars 2022 à 12:04
Au faite je l'ai deja dit depuis je pense, le programme plante au niveau de l'ajout des donnees dans le dataGridView
non tu ne l'avais pas dit

La seule variable concerné c'est l'objet data (SQLiteDataReader data = cmd.ExecuteReader()) qui stock le resultat de la requette
cette ligne n'est pas au niveau de l'ajout des données dans le datagridview.
Et tu ne donnes toujours pas le contenu des variables.

Ce qui prouve que tu ne comprends ni ton code, ni ce que je te demande.

Je conçois que tu sois impatient sur ton problème.
Mais si je t'expliques de A à Z tout ce que tu devrais savoir pour commencer à le résoudre ça va me prendre 10 jours.
Pas que tu aies besoin d'autant de temps, mais parce qu'une discussion sur un forum est longue, là je suis à la maison donc je réponds assez vite, mais plus tard ça ne sera pas le cas et donc tu devras attendre attendre et attendre encore. En plus rédiger un message me prends du temps, car j'essaye d'être clair et de faire le moins de fautes possible.

D'une part je n'ai pas 10 jours à t'accorder et si je les avais je n'aurais pas envie de le faire car il existe un cours tout fait que tu pourrais correctement lire en 2 ou 3 jours.

Tant que tu n'auras pas fait l'effort de lire avec attention ce cours, je ne te répondrai plus et je suis quasiment le seul à répondre en C# sur ce forum.
0
Inspiration_224 Messages postés 8 Date d'inscription samedi 12 mars 2022 Statut Membre Dernière intervention 13 mars 2022
Modifié le 13 mars 2022 à 12:32
Je vous remerci toujour, mais au faite c'est peut etre la question qui n'etait pas bien precise a mon avie qu'a cela ne tienne le contenu de la variable qui fait planter le programme c'est une date:
voici un exemple de date enregistré dans la base de donnée : '2022/08/03 12:58:20'
Donc quant je fait la requette pour recuperer les donné (SQLiteDataReader data = cmd.ExecuteReader()) la prémière colonne de l'objet data correspont à data.GetValue(0) et donc le contenu est la date.
Pour rappel Si j'enlève cette colonne (data.GetValue(0)) dans
 dgv.Rows.Add(data.GetValue(0), data.GetValue(1),data.GetValue(2), data.GetValue(3));

le programme ne plante pas

Bon j'espère j'ai été claire maintenant.
Merci de m'avoir aidé
0
Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023 623
13 mars 2022 à 12:38
Tant que tu n'auras pas fait l'effort de lire avec attention ce cours, je ne te répondrai plus et je suis quasiment le seul à répondre en C# sur ce forum.
0
Inspiration_224 Messages postés 8 Date d'inscription samedi 12 mars 2022 Statut Membre Dernière intervention 13 mars 2022
13 mars 2022 à 12:43
Merci beaucoup
0
hypothetix Messages postés 136 Date d'inscription dimanche 19 janvier 2020 Statut Membre Dernière intervention 21 mai 2023 6
Modifié le 16 mars 2022 à 13:52
Bonjour,

Une simple piste pour ne pas gâcher ton Dimanche

Dans ton premier message :
la chaine n'a pas été reconnue en tant que DateTime valide.
format de la date dd/MM/yyyy HH:mm:ss

Dans ton dernier message : voici un exemple de date enregistrée dans la base de donnée :
'2022/08/03 12:58:20'

Je ne connais rien á SQLite mais j'y vois une source d'erreur, peut-être un problème de choix de langue.

Bon courage et suit les conseils avisés de Whismeril.
0