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 :

Probleme de format de Date avec une base de donnée.


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Probleme de format de Date avec une base de donnée.
    Bonjour,

    Sur mon projet actuel, j'extrait des données d'une base tres grosse via un DataReader et je les copies dans un fichiers.

    En gros j'ai le code suivant (simplifié) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (lDataReader.Read())
    {
        for (int i = 0; i < lDataReader.FieldCount; i++)
        {
            lEcritureFichier.Write(lDataReader.GetValue(i));
        }
        lEcritureFichier.WriteLine("");
    }
    Le soucis, c'est qu'a un moment, dans une des colones, j'ai un champ DateTime.
    Je veux que ce champ apparaisse de façon complete et au format anglais :
    "yyyy-MM-dd hh:mm:ss.lll"
    Et dans mon fichier, elle apparait comme cela :
    "dd/MM/yyyy hh:mm:ss".

    Les milliseconde n'apparaissent meme pas !

    J'ai essayé les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTimeFormatInfo lFormatDate = new DateTimeFormatInfo();
    lFormatDate.FullDateTimePattern = "yyyy-MM-jj hh:mm:ss.lll" ;
    Mais cela ne change rien...

    Comment procedé ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Fais une recherche sur le Forum, question abordée au moins 30 fois par an !!!
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Désolé, j'ai cherché, comme toujours avant de creer un sujet, mais je n'ai pas trouvé de reponse exact a ma question.

    J'ai reussit à regler mon probleme en analysant dans ma boucle l'objet retourné par le get value et en mettant une conditions uniquement pour les objet de type DateTime...

    Cependant je prefererait une solution, ne serait-ce que pour la lisibilité, où je definit à l'avance, avant la boucle, le format que je veut pour le temps.

    Si un sujet repond deja à ma question, je m'en excuse. Mais peut tu me donner l'URL ?

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je dirais que plus qu'un sujet réponds à ta question, microsoft aussi réponds à ta question, cherche sur le site msdn des informations sur l'objet DateTimeFormat !!!!
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    J'ai bien sur cherché sur msdn, mais je ne trouve pas comment faire ce que je veut... Peut etre que quelqu'un peut me donner un exemple...
    Désolé d'etre insistant, mais j'ai beaucoup recherché avant de poser ma question ! :/

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je te conseille d'apprendre à chercher sur le net cela te sera utile :
    http://msdn2.microsoft.com/en-us/lib...fo(VS.71).aspx
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  7. #7
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Points : 444
    Points
    444
    Par défaut
    Moi je te conseille de regarder du côté des Types. Les types de Date issue de Sql ne sont pas les même que ce du FrameWork DotNet.
    Je ne suis pas sûr, mais depuis Sql server doit te retourner un SqlDateTime, alors que le framework Dotnet travail avec des System.DateTime. De plus les valeurs minimales et maximales autorisés ne doivent pas être les mêmes...

    à creuser...

  8. #8
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Et pourquoi pas ne pas utiliser les SqlParameters pour éviter ce genre de problème de dates ? Un bon petit tutos sur ce site, je ne vais comme meme pas faire la recherche pour toi
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  9. #9
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par Aspic Voir le message
    Et pourquoi pas ne pas utiliser les SqlParameters pour éviter ce genre de problème de dates ? Un bon petit tutos sur ce site, je ne vais comme meme pas faire la recherche pour toi
    Ah tiens, un évangélisé !

    Le tuto en question : http://webman.developpez.com/article.../sqlparameter/
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  10. #10
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Ah tiens, un évangélisé !

    Le tuto en question : http://webman.developpez.com/article.../sqlparameter/
    Tu vois on change avec le temps
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci pour toute ces reponses, malheuresement cela ne colle pas à ce que je recherche.

    ced600 > J'ai trouvé cette page, bien sur ! Mais cela na pas resolu mon probleme !!

    Aspic, SaumonAgile > Pour les requetes parametrés, cela n'est pas possible, la requete est stocké a part dans un fichier texte et peut etre amené à changer.

    oyigit > La solution que j'ai trouvé pour palier ce probleme est de regarder quel est l'object que me retourne mon "getvalue". Si cette objet est un DateTime, alors je fait une condition a part pour le traiter, avec un ToString, et là, j'obtient le resultat voulu. C'est bien la preuve que je doit pouvoir resoudre mon probleme avec les DateTimeFormat.
    La solution du test de l'objet fonctionne bien, mais cette solution n'est pas tres "propre" à mon gout. Je voudrais plutot trouvé une solution comme celle sur lequelles m'a (tres gentiment ) eguillé ced600, mais je ne trouve pas...

    D'où ma demande...
    Merci d'avoir essayé de m'aiguiller en tout cas...

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    ced600 > J'ai trouvé cette page, bien sur ! Mais cela na pas resolu mon probleme !!
    Ouais bah moi j'ai vu la solution sur cette page.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  13. #13
    Membre habitué Avatar de jerome.fortias
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 164
    Points : 133
    Points
    133
    Par défaut
    Pour interfacer cela dans SQL voila ce que je fais

    J'ai un DateTime monDateTime je le transforme avec le ToString("") par exemple madate.ToString("yyyyMMdd"); avec
    y pour les années
    M pour le mois
    d pour le jour
    hh pour l'heure
    mm pour les minutes
    ss pour les secondes

    reste que si les paramètres de format de date de SQL change t'es marron

    Tu peux aussi utiliser un

    CONVERT(DATETIME,'2006-01-01 00:00:00', 120))
    avec les formats ID suivants

    Format ID
    Format
    0 or 100mon dd yyyy hh:miAM (or PM)101mm/dd/yy102yy.mm.dd103dd/mm/yy104dd.mm.yy105dd-mm-yy106dd mon yy107Mon dd, yy108hh:mm:ss9 or 109mon dd yyyy hh:mi:ss:mmmAM (or PM)110mm-dd-yy111yy/mm/dd112yymmdd13 or 113dd mon yyyy hh:mm:ss:mmm(24h)114hh:mi:ss:mmm(24h)20 or 120yyyy-mm-dd hh:mi:ss(24h)21 or 121yyyy-mm-dd hh:mi:ss.mmm(24h)126yyyy-mm-dd Thh:mm:ss.mmm(no spaces)130dd mon yyyy hh:mi:ss:mmmAM131dd/mm/yy hh:mi:ss:mmmAM
    Jerome Fortias
    Head of the Business Lab Sopra Steria Brussels

  14. #14
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par Xav987 Voir le message
    Aspic, SaumonAgile > Pour les requetes parametrés, cela n'est pas possible, la requete est stocké a part dans un fichier texte et peut etre amené à changer.
    Je crois que c'est la plus mauvaise excuse qu'on m'ait donné pour ne pas utiliser les paramètres SQL
    En quoi cela est-il un problème ? Tu n'as qu'à stocker les paramètres avec...
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    jerome.fortias > Je ne peut pas toucher à la base, je ne doit pas la modifier...
    Les requetes parametrés, je maitrise mal, j'ai a peine les bases, je vais regarder sa de plus pres.

    Mais au final je crois que je vais garder ma solution, c'est pas super lisible et cela ralonge sans doute un peu le temp d'execution...
    Mais apparament c'est la seul solution pour rester independant du parametre de culture.

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    f The fraction of a second in single-digit precision. The remaining digits are truncated.
    ff The fraction of a second in double-digit precision. The remaining digits are truncated.
    fff The fraction of a second in three-digit precision. The remaining digits are truncated.
    ffff The fraction of a second in four-digit precision. The remaining digits are truncated.
    fffff The fraction of a second in five-digit precision. The remaining digits are truncated.
    ffffff The fraction of a second in six-digit precision. The remaining digits are truncated.
    fffffff The fraction of a second in seven-digit precision. The remaining digits are truncated.
    Sur le site que je t'ai fournis.

    Si tu avais cherché un peu plus tu aurais trouvé :
    http://msdn2.microsoft.com/en-us/lib...ing.timer.aspx
    et
    http://msdn2.microsoft.com/en-us/library/5hh873ya.aspx

    Et tu aurais compris que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTime.Now.ToString("h:mm:ss.fff")
    te permet d'obtenir l'heure actuel avec les millisecondes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTime.Now.ToString("h:mm:ss:fff")
    marche aussi.

    Et maintenant si c'est pas ce que tu voulais, tu as mal expliqué ton problème.

    5 minutes que cela m'a pris à partir du site pour trouver la réponse. Alors ne dit pas que tu as cherché !!!
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Non, effectivement, tu n'as pas compris mon probleme. Les autres ont compris apparament...

    Les probleme n'etait pas d'avoir la syntaxe du parametre...

    Le probleme est d'appliqué cette syntaxe pour tout les DateTime du programe, sans avoir a faire un ToString à chaque fois, et defaçon independante de la culture...

    J'ai pourtant mis le code qui posait probleme...

  18. #18
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Bah tu t'es mal expliqué, dans ton premier post tu n'as pas dit que tu ne voulais pas utiliser tostring, tu parlais d'affichage dans une colonne !!!!
    Ensuite plein de solution diverses t'ont était proposé et ton code (trop succins pour qu'il est un intérêt) n'a pas été corrigé, et je pense que c'est une preuve d'un manque de recherche de ta part.
    Enfin de toute façon je ne dirais rien de plus, des propositions te sont proposées et tu sort des excuses pour ne pas les utiliser !!!!
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  19. #19
    Membre habitué Avatar de jerome.fortias
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 164
    Points : 133
    Points
    133
    Par défaut
    CED ne soit pas si dur... Le fait même de répondre à un forum fais qu'on a ce genre de situation à gérer. Je te le dis d'autant plus facilement que tu m'as souvent aidé... Xavier, un peu commentaire, Ced fait partie des gens qui participent et partagent leurs compétences, ce qui est finalement rare. Balancer une phrase du genre "Non effectivement tu n'as pas compris mon probleme, les autres ..." n'est-il pas de manquer d'éducation. quand on aide les autres parfois on est un peu énervé par certains comportements, la moindre des choses est de faire avec, et de remercier la personne qui essaie de t'aider...Enfin c'est à toi Xavier de voir ou tu places ton éducation, et ce n'est parceque certains se cachent derrière des avatars qu'on peut se permettre d'oublier un minimum de politesse...
    Jerome Fortias
    Head of the Business Lab Sopra Steria Brussels

  20. #20
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Merci de prendre ma défense jerome.fortias. Je doit reconnaître que j'ai été un peu dur, plus dur qu'avec d'autre en tout cas.
    Pour ma part j'ai apporté toute l'aide que je pouvais sur ce sujet, donc maintenant c'est à l'auteur du sujet de prendre en considération mes remarques ou non.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

Discussions similaires

  1. Problem de connexion d'une servlet avec une base de données Postgres
    Par lhaj-boolean dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 01/02/2010, 09h39
  2. [Zend_Date] Probleme de format de date avec base mssql
    Par rickhuntersdf1 dans le forum Zend Framework
    Réponses: 11
    Dernier message: 03/12/2008, 10h59
  3. Probleme de connexion avec une base de données SQL server
    Par lasvegas_parano dans le forum iReport
    Réponses: 29
    Dernier message: 19/07/2007, 10h17
  4. Probleme de connexion JDBC avec une base de donne mysql
    Par sultan_kafila dans le forum JDBC
    Réponses: 19
    Dernier message: 12/04/2006, 08h25
  5. probleme avec une base de donnée postgres SQL
    Par Alexlesilex dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/06/2005, 22h09

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