IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème avec la restitution des data depuis un Datatable


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 107
    Points
    107
    Par défaut Problème avec la restitution des data depuis un Datatable
    Bonjour,
    J'ai un Datatable dans lequel je charge le résultat de ma requête (ouverture de fichier sql).
    Le problème est que les données de types adcf et du types 1225,214 sortent bien (source = target) par contre les data du types 1242,24000 sont enregistrées comme 1242,24.

    En fait 1242,240000 passe en 1242,24.

    Y'a t'il une façon de forcer la datatable (si le problème est bien de la) de restitué la donnée exacte est non casté.

    Merci par avance.

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    un format number?
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    La DataTable, comme son nom l'indique, est un objet de la couche de données ; elle n'apparaît pas directement à l'écran. je suppose que tu utilses une dataGrid ou une DataGridView pour la visualiser dans ton appli.

    Auquel cas, tu peux spécifier une chaîne de format à tes colonnes. Par exemple, "N5" affichera tes valeurs décimales avec systématiquement 5 décimales.
    ಠ_ಠ

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    en fait je n'utilise pas de datagrid, je parse la datatable pour en extraire les données (écriture directement dans un fichier txt).

    Cdt,

  5. #5
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Je suppose donc que tu fais un truc du style result += table[col][row].ToString() ? (en très très gros)

    A ce moment-là, il faut que tu spécifies une chaîne de format au ToString, en fonction de la colonne.
    ಠ_ಠ

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 107
    Points
    107
    Par défaut
    Bonsoir,

    En fait je place ma commande (Select) dans un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Data.Odbc.OdbcCommand Query
    Après je le récupère le résultat dans un datatable comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResultDataTable.Load(Query.ExecuteReader());
    Après cela viens l'étape du parcours ou toutes les valeurs ne sont pas comme à la source (123,34000 -> 123,34)

    Cordialement,

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Et donc ? Résolu ? Tu arrives correctement à sérialiser ta DataTable dans un fichier ?
    ಠ_ಠ

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    C'est bête ce que tu dis. C'est simplement la représentation qui n'est pas bonne pour toi, la valeur est strictement la même.

    1234.34 == 1234.3400000

    Donc la question que tout le monde te pose : tes données là, tu les affiches ou pas ? Si oui, où et comment ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    C'est bête ce que tu dis. C'est simplement la représentation qui n'est pas bonne pour toi, la valeur est strictement la même.
    Peut être pour toi c'est bête mais pour moi désolé mais non
    Je sais que la valeur est la même "quand même", mais je cherche à ce que la restitution soit fidèle à l'origine (dans la database).

    Citation Envoyé par Skyounet Voir le message
    Donc la question que tout le monde te pose : tes données là, tu les affiches ou pas ? Si oui, où et comment ?
    Les données sont directement injecté dans un fichier Text et affiché si besoin dans un datagridview
    le type de la data peut être un string un char un int ... cela depond des données sources dans la base.

    Cordialement,

  10. #10
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par black_code Voir le message
    Peut être pour toi c'est bête mais pour moi désolé mais non
    Tu n'as pas compris ce que je voulais dire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double a = 1234.3400000;
     
    Console.WriteLine(a);
    Oh surprise ça affiche
    1234,34

    Sans surplus de zéro.

    Je crois que ce genre de choses fait partie de la logique de base de la représentation des nombres flottants ou pas dans un ordinateur.

    Pour toi ce qui n'est PAS BON, c'est la représentation visuelle, à l'écran, la représentation à mémoire, dans ta machine est parfaitement correcte, tes données sont strictements les mêmes que dans ta source de données. A toi de formater l'affichage que tu désires en fonction de tes souhaits.

    Les données sont directement injecté dans un fichier Text et affiché si besoin dans un datagridview
    Et ben lors de l'affichage dans ton fichier Text tu affiches tes flottants avec le nombre de décimales que tu désires.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 107
    Points
    107
    Par défaut
    Oui effectivement Skyounet si le fichier source (database) comporte des données avec un format strict (du genre 4 chiffres après la virgule pas plus) oui j'aurais tout reformaté (avec l'ajout de 0).

    mais les datas sources ne respectent pas un format strict d'ou mon poste.

    La question est : y'a t-il une façon de garder la data telle quelle sans "amélioration/réécriture" pour restitution dans un fichier ou par affichage?


    Cordialement,

  12. #12
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    C'est sous quel type dans ta base ? En flottant ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  13. #13
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Il faut bien faire la distinction entre une donnée numérique et sa représentation visuelle.

    En base de données, tu spécifies un nombre maximal de décimales. Par exemple en disant que le type est NUMBER(12, 5), tu demandes a ta bdd de stocker au max 5 décimales.

    Mais pour la base, 1.2 = 1.200 = 000001.200. C'est le NOMBRE 1.2, qui n'a pas de représentation particulière. ta question "y'a-t-il une façon de garder la data telle quelle" n'a pas de sens, parce qu'elle n'est stockée nulle part sous la forme 1.2000.

    Après, quand le nombre 1.2 apparaît devant nos yeux, c'est qu'il a été transformé en chaîne de caractères. Ca tombe bien, t'as la main sur le formatage de tes données.

    Donc : peux-tu nous montrer le code que tu utilises pour mettre ces données dans ton fichier texte ? et pour ta DataGridView, comme dit toute à l'heure, tu dois spécifier un format aux colonnes, style "N5".
    ಠ_ಠ

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 107
    Points
    107
    Par défaut
    Ouverture du fichier sql (sans les try et le reste)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.Data.Odbc.OdbcConnection ReaderConnectionHnd = new System.Data.Odbc.OdbcConnection(ConnectionString);
     
    ReaderConnectionHnd.Open();
    Lecture du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    System.Data.Odbc.OdbcCommand Query = ReaderDbfFileHnd.CreateCommand();
     
    Query.CommandText = "SELECT * FROM " + FileName;
    DataTable ResultDataTable = new DataTable();
     
    ResultDataTable.Load(Query.ExecuteReader());

    ma boucle de parse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    #c'est une fct qui prend en param : StreamWriter WriterTxtFileHnd, DataTable QueryResultTable
     
                    foreach (DataRow CurrentRow in QueryResultTable.Rows)
                    {
                        object[] RowArray = CurrentRow.ItemArray;
     
                        for (RowIndex = 0; RowIndex < RowArray.Length - 1; RowIndex++)
                        {
     
                            WriterTxtFileHnd.Write(RowArray[RowIndex].ToString() + SeparatorString.ToString());
                        }
                        WriterTxtFileHnd.Write(RowArray[RowIndex].ToString());
                        WriterTxtFileHnd.WriteLine();
                    }
    Merci par avance
    Cordialement,

  15. #15
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Comme je le disais dans mon premier post en fait

    Il y a probablement d'autres facons bien plus clean de faire, mais remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WriterTxtFileHnd.Write(RowArray[RowIndex].ToString() + SeparatorString);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    object cellValue = RowArray[RowIndex];
    if (cellValue is float)
      WriterTxtFileHnd.Write(((float)cellValue).ToString("N5") + SeparatorString);
    else
      WriterTxtFileHnd.Write(cellValue.ToString() + SeparatorString);
    est un bon debut.
    ಠ_ಠ

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 107
    Points
    107
    Par défaut
    Merci Guulh, je fait le test cette nuit.

    Merci

  17. #17
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Le plus propre a mon avis


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String.Format("{0:0.00000}",(double)cellvalue);
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 107
    Points
    107
    Par défaut
    J'ai fait le test avec ta methode Guulh mais ca ne marche pas, le resultat est le même.

    merci quand même, je vais continuer à chercher

    Cordialement,

  19. #19
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Tu a essayé le string.format ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  20. #20
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par black_code Voir le message
    J'ai fait le test avec ta methode Guulh mais ca ne marche pas, le resultat est le même.
    "Ca marche pas", c'est à dire ? Avec ce que je t'ai filé, là où avant tu aurais eu 1.5, tu as 1.50000. C'est pas ce que tu veux ?
    ಠ_ಠ

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/08/2011, 16h28
  2. Script avec gestion d'erreur pour loader des data depuis un csv
    Par olive_le_malin dans le forum Requêtes
    Réponses: 9
    Dernier message: 10/04/2009, 18h04
  3. Réponses: 2
    Dernier message: 16/01/2005, 23h18
  4. [SWT] Problème avec la transparence des PNG
    Par sirjuh dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 02/08/2004, 08h07
  5. Réponses: 11
    Dernier message: 16/12/2003, 19h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo