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

ASP.NET Discussion :

ExecuteNonQuery ne me retourne pas le nombre de lignes affectées


Sujet :

ASP.NET

  1. #1
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Points : 1 119
    Points
    1 119
    Par défaut ExecuteNonQuery ne me retourne pas le nombre de lignes affectées
    Bonjour,

    j'ai besoin de savoir combien d'enregistrements contiennent le nombre X dans une certaines colonnes d'une table...

    je fais donc une requête de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CID FROM t_RCTMT_suivi WHERE (CID=" + X + ")
    pour ne pas executer la requête, puis compter le nombre d'enregistrement (avec un datareader, ou dans un dataset,...) je pensais me servir de ExecuteNonQuery, qui est censé retourner le nombre de lignes affectées par la requête...

    je fais donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    macommande.CommandText = "SELECT CID FROM t_RCTMT_suivi WHERE (CID=" + X + ")";
    maconnection.Open();
    int nbrsuivis = macommande.ExecuteNonQuery();
    maconnection.Close();
    mais nbrsuivi contient toujours " -1 ".
    Pourtant, lorsque directement dans SqlServer j'execute la requête avec un X contenu dans ma table, il me retourne logiquement bien mon enregistrement le contenant...


    Quel est le problème de ma méthode?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    essaie déjà ca :

    "SELECT CID FROM t_RCTMT_suivi WHERE (CID=' " + X + " ')";

    ou like à la place de =

    Fix

  3. #3
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    En effet, si tu compares une chaîne fixe à un champs, c'est = que tu dois utiliser sans oublier d'entourer la chaîne de ' ' .


    Par contre, il existe une solution plus "jolie" et plus correcte surtout, c'est l'utilisation de Parameters :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    macommande.CommandText = "SELECT CID FROM t_RCTMT_suivi WHERE (CID = @monParam)";
    macommande.Parameters.Add(new OleDbParameter("@monParam", X));
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  4. #4
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Points : 1 119
    Points
    1 119
    Par défaut
    Citation Envoyé par fix105
    essaie déjà ca :

    "SELECT CID FROM t_RCTMT_suivi WHERE (CID=' " + X + " ')";

    ou like à la place de =

    Fix

    je n'ai pas précisé que le type de colonne était Int, donc pour moi il ne faut pas entourer mon X de ' '

    j'ai tout de même essayé, mais cela ne change rien...
    Dans le SGBD directement, toutes les méthodes retournent bel et bien mon enregistrement contenant X (la mienne y compris!), mais mon ExecuteNonQuery continue à ne vouloir retourner que " -1 "

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
        using (SqlConnection connection = new SqlConnection(
                   connectionString))
        {
            SqlCommand command = new SqlCommand(queryString, connection);
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
    Sinon fait un Select Count CDI FROM ......
    Et un ExecuteScalar

    Fix

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 619
    Points
    1 619
    Par défaut
    executenonquery ne te renvoie quelquechose que sur des update insert delete. il faut faire un count(*) et utiliser la méthode executescalar comme on te l'a suggéré.

  7. #7
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Points : 1 119
    Points
    1 119
    Par défaut
    Citation Envoyé par rattlehead
    executenonquery ne te renvoie quelquechose que sur des update insert delete.
    c'était donc pour cela, dommage


    Merci à vous 2, cela fonctionne bien avec le count et Executescalar

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/06/2011, 23h09
  2. UPDATE pas même nombre de lignes que SELECT
    Par CinePhil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/11/2008, 16h07
  3. [C#] Comment connaître le nombre de lignes affectées par un Select ?
    Par diaboloche dans le forum Accès aux données
    Réponses: 6
    Dernier message: 21/09/2006, 13h56
  4. [Oracle] Connaitre le nombre de lignes affectées par un update à l'avance
    Par lionheart33806 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 10/08/2006, 10h35
  5. [9i] Nombre de lignes affectées par un update
    Par yac dans le forum Oracle
    Réponses: 5
    Dernier message: 13/01/2006, 15h59

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