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 :

Problème dans la récuparation de la valeur d'un insert c#


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Problème dans la récuparation de la valeur d'un insert c#
    Bonjour
    Je voudrai trouver un "idclient" non présent dans ma table.
    J'ai donc créer une fonction IdClient() retournant un string:

    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
     
    protected string IdClient()
        {
            int idclient = 1;
            bool trouve = false;
     
            while( trouve == false){
                string sql = "Select idclient from clients where idclient="+idclient;
                using (SqlConnection conn = new SqlConnection(GetConnectionString()))
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    conn.Open();
     
     
                   int id = (int)cmd.ExecuteScalar();
     
                    conn.Close();
                    if (id == idclient)
                    {
                        idclient++;
                    }
                    else
                    {
                        trouve = true;
                    }
     
                }           
            }
            string idcli = idclient.ToString();
            return idcli;
        }
    cependant j'obtient l'erreur suivante:
    System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
    sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int id = (int)cmd.ExecuteScalar();
    Je ne comprend pas pourquoi.

    Merci de m'aider

  2. #2
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Requête AJOUT
    Tu dois construire ta requête SQL comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string sql = "Select idclient from clients where idclient="+idclient + "; SELECT @@IDENTITY";

    P.JEAN

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    J'ai modifié ma requête comme tu m'as dit mais toujours la même erreur au même endroit .

  4. #4
    Membre habitué Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Points : 155
    Points
    155
    Par défaut Escuses
    escuses j'avais mal lu ta question ... je croyais que tu voulais récuperer l'identifiant de la ligne que tu ajoutes avec ta requête .....




    P.JEAN

  5. #5
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Cmd doit être null, avec le using ça m'étonne un peu...
    par contre tu as fait des Conn.open()/Close() qui sont inutils car fait par le using. C'est peut-être de là que viens ton erreur.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Si j'enlève les conn.Open et les conn.Close ça me met une autre erreur:

    ExecuteScalar nécessite une Connection ouverte et disponible. La connexion est actuellement fermée.
    Donc on est obligé de le mettre. Et dans ma table j'ai bien un idclient qui est égal à 1.

  7. #7
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    il me semblait que ça ouvrait et fermait les connexions...
    je n'utilise jamais cette synthaxe. avec le fait main, je sais ce que je fais et quand je le fais!

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 60
    Points : 100
    Points
    100
    Par défaut
    Logique tu demandes un produit scalaire
    tu plantes simplement des lors que ta requête ne renvoi rien
    il faut que tu utilises un COUNT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string sql = "Select COUNT(idclient) from clients where idclient='"+idclient + "'";

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 60
    Points : 100
    Points
    100
    Par défaut
    Par contre essaye de nettoyer ton code car hum c'est crading(sorry)

  10. #10
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Citation Envoyé par Robotech Voir le message
    Logique tu demandes un produit scalaire
    tu plantes simplement des lors que ta requête ne renvoi rien
    il faut que tu utilises un COUNT
    string sql = "Select COUNT(idclient) from clients where idclient='"+idclient + "'";
    Ah oui, tiens ! Pourquoi Scalar ? Je pense que tu as plutôt besoin d'un cmd.ExecuteReader().

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 60
    Points : 100
    Points
    100
    Par défaut
    Heu excuse moi kheironn, mais si executeScalar te renvoi 0 tu as l'id qu'il te faut et tu n'as plus qu'a utiliser la variable idclient ,je t'avoue ne pas être super concentré mais un count et executescalar me paraissent tout a fait cohérent ici.

  12. #12
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    DenisBuzz,
    Je viens de relire ton code et javoue ne pas comprendre quelque chose : le besoin final.
    D'ailleur ta méthode est mal nommée. En général on donne un nom contenant un verbe, par exemple FindFirstFreeCustomerId(), ce que semble faire cette dernière.
    Comment utilises-tu cette méthode ? Pourquoi recherche un id libre ? Une valeur auto-incrémentée ne conviendrait-elle pas ? SqlServer gère très bien ces choses là. J'ai l'impression que ta bas est suceptible d'avoir des trous et que c'est la raison de ce choix de fonctionnalité.

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 60
    Points : 100
    Points
    100
    Par défaut
    +1 pour kheironn,ma réponse ne signifie pas non plus que je comprend ce genre de besoin

Discussions similaires

  1. [XL-2007] probléme dans le report de la valeur d'une cellule
    Par totau dans le forum Excel
    Réponses: 4
    Dernier message: 16/08/2012, 10h05
  2. [AC-2003] Problème dans la définition de la valeur par défaut d'un champ
    Par Manhexter dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/11/2010, 08h23
  3. [MySQL] Problème dans ma boucle - ne prend qu'une valeur au lieu de tous
    Par runcafre91 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/03/2010, 22h35
  4. Problème dans la valeur d'une scollbar
    Par joprog dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/03/2010, 14h00
  5. Réponses: 3
    Dernier message: 25/05/2006, 18h50

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