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

Windows Forms Discussion :

[C#] ExecuteScalar


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Par défaut [C#] ExecuteScalar
    Bonjour,

    Je travail sur une base Oracle.
    J'essaye de voir si des valeurs existent en base de données.
    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    string sMaReq= "SELECT COUNT(*) FROM MA TABLE WHERE MONCHAMPS = "+ Mavaleur;
    				OracleCommand oCom = new OracleCommand(sMaReq,oCnx);				
    				int iCompteur = 0;
    				iCompteur = Convert.ToInt32(oCom .ExecuteScalar());
     
     
    				if (iCompteur == 0)
    				{
                           Mon code si ligne d'enregistrement inexistante
                           }
    Si je prend la requete et que je la teste dans mon analyseur de requete, elle me renvoie 1 (donc ligne existante)

    mais mon iCompteur est toujours = à 0 toujours.

    j'ai essayé avec HasRow et c'est pareil même quand j'ai une ligne d'enregistrement il rentre dans mon code qui est destiné pour un retour null.

    Une idée? Je m'y prend mal?
    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    ta requete va toujours renvoyer une ligne ! c'est un select count.

    Tu devrais plustot tester la valeur renvoyer par ta requete (0 ou <> 0)
    Moi je le ferais avec un datareader et pour récuperer la valeur tu utilise "datareader.GetValue(0)"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Par défaut
    oui mais si je fais un "datareader.GetValue(0)" et qu'il n'y a pas de valeur sa plante.
    Si je me sers d'un try catch oui je pourrai savoir si la valeur existe ou pas mais c'est pas tip top.

    Et c'est ce que je fais déjà, je teste la valeur du count avec iCompteur.
    Ca doit être tout bête.

  4. #4
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Ce n'est pas normal.
    Si ton select count() renvoie 1 dans le requ^teur, tu devrais avoir 1 dans iCompteur dans le code. (A moins que l'implémentation de ExecuteScalar() avec le provider Oracle ne soit pas standard mais cela me surprendrait)
    Tu es sur que tu tapes la même base dans le code que dans le requêteur?
    Dans le code il n'y a pas de requête qui te change le résultat avant le Select count() ?

    Hulk Execute scalar renvoie la valeur de la première ligne, première colonne du jeu d'enregistrement généré par le Select

  5. #5
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    oui mais si je fais un "datareader.GetValue(0)" et qu'il n'y a pas de valeur sa plante.
    ton select count renvoie toujours une valeur, si y'a pas de ligne c'est 0 mais c'est une valeur qd meme !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Par défaut
    C'est bon merci j'ai fait autrement:

    j'ai mis d'abord le HasRow
    Et seulement ensuite le Read()
    et mes tests en conséquence.

    Merci

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

Discussions similaires

  1. ExecuteScalar(), récuperer les valeurs
    Par sly60 dans le forum C#
    Réponses: 1
    Dernier message: 10/06/2008, 17h38
  2. Réponses: 2
    Dernier message: 23/10/2007, 08h42
  3. asp.net probleme executescalar
    Par onizuka159 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 21/06/2007, 08h38
  4. Débutant besoin d'un coup de main avec ExecuteScalar
    Par mobscene dans le forum Accès aux données
    Réponses: 1
    Dernier message: 22/03/2007, 02h00
  5. [VB.NET]ExecuteScalar et DBNULL!
    Par Dnx dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/11/2005, 14h14

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