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#] Probleme sur les clés primaires composites


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut [C#] Probleme sur les clés primaires composites
    Salut !!!
    Je suis en train de réaliser une petite application dont le but est de gérer les eleves.

    Ma base de donnée est celle-ci :

    Eleve(NumEle,NomEle,PreEle,DatNai)
    Classe(NumCla,NomCla)
    Appartenir(#NumEle,#NumCla,Annee)

    voila un début de menu:
    - Lister les classes
    - Ajouter les classes
    - Recherche de la classe
    - Ajouter Eleve(Nom,Prenom,DateNaissance) de la classe
    saisie
    Voila le principe de l'application.


    J'ai un souci c'est que je n'arrive pas inserer les valeurs dans la table appartenir correspondant au identifiant NumEle, et NumCla
    ex: 1 / info
    1/ toto/tata/19801212
    appartenir (1,1,2000) -> cette insertion je n'arrive pas à l'effectuer

    Voila comment j'ai procédé:
    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
     
     
    Console.WriteLine("Entrer un nom de l'eleve");
    unePersonne.Nom = Console.ReadLine();
    Console.Write("Quel est le prénom ?");
    unePersonne.Prenom = Console.ReadLine();		
    Console.Write("Quelle est sa date de naissance aaaammjj ?");
    unePersonne.DateNaissance = Convert.ToString(Console.ReadLine());
    maSqlCmd.CommandText="Insert into Eleve(NOMELE,PREELE,DATNAIELE)values('"+unePersonne.Nom+"','"+unePersonne.Prenom+"','"+unePersonne.DateNaissance+"')";
    maSqlCmd.ExecuteNonQuery();	
     
     CmdNumEle.CommandText="Select max(NumEle)from Eleve";
     DRNumEle = CmdNumEle.ExecuteReader(); 
           while(DRNumEle.Read()){
    	Console.WriteLine("numero id :"+DRNumEle.GetInt32(0).ToString()); 
          }
     DRNumEle.Close();
     
     
      CmdNumCla.CommandText="Select NumCla from Classe where NomCla='"+sNomCla+"'";
      DRNumCla = CmdNumCla.ExecuteReader();
            while(DRNumCla.Read()){
                    Console.WriteLine("numero id :"+DRNumCla.GetInt32(0).ToString()); 
             }
      DRNumCla.Close();
     
       Console.WriteLine("Entrer l'année d'etude ");
        sAnnee = Console.ReadLine();
        maSqlCmd2.CommandText="Insert into appartenir(numcla,numele,annee)values('"+DRNumCla+"','"+DRNumEle+"','"+sAnnee+"')";
        maSqlCmd2.ExecuteNonQuery();

    J'obtiens une erreur dont je n'arrive pas a comprendre d'ou cela peut provenir

    Erreur de syntaxe lors de la conversion de la valeur varchar 'System.Data.SqlClient.SqlDataReader' vers une colonne de type de données int.

    L'application s'interrompt une fois que j'insere l'année de son etude
    l'insertion se fait correctement pour la table classe et eleve , en revanche la table appartenir , je n'y arrive pas.

    J'espere que j'ai été clair.
    Merci d'avance pour votre aide
    Stardeus

  2. #2
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Il semble bien que dans ta table l'année est de type int et que tu veux y mettre un type string. Il faut faire une conversion.

    Tu devrais également lire
    http://www.developpez.net/forums/viewtopic.php?t=170806

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    Dans ta requete d'insertion, il ne faut pas mettre tes identifiants entre apostrophes ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maSqlCmd2.CommandText="Insert into appartenir(numcla,numele,annee)values('"+DRNumCla+"','"+DRNumEle+"','"+sAnnee+"')";
    devient ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maSqlCmd2.CommandText="Insert into appartenir(numcla,numele,annee)values("+DRNumCla+","+DRNumEle+",'"+sAnnee+"')";
    Le message d'erreur le dit :
    Erreur de syntaxe lors de la conversion de la valeur varchar 'System.Data.SqlClient.SqlDataReader' vers une colonne de type de données int
    Varchar est le type texte de SQL. Donc le message dit ne peut pas mettre une chaine dans un entier (ce qui est logique).

    Après je ne sais pas quel est le type de tes autres données mais je pense que tu peux chercher autour de ca.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut [C#] : pb sur les clés primaires composites
    Merci de m'avoir repondu

    Bah en fait tu avais raisons a propos des apostrophes. Et c'etait ça qui générait un pb dans mon application.

    Cependant un autre message d'erreur est apparu c'est :
    le nom SqlDataReader n'est pas autorisé dans ce contexte. Seules sont autorisées les constantes et les variables ( ce qui est exact).

    Donc j'ai testé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      int iNumCla = Convert.ToInt32(DRNumCla);
      int INumEle = Convert.ToInt32(DRNumEle);
     
       insert into appartenir("iNumCla","iNumEle",'"sAnnee"');
    ceci ne fonctionne pas

    Donc ma question est:
    Comment déclarer une variable qui puisse s'associé a la requete SQL?
    ou plutot comment récupérer la valeur projetée par le requete SQL par l'intermédiaire d'une variable?

    Merci d'avance pour votre aide
    Stardeus

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    Essaye tout simplement la requete suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maSqlCmd2.CommandText = "INSERT INTO appartenir VALUES(" & iNumCla & "," & iNumEle & ",'" & sAnnee "')"

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut [C#] : probleme sur les clés primaires composites
    Excuse moi sur la requete que j'avais mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      int iNumCla = Convert.ToInt32(DRNumCla); 
      int INumEle = Convert.ToInt32(DRNumEle); 
     
       insert into appartenir("iNumCla","iNumEle",'"sAnnee"');
    J'ai oublié de mettre les +. Ceci avait tout de mm généré le mm message d'erreur.

    Donc comment puis je déclaré une variable qui puisse etre associé a ma requete projetée?

    celle que j'ai fait ci dessus ne fonctionne pas car il m'indique que je ne peux pas convertir en int un dataReader 'DRNumCla'

    Pour résumé: je cherche un moyen de recuperer la valeur projeté par la requete sql ( DRNumCla.CommandText='select numcla from classe') pour l'intégrer dans une variable?

    Merci pour votre aide
    Stardeus

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Points : 73
    Points
    73
    Par défaut [Résolu][C#]:Pb sur les clé primaires composites
    Salut

    J'ai resolu mon pb.
    Je remercie à pleymo et leseb,jab pour m'avoir aider.

    La solution etait de faire un datareader suivi d'une conversion qui s'effectue a l'interieur de la boucle while

    Sur ce bonne journée

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    Mais de rien !
    Je suis content d'avoir pu t'aider.

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

Discussions similaires

  1. probleme sur les chaines de caractere
    Par foufi5 dans le forum C
    Réponses: 8
    Dernier message: 22/12/2005, 15h30
  2. Questions sur les clés de registre
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 30/04/2005, 19h12
  3. [Hashtable] Question sur les clés
    Par chabannou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/04/2005, 18h40
  4. MS Access et TQuery (probleme sur les dates)
    Par Djob dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2004, 14h57
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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