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 :

Un Problème C# dot net gênant


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 154
    Points : 55
    Points
    55
    Par défaut Un Problème C# dot net gênant
    Bonjour,
    Je galère depuis une semaine, quelqu'un peut m'aider Svp !?
    je m'explique, depuis cet interface :



    J'essaye d'enregistrer un nouuveau employé.
    ce qui correspond à un insert dans la table Personnel (employe), en cliquant sur le boutton validation enregistrement.
    voilà mon code :

    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
    34
    35
    36
    try
                {
                    SqlConnection SqlC = new SqlConnection("Data Source=TIMA;Initial Catalog=HOPITAL;Integrated Security=True");
                    SqlCommand SqlCmd = new SqlCommand("insert into Personnel (civilite,nom,prenom,adresse,cpville,telephone_domicil1,telephone_domicil2,telephone_bureau1,telephone_bureau2,mobile1,mobile2,telecopie1,telecopie2,email1,email2,fonction,service,information_utile,note,date_naissance) values (@paramcivil,@paramnom,@paramprenom,@paramadresse,@paramcpville,@paramteldom1,@paramteldom2,@paramtelbur1,@paramtelbur2,@parammobile1,@parammobile2,@paramtelecopie1,@paramtelecopie2,@paramemail1,@paramemail2,@paramfonction,@paramservice,@paraminfoutile,@paramnote,@paramdatenaiss)", SqlC);
                    SqlCmd.Parameters.AddWithValue("@paramcivil", comboBox1.Text);
                    SqlCmd.Parameters.AddWithValue("@paramnom",textBox1.Text);
                    SqlCmd.Parameters.AddWithValue("@paramprenom", textBox11.Text);
                    SqlCmd.Parameters.AddWithValue("@paramadresse",textBox2.Text);
                    SqlCmd.Parameters.AddWithValue("@paramcpville",comboBox3.Text);
                    SqlCmd.Parameters.AddWithValue("@paramteldom1",textBox16.Text);
                    SqlCmd.Parameters.AddWithValue("@paramteldom2",textBox4.Text);
                    SqlCmd.Parameters.AddWithValue("@paramtelbur1",textBox15.Text);
                    SqlCmd.Parameters.AddWithValue("@paramtelbur2",textBox6.Text);
                    SqlCmd.Parameters.AddWithValue("@parammobile1",textBox14.Text);
                    SqlCmd.Parameters.AddWithValue("@parammobile2",textBox10.Text);
                    SqlCmd.Parameters.AddWithValue("@paramtelecopie1",textBox13.Text);
                    SqlCmd.Parameters.AddWithValue("@paramtelecopie2",textBox9.Text);
                    SqlCmd.Parameters.AddWithValue("@paramemail1",textBox7.Text);
                    SqlCmd.Parameters.AddWithValue("@paramemail2",textBox8.Text);
                    SqlCmd.Parameters.AddWithValue("@paramfonction",comboBox6.Text);
                    SqlCmd.Parameters.AddWithValue("@paramservice",comboBox5.Text);
                    SqlCmd.Parameters.AddWithValue("@paraminfoutile",memoEdit1.Text);
                    SqlCmd.Parameters.AddWithValue("@paramnote",richTextBox1.Text);
                    SqlCmd.Parameters.AddWithValue("@paramdatenaiss",dateEdit1.Text);
                    SqlDataAdapter SqlD = new SqlDataAdapter(SqlCmd);
                    DataSet DS = new DataSet();
                    SqlD.Fill(DS);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    Close();
                }
    ça fonctionne, y'a pas de souci.

    SAuf que, je veux lier cet employé (la base personnel) à une liste de diplomes (table diplome qui contient le ASP employé "clef primaire de la table employe" comme clef etrangère).

    et dans ma fenêtre, j'ai mis :




    qui impose normalement, d'enregistrer les diplome et les attribuer à l'employé en question !!!

    sauf que c'est pas possible, tant que l'employé n'a pas été crée !!
    parceque la création d'un diplome necessite un ASP _personnel, qui est celui de l'employé pas encore crée !!!

    je sais pas si c'est clair, mais aider moi SVP en posant des qst pour mieux comprendre !!
    je suis bloqué et j'ai besoind e vos lumières.

    merci infiniment d'avance, je sais que je peux compter sur vous.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    ton problème n'est pas inhérent à dotnet ou C#, mais plutôt à une erreur conceptuelle.

    les dépendances cycliques, sont possibles aussi bien en objet qu'en relationnel, mais conduisent toutes 2 à ton problème de serpent qui se mort la queue.

    mais ce n'est pas ton problème... il n'y aucun problème en fait... tu te noie dans un verre d'eau là...
    il semble assez logique de procèder en 2 passes...

    tout d'abord tu créer ton personnel, logique, et ensuite tu créer les associations avec des diplomes dans la table qui va bien...
    il est évident que si tu essaie de tout faire d'un coup tu ne peux pas y arriver, les dépendances font que cela n'est pas possible, il y a un ordre de procédure.

    donc tu synchro le personnel, sans diplome
    tu récupère sa clé de base si ce n'est pas toi qui l'a engendrée, et ensuite tu insère les diplomes grace à cette clé récupérée juste avant.

    encore une fois rien de bien méchant...
    à moins que tu n'ai fait la bêtise de mettre une liaison vers diplome dans ta table personnel, car là effectivement tu as créé une liaison circulaire et le seul moyen d'aboutir et de supprimer cette référence.

    En fait tu peux procèder de 2 façons.
    soit tu bloque ce bouton de validation d'ajout des diplomes temps que l'utilisateur n'est pas enregistré dans la base.
    soit tu considère que ce bouton de validation n'a pas à impacter l'accès aux données, et que dans tous les cas, il n'y a qu'un seul bouton qui conditionne la synchro aux données. Dans ce second cas tu procède comme je t'ai dit.
    une autre solution plus marginale consiste à synchroniser le personnel avant de sauvegarder les diploimes, et ce meme si l'utilisateur du programme n'a pas encore demandé la création.

    est ce difficile de conserver les données en mémoire et de les synchro à la création ? après tout... ce n'est pas genant, de ne pas considèrer ce bouton temps que l'utilisateur n'est pas sauvegardé, et de mettre la synchro des diplomes en attente de validation finale du dossier.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 154
    Points : 55
    Points
    55
    Par défaut
    Merci bcp, je vais faire de votre conseil

  4. #4
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 154
    Points : 55
    Points
    55
    Par défaut
    autre questions svp !?
    comment je peux recuperer la valeur maximal des ASP-personnel (champ int qui represente la clef primaire de ma table personnel) dans un entier !?
    pour le recuperer ça serais avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SqlConnection SqlConn = new SqlConnection("Data Source=TIMA;Initial Catalog=HOPITAL;Integrated Security=True");
    SqlCommand SqlCmd = new SqlCommand("insert max(ASP_personnel) from personnel",SqlConn);
    mais pour stocker le resultat dans un entier, je ne sais pas comment faire !!
    Pouvez vous m'aider svp !?

    merci infiniment

  5. #5
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 154
    Points : 55
    Points
    55
    Par défaut
    C'est bon, voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                SqlConnection SqlConn = new SqlConnection("Data Source=TIMA;Initial Catalog=HOPITAL;Integrated Security=True");
                          SqlCommand SqlCmd = new SqlCommand("select max(ASP_personnel) from personnel",SqlConn);
                SqlDataAdapter Sqld = new SqlDataAdapter(SqlCmd);
                DataSet datas = new DataSet();
                Sqld.Fill(datas);
                int A =System.Convert.ToInt32(datas.Tables[0].Rows[0].ItemArray.GetValue(0));
    de conseils !?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Un conseil, utilise plutôt ExecuteScalar pour récupérer ton entier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SqlConnection SqlConn = new SqlConnection("Data Source=TIMA;Initial Catalog=HOPITAL;Integrated Security=True");
    SqlCommand SqlCmd = new SqlCommand("select max(ASP_personnel) from personnel",SqlConn);
    int A =(int)SqlCmd.ExecuteScalar()

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

Discussions similaires

  1. Un problème de liaison entre deux datagriedvew en C# dot net
    Par Paradisma dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/09/2010, 15h15
  2. problème de chemin implicite dans DOT.NEt
    Par Hepil dans le forum ASP.NET
    Réponses: 10
    Dernier message: 07/05/2007, 18h21
  3. Réponses: 2
    Dernier message: 14/01/2006, 12h19
  4. [Dot Net] Panel et Formulaire
    Par kyrilkarlier dans le forum Windows Forms
    Réponses: 6
    Dernier message: 24/05/2005, 09h45
  5. Forum Dot Net un peu fourre tout.... Diviser ou pas ?
    Par Troopers dans le forum Evolutions du club
    Réponses: 21
    Dernier message: 09/07/2004, 23h05

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