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

Accès aux données Discussion :

[Linq to Sql] Comparaison de dates


Sujet :

Accès aux données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut [Linq to Sql] Comparaison de dates
    Bonjour, je développe actuellement une application web Silverlight/C# qui fait appel à un web-service WCF exploitant une requête Linq sur une base de données SQL Server, ce qui permet de tout faire en C# sans code SQL.

    Dans ma requête, je souhaite sélectionner des enregistrements par rapport à leurs dates, dans la base, ces dates sont enregistrées en 'smalldatetime' au format "jour/mois/année heure:minute:seconde", je souhaite les comparer avec un DateTime C# au format "mois/jour/année heure:minute:seconde".

    Le problème c'est que C# ne parvient pas à reconnaitre les datetime de la base comme tels, il les considère comme des 'méthod group' et ne permet même pas de les convertir en string

    J'aimerai savoir comment je pourrai faire pour les comparer, merci d'avance

    Code de ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var Annonces = from messages in db.Panaff_Messages
       where DateTime.Parse(messages.date_debut.ToString) >= DateTime.Now 
       && DateTime.Parse(messages.date_fin.ToString) < DateTime.Now
       select messages.contenu;
    Message d'erreur:
    Argument '1':Cannot convert from 'method group' to 'string'
    Note: j'ai également essayé sans la double conversion ->string ->datetime...

  2. #2
    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
    Par défaut
    Donne nous la déclaration des objets contenus dans Panaff_Messages.
    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

  3. #3
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    salut,


    si ton code, c'est un copier-colleer, le pb vient p-e de l'oubli des () après toString

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var Annonces = from messages in db.Panaff_Messages
       where DateTime.Parse(messages.date_debut.ToString()) >= DateTime.Now 
       && DateTime.Parse(messages.date_fin.ToString()) < DateTime.Now
       select messages.contenu;
    M'enfin, moi, ce que j'en dit

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Effectivement, avec les parenthèses il se lance, mais il n'affiche rien (alors qu'il devrait) et me sort une exception dans mon web service :
    La méthode 'System.DateTime Parse(System.String)' ne prend pas en charge la traduction en SQL.
    qui conduit à une 'Communication Exception' dans les référence de mon appli.

    Apparemment c'est pas possible de les convertir ou de les comparer directement. Comment je pourrai faire autrement ?

  5. #5
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Euh...desole, j'avais pas vu que c'etait du linq to sql...

    si tu fais juste ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var Annonces = from messages in db.Panaff_Messages
       where messages.date_debut >= DateTime.Now 
       &&  messages.date_fin < DateTime.Now
       select messages.contenu;
    ca ne fonctionne pas ? tes objets Panaff_Messages devraient avoir des champs debut et fin de type DateTime, sauf erreur de ma part, donc pas besoin de faire des conversions, vu que ce devraient deja etre des dates des deux cotes

    Apres, effectivement, il faudrait voir le code de Panaff_Messages

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    C'est ce que je disais dans le premier post : même sans conversion ça ne marche pas, (c'est justement pour ça que j'ai essayé avec la conversion) : le programme se lance mais il n'affiche aucun résultat alors qu'il devrait...

  7. #7
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Donne nous la déclaration des objets contenus dans Panaff_Messages.
    Citation Envoyé par pvialatte Voir le message
    il faudrait voir le code de Panaff_Messages


    Avec la version sans conversions, quelle requete SQL est générée par linq to sql (Annonces.ToString(), si je ne m'abuse) ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    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
    17
    18
    19
    20
    21
    22
    23
    24
     
    [Table(Name="dbo.Panaff_Messages")]
    [DataContract()]
    public partial class Panaff_Message
    {
     
    	private int _id_message;
     
    	private string _titre;
     
    	private string _redacteur;
     
    	private string _contenu;
     
    	private System.DateTime _date_redac;
     
    	private System.Nullable<System.DateTime> _date_debut;
     
    	private System.Nullable<System.DateTime> _date_fin;
     
    	public Panaff_Message()
    	{
    	}
    ...
    La déclaration de mes champs

    Avec la version sans conversions, quelle requete SQL est générée par linq to sql (Annonces.ToString(), si je ne m'abuse) ?
    Je comprends pas...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Désolé pour le double post mais...

    A priori, quand je teste sans conversion, simplement avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where messages.date_debut >= DateTime.Now 
       &&  messages.date_fin < DateTime.Now
    Le programme se lance normalement, sans même une alerte ou une exception.

    Je gage donc que l'erreur vienne du format des dates :
    dans la base : "jour/mois/année heures:minutes:secondes" (date_debut et date_fin)
    dans l'appli : "mois/jour/année heures:minutes:secondes" (DateTime.Now)

    Ma question est donc la suivante : comment convertir la date appli au même format que celles de la base (ou inversement) ?

    J'ai déja essayé en 'parsant' des conversions en string de Now où j'ai inversé les position du jour et du mois dans tous les sens, ça n'a rien donné

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Bump

    J'ai beau chercher, je n'ai toujours pas trouvé...

    Un peu d'aide s'il vous plait

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    On s'en fiche du format d'affichage, faut juste regarder ce qu'il y a dans Month Year et Day.

    Est-ce que pour messages.date_debut
    Day et Month valent bien les bonnes valeurs ou est-ce qu'il sont inversés ?

Discussions similaires

  1. [AC-2007] requête SQL comparaison de dates avec IIF
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/09/2009, 15h30
  2. [SQL] Comparaison d'une date au format FR avec la date du jour au format US
    Par delcada dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/10/2007, 15h22
  3. [SQL SERVER / VBDOTNET] comparaison de date/heure
    Par t1marlartiste dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/06/2007, 09h51
  4. [SQL] selection en fonction d'un comparaison de date
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/09/2006, 23h38
  5. [Oracle 9i] Traitement SQL et comparaison de dates
    Par Requin15 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/06/2006, 20h38

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