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 :

erreur requete select count


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut erreur requete select count
    Bonjour,

    Je développe une application sous VS2005 et j'ai besoin de recupérerle nombre de ligne d'une table d'une base de données ACCESS.

    Pour cela j'ai utilisé l'assistant de connexion de VS2005 afin de créer ma Chaine de connexion

    J'utilisa oledb pour me connecter à ma base

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        OleDbConnection maConnection = new OleDbConnection(Properties.Settings.Default.VideoSurveillanceConnectionString);
              //ouverture de la connexion
                maConnection.Open();
                //je crée ma requete
                String requete= "SELECT COUNT(nomuser)  FROM user";
                //execution de la requete
                OleDbCommand Olecmd = new OleDbCommand(requete, maConnection);
                //je recupére le nombre de ligne
                object count = Olecmd.ExecuteScalar(); //ensuite il faut convertir en int
     
                maConnection.Close();
    Lorsque j'execute ce code j'ai un message d'erreur m'indiquant qu'il y a une erreur de syntaxe dans la clause from, pourtant je pense que ma requête est bonne

    Pouvez vous m'aider ?

    Mercu

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String requete= "SELECT COUNT(nomuser) as TOTAL FROM user";
    N'oubliez pas le tag et

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut
    merci pour ta reponse mais j'ai toujours la même erreur

    L'erreur porte sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     object count = Olecmd.ExecuteScalar();
    Voici le message d'erreur :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    L'exception System.Data.OleDb.OleDbException n'a pas été gérée
      Message="Erreur de syntaxe dans la clause FROM."
      Source="Microsoft JET Database Engine"
      ErrorCode=-2147217900
      StackTrace:
           à System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
           à System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
           à System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
           à System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
           à System.Data.OleDb.OleDbCommand.ExecuteScalar()
           à VideoSurveillance.identification.button1_Click(Object sender, EventArgs e) dans C:\Documents and Settings\dric\Bureau\VideoSurveillance\identification.cs:ligne 30
           à System.Windows.Forms.Control.OnClick(EventArgs e)
           à System.Windows.Forms.Button.OnClick(EventArgs e)
           à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           à System.Windows.Forms.Control.WndProc(Message& m)
           à System.Windows.Forms.ButtonBase.WndProc(Message& m)
           à System.Windows.Forms.Button.WndProc(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.Run(Form mainForm)
           à VideoSurveillance.Program.Main() dans C:\Documents and Settings\dric\Bureau\VideoSurveillance\Program.cs:ligne 17
           à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           à System.Threading.ThreadHelper.ThreadStart()

  4. #4
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Le problème se trouve apparamment au niveau de ExecuteScalar. Essai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    object count = Convert.ToInt32(Olecmd.ExecuteScalar());
    N'oubliez pas le tag et

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut
    non, toujours pareil

  6. #6
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Euh ! d'après ce lien ExecuteScalar() retourne la première colonne de la première ligne du jeu de résultats, ou référence null si le jeu de résultats est vide. Etant donnée que tu retourne le nombre total de lignes que ta requete renvoi, je pense que le type object n'est pas approprié. Fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Int32 count = Convert.ToInt32(Olecmd.ExecuteScalar());
    N'oubliez pas le tag et

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut
    non tjr pas

    Je vais voir si c'est pas un problème avec la connexion, car la je vois pas du tout d'ou sa peu bloquer

  8. #8
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Probablement. Fais des tests pour voir si tu arrives à bien te connecter à ta database.
    N'oubliez pas le tag et

  9. #9
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut
    c un objet car j'avais trouvé sur google, un exemple de code ou la personne disait c'est un objet que tu converti ensuite en entier

  10. #10
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    en supposant que tu ais une requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql ="select photo from Table where id = 1";
    MyCommand.Text = sql;
    . Si photo est de type image, tu peux écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte [] myPicture = (byte[])MyCommand.ExecuteScalar();
    . C'est dire que ExecuteScalar() peut renvoyer autre chose que string, byte, int... en fonction du type de la colonne de ta table.
    Mais dans ton cas, le type object n'est pas correct puisque tu récupères un integer.

    T'as testé ta chaine de connection pour voir si elle boss bien ?
    N'oubliez pas le tag et

  11. #11
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut
    sinon comment je pourrai savoir si ma requete trouve au moin un résultat ?
    car j'effectue cette requete afin de permettre à un utilisateur de se connecter à mon programme.
    Si ma requete renvoi au moin une ligne sa veut dire que l'utilisateur est connu dans ma base et donc peux se connecter

  12. #12
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Puisque tu fais un select count ta requête retournera forcément un ligne. Il serait plus intéressant si tu passais par un datareader
    N'oubliez pas le tag et

  13. #13
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut
    je pourrais passer par un datareader mais je vois pas pq faire, tu peux m'aider ?

  14. #14
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173

  15. #15
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Pour plus d'amples détails, fais une recherche avec pour trouver comment se servir des datareader. Tu devras faire quelque chose du genre
    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
     
    int recordCount;
    String requete= "SELECT COUNT(nomuser) as TOTAL FROM user";
    myCommand.Text = requete;
    SqlDatareader myReader = myCommand.ExecuteReader();
    if (myReader.HasRows)
    {
    	 while (myReader.Read())
     
    	   {
     
    		 recordCount = myReader.GetValue(0);
     
    	   }
     
     }
    Vue que la requête renvoi une une seule ligne, tu devrais tester la valeur renvoyée par ta requete. En fonction de cette valeur, tu feras donc le traitement approprié.
    S'il s'agit d'une requête select All tu peux éventuellement incrémenter un compteur pour récupérér à la fin du while ton total de lignes.
    Bon courage
    N'oubliez pas le tag et

Discussions similaires

  1. REQUETE SELECT COUNT (*)
    Par colobe dans le forum Requêtes
    Réponses: 8
    Dernier message: 13/09/2011, 12h39
  2. Réponses: 11
    Dernier message: 26/09/2010, 10h14
  3. requet select count
    Par rezguiinfo dans le forum C#
    Réponses: 5
    Dernier message: 11/05/2010, 15h11
  4. Requete select count(*) avec having max()
    Par Goupo dans le forum Langage SQL
    Réponses: 10
    Dernier message: 09/03/2009, 12h50
  5. Requete SELECT Count(x)/Count(y)
    Par ahage4x4 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2006, 15h26

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