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 :

Enregistrement nouveaux employés


Sujet :

Windows Forms

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Enregistrement nouveaux employés
    Bonjour tout le monde,

    Voila je suis entrain de réaliser une application que mon professeur d'informatique m'a donné à faire mais j'ai un petit souci.
    Je travail en C# sous VisualStudio 2005 avec une base de données sous le SGBD SqlServer 2000.

    A Savoir :
    * Dans ma base j'ai 2 tables ("employé", "service").
    * Dans ma form j'utilise un dataAdapteur et un DataSet relié à ma table "employé".
    * Dans ma base de données, j'ai une procédure stockée permettant l'ajout du bon numero.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE PROCEDURE [dbo].[GETIDEMPLOYE] @myid char(36) OUTPUT 
    AS 
    SET @myid = NEWID()
    GO
    Sujet de l'application :
    c'est la gestion du personnel d'une entreprise.

    Ce que je compte faire :
    Donc dans cette application, j'ai une form qui permet d'afficher les différents employés de l'entreprise (qui sont renseigné dans la base) et elle me permet également de rajouter de nouveaux employés.
    Mon problème survient lorsque je souhaite enregistrer un nouveaux employé c'est à dire que le champ numéro de ma table "employé" à comme valeur par défaut "NewId()".
    Donc dans mon application, le champ "tb_numero" prend comme valeur par défaut "auto".
    Je souhaiterais que lorsque j'enregistre ce nouveau employé dans la base de données, que le champ numero change de valeur donc qu'il ne soit plus "auto" mais un truc du genre "1E5C559B-C477-4CC3-A431-104CE1EBCF5D" ce qui est généré grâce au "NewId()".

    Voici ce que le document me conseil de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            private void tp1_employe_RowChanged(object sender, DataRowChangeEventArgs e)
            {
                if (e.Action == DataRowAction.Add)
                {
                    dbCo_gesper.Open();
                    dbPs_idEmploye.ExecuteNonQuery();
                    dbCo_gesper.Close();
                    e.Row["numero"] = dbPs_idEmploye.Parameters["@myid"].Value.ToString();
                }
            }
    Et voici le code du bouton permettant d'enregistrer dans la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     private void bt_validation_Click(object sender, EventArgs e)
            {
                DialogResult dr = MessageBox.Show("Voulez-vous sauvegarder tout les changements?", "Sauvegarder et Quitter l'application", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes)
                {
                    this.BindingContext[dbDs_employe1, dbDs_employe1.tp1_employe.TableName].EndCurrentEdit();
                    dbAd_employe.Update(dbDs_employe1, dbDs_employe1.tp1_employe.TableName);
     
                }
            }
    Je vois pas comment faire pour que lors de l'enregistrement la procédure stockée s'exécute.
    En gros, comment je peux faire pour appeler la méthode tp1_employe_RowChanged(object sender, DataRowChangeEventArgs e) ???
    Car pour le moment le champ numero de ma table "employe" prend comme valeur "auto", donc comment je peux faire pour le modifier??

    Merci d'avance!!

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    la question qui me brule les lèvres, c'est...pourquoi ???

    pourquoi utiliser une procédure stockée alors que le type GUID existe en .net, et s'instantie comme ca:
    ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à pvialatte
    Citation Envoyé par pvialatte Voir le message
    Salut,

    la question qui me brule les lèvres, c'est...pourquoi ???

    pourquoi utiliser une procédure stockée alors que le type GUID existe en .net, et s'instantie comme ca:
    ?
    Merci pour ta réponse.
    Tout simplement parce que je connaissait pas guid.
    Mais à quel endroit le ferais-tu dans mon code car je vois pas comment faire??

    Merci d'avance.

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Je viens de trouver comment faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void bt_ajouter_Click(object sender, EventArgs e)
            {
                this.BindingContext[dbDs_employe1, dbDs_employe1.tp1_employe.TableName].AddNew();
                tb_numero.Text = System.Guid.NewGuid().ToString();
    affichePosCpt();
            }
    bt_ajouter_Click(object sender, EventArgs e) est un bouton que j'utilise pour ajouter un employé.

    Une petite question, il n'y a pas de risque que le numéro créé soit déjà existant dans la base??

    Cordialement

  5. #5
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    J
    Une petite question, il n'y a pas de risque que le numéro créé soit déjà existant dans la base??
    C'est mathématiquement possible mais la probabilité est extrêmement faible, l'algorithme est conçu pour générer un nombre aléatoire, donc, en pratique, on peut considerer que c'est impossible...

    et vu que les GUID sont utilises pour cet usage dans de nombreuses applis, je pense que si ils étaient buggés, on le saurait depuis

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à pvialatte
    Citation Envoyé par pvialatte Voir le message
    C'est mathématiquement possible mais la probabilité est extrêmement faible, l'algorithme est conçu pour générer un nombre aléatoire, donc, en pratique, on peut considerer que c'est impossible...

    et vu que les GUID sont utilises pour cet usage dans de nombreuses applis, je pense que si ils étaient buggés, on le saurait depuis
    Ok, merci beaucoup pour ton renseignement et surtout merci pour tout ton aide.

    Cordialement

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Bonjour tout le monde,

    Après multiple réflexion, j'aimerais que l'ajout d'un employé se fasse grâce au code suivant :
    1) Form_Employé => bouton ajouter()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            private void bt_ajout_Click(object sender, EventArgs e)
            {
                this.BindingContext[dbDs, dbDs.tp1_employe.TableName].AddNew();
                affichePosCpt();
                surAjout();
                Sexe();
            }
    2) Form_Principal
    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
    37
    38
     public Fm_principal()
            {
                InitializeComponent();
                dbDs_empSce1.Clear();
     dbAd_employe.Fill(dbDs_empSce1, "tp1_employe");
                dbDs_empSce1.tp1_employe.RowChanged += new DataRowChangeEventHandler(tp1_employe_RowChanged);
                       }
     
    private void tp1_employe_RowChanged(object sender, DataRowChangeEventArgs e)
            {
                if (e.Action == DataRowAction.Add)
                {
                    try
                    {
                        dbCo_gesper.Open();
                        dbPs_idEmploye.ExecuteNonQuery();
                        dbCo_gesper.Close();
                        e.Row["numero"] = dbPs_idEmploye.Parameters["@myid"].Value.ToString();
                    }
                    catch (Exception pb)
                    {
                        MessageBox.Show(pb.ToString());
                        e.Row.RejectChanges();
                    }
                }
                if (e.Action == DataRowAction.Change)
                {
                    try
                    {
                        dbAd_employe.Update(new DataRow[] { e.Row });
                    }
                    catch (Exception pb)
                    {
                        MessageBox.Show(pb.ToString());
                        e.Row.RejectChanges();
                    }
                }
            }
    Il m'affiche le message d'erreur suivant :
    La colonne 'numero' n'autorise pas les valeurs null
    Pourtant dans mon dataSet et même dans ma base, pour le champ 'numero' j'ai mis une valeur pas défaut mais j'ai quand même cette erreur.

    Quelqu'un pourrais m'aider car je vois pas du tout pourquoi et surtout comment faire pour régler mon problème??!!

    Merci d'avance

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    J'ai résolu le message d'erreur suivant :
    La colonne 'numero' n'autorise pas les valeurs null
    Mais le problème qui s'oppose à moi maintenant est l'erreur suivante :
    System.InvalidOperationException: ExecuteNonQuery*: la propriété Connection n'a pas été initialisée.

    à System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)

    à System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)

    à System.Data.SqlClient.SqlCommand.ExecuteNonQuery()

    à Fiche3.Fm_principal.tp1_employe_RowChanged(Object sender, DataRowChangeEventArgs e) dans C:\Documents and Settings\loic\Mes documents\Visual Studio 2005\Projects\Fiche3\Fiche3\Fm_principal.cs:ligne 82
    La ligne 82 est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbPs_idEmploye.ExecuteNonQuery();
    Quelqu'un à t'il une idée pour résoudre mon problème s'il vous plais??

    Cordialement!!

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut aide
    bonjour a tous je suis étudiant aussi et j'ai le meme probleme j'ai une application et sur windows form relié a une base de donnée acces.
    j'ai ausi un bouton de validation et je sais pas comment le configuré pouvez vous m'aidez ? si vous voulez plus de détail faites signe. en attendant je continuerais mes recherches.
    merci

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Vraiment besoin d'aide
    Et oui je cherche, je cherche et j'améliore tout doucement mais bon cela fonctionne pas encore.
    J'ai réglé le problème précédent en faisant la liaison de mon SqlCommand nommé 'dbPs_idEmploye' avec mon SqlConnexion 'dbCo_Gesper'.

    A présent le problème est le suivant :
    Lorsque j'ajoute un employé, cela me l'enregistre mais au lieu que ma procédure ('dbPs_idEmploye') s'exécute il m'enregistre 'auto' au niveau de la colonne 'numero'. Je vois pas du tout d'où il vient celui là??!!
    Re-voici ma procédure stockée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE PROCEDURE [dbo].[GETIDEMPLOYE] @myid char(36) OUTPUT 
    AS 
    SET @myid = NEWID()
    GO
    Comment puis-je faire??
    Je vois vraiment pas ou est le problème, j'ai beau chercher en regardant le code, en faisant des recherches sur internet, je trouve rien, quelqu'un a pas une idée??

    Merci d'avance!!

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/09/2006, 09h35
  2. Réponses: 7
    Dernier message: 07/06/2006, 07h32
  3. Réponses: 2
    Dernier message: 05/06/2006, 14h24
  4. Réponses: 2
    Dernier message: 11/05/2006, 10h41
  5. pb lors de la saisie de nouveaux enregistrement
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/12/2004, 09h02

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