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

Linq Discussion :

Convert.ToDateTime and varchar


Sujet :

Linq

  1. #1
    Invité
    Invité(e)
    Par défaut Convert.ToDateTime and varchar
    Bonjour,

    J'ai le champ Day qui est un varchar(25). Il contient une date sous forme de chaine de caractères dd/mm/yyyy.

    Au cours de cette requete:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (from act in Ctx.actions
    select new {
       Convert.ToDateTime(act.Day).Month,
       Convert.ToDateTime(act.Day).Day,
    })
    une SqlExpression est levée avec le message:
    "The conversion of a nvarchar data type to a datatime data type resulted in an out of range value".
    Note : ToString() ne change rien.

    Merci pour toute aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Suite a d'autre tests, je me rends compte que le problème vient de la seconde partie de la requete (que je n'avais pas écrit)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var test= (from act in Ctx.Actions
                select new {
                Convert.ToDateTime(act.Day.ToString()).Month,
                Convert.ToDateTime(act.Day.ToString()).Day,
                action = act
                }).Distinct()
                .OrderByDescending(d => d.Month)
                .ThenByDescending(d => d.Day)
                .Select(d => d.action).ToList();

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Vu le message d'erreur, au moins une des dates doit être en-dehors de l'intervalle prévu.

    En C#, l'intervalle va du 01/01/0001 12:00:00 AM (DateTime.MinValue) au 31/12/9999 11:59:59.9999999 PM (DateTime.MaxValue).

    En T-SQL en revanche c'est différent. Les DateTime vont du 01/01/1753 12:00:00 AM au 31/12/9999 11:59:59.9999999 PM.

    Vérifie donc tes données pour t'assurer d'être dans l'intervalle autorisé par le T-SQL.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Les dates contenues vont du 10/06/2013 au 16/06/2013. Le problème ne vient donc pas de la.

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Vérifie la qualité de tes données. Tu as peut-être une date non valide. Tu peux lancer cette requête pour vérifier :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TonChampDate, ISDATE(TonChampDate) FROM taTable WHERE ISDATE(TonChampDate) = 0
    Référence ISDATE surMSDN
    S'il y a des lignes qui sortent, c'est qu'elles ne peuvent pas être transtypées en DATETIME.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Invité
    Invité(e)
    Par défaut
    effectivement, toutes les dates apparaissent.
    Voici comment je converti une date en string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string Date = DateTime.Now.AddDays((double)SomeValue).ToShortDateString()

  7. #7
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ok donc si je comprends bien en base de données tu stocke un nombre de jours à ajouter par rapport à la date du jour.

    Personnellement, je reconstruirait un objet DateTime complet. Ensuite tu le manipules dans ton code, et au dernier moment (ie. juste avant l'affichage), tu fais le .ToShortDateString() si tu ne veux afficher que la date.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string Date = DateTime.Now.AddDays((double)SomeValue).ToShortDateString()
    Me permet de créer la date avant de l'inserer.
    J'ai modifié cette ligne pour le faire en trois temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DateTime Date = new DateTime();
    Date = DateTime.Now.AddDays((double)SomeValue);
    return Date.ToShortDateString();
    A moins qu'il faille formater la date differement, le problème ne vient pas de la.

  9. #9
    Invité
    Invité(e)
    Par défaut
    J'ai changé le formatage de la date en passant de dd/mm/yyyy a yyyy/mm/dd et tout fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DateTime Date = new DateTime();
    Date = DateTime.Now.AddDays((double)SomeValue);
    return Date.Year.ToString() + "/" + Date.Month.ToString() + "/" +Date.Day.ToString();

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

Discussions similaires

  1. Question CONVERT INT en VARCHAR
    Par toxycyty dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/01/2012, 16h23
  2. Class Convert.ToDateTime(bool) Pourquoi?
    Par BenoitM dans le forum Framework .NET
    Réponses: 2
    Dernier message: 02/01/2012, 15h28
  3. CONVERT int vers varchar
    Par Wiwi31 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/02/2011, 09h45
  4. Convertion Date and Time en String en WinCC flex 2007
    Par ren973 dans le forum Automation
    Réponses: 4
    Dernier message: 16/10/2008, 10h56
  5. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46

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