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

ADO.NET Discussion :

Problème de format de DateTime avec SqlParameter


Sujet :

ADO.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Problème de format de DateTime avec SqlParameter
    Bonjour,

    Je me permet de poster ici car j'ai un problème avec le type DateTime que j'utilise dans une requête paramétrée ADO.Net.

    Pour faire simple, j'ai une table d'une base de données dont une des colonnes est de type DATETIME (la colonne nommée INSD). Je veux effectuer une requète de type SELECT sur cette table en incluant un paramètre de sélection sur cette fameuse colonne (jusque là, y a rien de bien compliqué).

    Je créer ma commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cmd = myConnexion.CreateCommand();
    ...
    cmd.CommandText = "AND ll.[INSD] = @_INSD_\r\n";
    ...
    Puis je lui passe les paramètres comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cmd.Parameters.Add("@_INSD_", SqlDbType.DateTime);
    cmd.Parameters["@_INSD_"].SqlValue = generatedDate;
    Où generatedDate est une variable locale contenant la date sur laquelle je veux faire ma recherche.

    Seulement voilà. Alors que la requête initiale fonctionne (à merveille) dans Management Studio, cette dernière ne fonctionne pas dans mon code (bé oui, sinon je n'aurai pas posté sur le forum).

    Après un bon après-midi de recherche, je me suis lancé dans le profilage SQL Server (je ne connaissais pas, j'ai découvert cet après-midi, et je dois avouer que j'adore !!!).
    J'ai donc ainsi récupéré la requête généré par ce bon objet ADO.Net qu'est le SqlCommand.
    Celle-ci contient, à la fin de la requête, mon paramètre @_INSD_ qui est écrit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @_INSD_='2011-08-01 11:16:52.7470000'
    Mon gros problème c'est que la requête que génère ADO.net ne fonctionne effectivement pas sous Management Studio. Il faut inverser le mois et date pour que ça marche (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @_INSD_='2011-01-08 11:16:52.7470000'
    ).

    Dans l'hypothèse où le problème viendrait d'ADO.Net, j'aimerai comprendre pourquoi !!! En effet, il met la date au format YearMonthDate. Si celle-ci doit être au format YearDateMonth, pourquoi ne fait-il pas l'ajustement automatiquement ?
    Et sinon, dans l'hypothèse où le problème viendrait de SQL Server, comment faire pour le résoudre ?

    Pour infos, ma connection s'ouvre sur la langue fr-fr (Français (France)) et avec le format de date DateMonthYear, par défaut.
    Pour être sûr de ça, j'avai même insérer, temporairement, un bout de code exécutant ces 2 requêtes à chaque ouverture de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET LANGUAGE French;
    SET DATEFORMAT DMY;
    Je l'ai viré, étant donné qu'il ne résolvait pas le problème.

    Si quelqu'un a une idée, voir même la solution, par pitié, qu'il m'aide !!!

    Par avance merci.
    --
    XR

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Quel est le type de la variable generatedDate ? Il faut que ce soit un DateTime, pas une String...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Bonjour tomlev, (et merci pour la rapidité de ta réponse)

    Il s'agit bel et bien d'un objet de type DateTime (dont la valeur temporelle est celle mentionnée dans le morceaux de requête SQL présent dans mon post initial).

    As-tu une piste ?

    --
    XR

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je pense que c'est parce que tu utilises SqlValue au lieu de Value. SqlValue s'utilise avec les types SQL, définis dans le namespace System.Data.SqlTypes.

    Donc si tu utilises SqlValue, il faut lui affecter un objet SqlDateTime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.Parameters["@_INSD_"].SqlValue = new SqlDateTime(generatedDate);
    Ou alors tu utilises Value, et tu laisses la valeur en DateTime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.Parameters["@_INSD_"].Value = generatedDate;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Merci pour l'info à propos des types SQL, je ne le savais pas.

    J'ai aussi essayé de travailler avec les propriétés DbType et Value (en utilisant respectivement la valeur 'DbType.DateTime' et mon objet DateTime), mais le résultat était le même.

    J'essayerai demain matin ce que tu as écris (new SqlDateTime(generatedDate) et je te tiendrais au courant.

    Merci pour ton aide.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Bonjour tomlev,

    Malheureusement, rien n'y fait. J'ai refait le test avec les propriétés DbType et Value, puis avec SqlDbType et SqlValue, et la requête générée par ADO.Net est correcte mais SQL Server ne l'a comprend pas.

    Je suis perdu.

  7. #7
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmd.Parameters.AddWithValue("@_INSD_",generatedDate)
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Problème résolu (mais cause inconnue).

    Suite à une discussion avec le staff technique, le serveur (physique) qui héberge le serveur SQL a été redémarré en cous de matinée (quelques mises à jours Windows ont été faite au passage si j'ai bien compris).

    Je ne sait pas pourquoi, mais les requêtes SQL n'ont pas changées d'un poil et désormais tout fonctionne (la magie du redémarrage ?!? ... je suis sceptique).

    Je reste quand même étonné qu'un simple redémarrage résolve le problème. Malheureusement, je n'ai pas la main sur le serveur en question et je ne peux donc pas dire quelles mises à jours ont été appliquées.

    Je note le sujet comme résolu, puisque c'est le cas, et si le problème se présente à nouveau, je n'hésiterai pas à vous le faire savoir. Je commencerai par demander au staff technique de redémarrer le serveur et si cela solutionne effectivement le problème, je ferai une remontée sur le forum pour vous en informer.

    Merci à tous pour votre aide, et pour toutes les informations que vous m'avez apportés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème de format de cellule avec des heures
    Par shakapouet dans le forum Excel
    Réponses: 2
    Dernier message: 17/07/2012, 17h30
  2. Problème de format de montant avec la commande BCP
    Par bestdali dans le forum Outils
    Réponses: 1
    Dernier message: 05/05/2011, 12h01
  3. [MySQL] comment rechercher une date au format datetime avec une date au format date
    Par Menoly dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/06/2007, 10h14
  4. pb format datetime avec mysql
    Par ms91fr dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/12/2004, 14h12
  5. problème HD ntfs formaté sous WinXP avec win2000
    Par kalminou dans le forum Windows XP
    Réponses: 7
    Dernier message: 27/08/2003, 17h45

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