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

ADO.NET Discussion :

Utilisation de procédure stockéés


Sujet :

ADO.NET

  1. #1
    Membre averti Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Points : 314
    Points
    314
    Par défaut Utilisation de procédure stockéés
    Bonjour!
    pour une procédure simple comme celle là :
    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
    USE [INTERVENTIONDB]
    GO
    /****** Objet*:  StoredProcedure [dbo].[Insert_SOCIETE]    Date de génération du script*: 12/30/2010 00:49:54 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[Insert_SOCIETE](@Code_Societe NVARCHAR(5),
    							  @Nom NVARCHAR(50),
    							  @Adresse NVARCHAR(50),
    							  @Telephone NVARCHAR(50)
    								)
    AS
    SET NOCOUNT OFF
    INSERT INTO	SOCIETE(Code_Societe,Nom,Adresse,Telephone)
    VALUES(@Code_Societe,@Nom,@Adresse,@Telephone)
    je m'en sort plutôt bien en C#.
    mais par contre avec une incrémentation, j'ai ne sais comment faire pour m'en sortir.
    je vous présente la procédure stockée sur SQL Server 2005 qui me semble correcte:
    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
    USE [INTERVENTIONDB]
    GO
    /****** Objet*:  StoredProcedure [dbo].[Insert_INTERVENANT]    Date de génération du script*: 12/30/2010 00:53:23 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[Insert_INTERVENANT](	@Nom NVARCHAR(20),
    										@Prenom NVARCHAR(30),
    										@Id_Intervenant INTEGER OUTPUT
    									)
    AS
    SET NOCOUNT OFF
    SELECT @Id_Intervenant=MAX(Id_Intervenant)+1
    FROM INTERVENANT
    INSERT INTO INTERVENANT(Id_Intervenant,Nom,Prenom)
    VALUES(@Id_Intervenant,@Nom,@Prenom)
    et vous présente mon code sur VB 2010
    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
     SqlConnection conn = new SqlConnection(Program.Chaine_SQLServers());
     
                    //Instruction
                    SqlCommand cmd = new SqlCommand("Insert_INTERVENANT", conn);
                    cmd.CommandType = CommandType.StoredProcedure;
     
     
                    SqlParameter parameternom = new SqlParameter("@Nom", SqlDbType.NVarChar, 50);
                    parameternom.Value = Nom.Text;
                    cmd.Parameters.Add(parameternom);
     
                    SqlParameter parameterprenom = new SqlParameter("@Prenom", SqlDbType.NVarChar, 50);
                    parameterprenom.Value = Prenom.Text;
                    cmd.Parameters.Add(parameterprenom);
     
     
     
     
                    //Ouvre la cnnection
                    conn.Open();
     
                    int valeur = cmd.ExecuteNonQuery();
     
                    conn.Close();
                    if (valeur == 1) MessageBox.Show("Enregistrement Effeuctué");
     
     
                    Nom.Text = "";
                    Prenom.Text = "";
    comment m'arranger pour Id_Intervenant
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Si ta question c'est de savoir comment passer et récupérer la valeur du paramètre id_intervenant qui est déclaré dans la définition de ta procédure stockée avec le mot-clé output, le code ci-dessous te permet de le faire :
    Code C# : 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
    SqlConnection conn = new SqlConnection(Program.Chaine_SQLServers());
     
                //Instruction
                SqlCommand cmd = new SqlCommand("Insert_INTERVENANT", conn);
                cmd.CommandType = CommandType.StoredProcedure;
     
     
                SqlParameter parameternom = new SqlParameter("@Nom", SqlDbType.NVarChar, 50);
                parameternom.Value = Nom.Text;
                cmd.Parameters.Add(parameternom);
     
                SqlParameter parameterprenom = new SqlParameter("@Prenom", SqlDbType.NVarChar, 50);
                parameterprenom.Value = Prenom.Text;
                cmd.Parameters.Add(parameterprenom);
     
                SqlParameter parameterIdIntervenant = new SqlParameter("@Id_Intervenant", SqlDbType.Int);
                parameterIdIntervenant.Direction = System.Data.ParameterDirection.Output;
                cmd.Parameters.Add(parameterIdIntervenant);
     
     
                //Ouvre la cnnection
                conn.Open();
     
                int valeur = cmd.ExecuteNonQuery();
     
                conn.Close();
                if (valeur == 1) MessageBox.Show(string.Format("Enregistrement Effeuctué. ID Intervenant : {0}", parameterIdIntervenant.Value));
     
     
                Nom.Text = "";
                Prenom.Text = "";

    Pour pouvoir exécuter la procédure stockée, fallait créer une instance de la classe SqlParameter pour le paramètre id_interveant en lui spécifiant comme valeur System.Data.ParameterDirection.Output pour sa proprieté Direction. Ensuite tu pourras, après exécution de la procédure stockée, récupérer sa valeur avec sa proprieté Value.

    PS : Grosse remarque concernant le script SQL de ta procédure stockée Insert_INTERVENANT :
    A chaque insertion, tu calcules (généres toi-même) l'id de l'intervenant à insérer. Ce que je trouve pas du tout propre.
    La bonne pratique serait de rendre cet id comme étant auto-incrémentée (bien sûr si c'est une clef primaire), et ensuite de récupérer la dernière valeur inséré par l'intermédiaire de la fonction système @@IDENTITY.
    En gros ta procédure stockée serait plus classe avec le script ci-dessous :
    Code sql : 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
     
    GO
    /****** Objet*:  StoredProcedure [dbo].[Insert_INTERVENANT]    Date de génération du script*: 12/30/2010 00:53:23 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[Insert_INTERVENANT](	@Nom NVARCHAR(20),
    										@Prenom NVARCHAR(30),
    										@Id_Intervenant INTEGER OUTPUT
    									)
    AS
    SET NOCOUNT OFF
    -- cela suppose que id_intervenant est une clef auto-incrémentée.
    INSERT INTO INTERVENANT(Nom,Prenom)
    VALUES(@Nom,@Prenom)
    SET @Id_Intervenant = @@IDENTITY

  3. #3
    Membre averti Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Points : 314
    Points
    314
    Par défaut
    Merci vous avez largement répondu à mes pré-occupations.

  4. #4
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Attention au @@IDENTITY qui vous retourne le dernier IDENTITY inséré dans la table... mais pas forcément par vous :-)

    Préférez lui SCOPE_IDENTITY()
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Attention au @@IDENTITY qui vous retourne le dernier IDENTITY inséré dans la table... mais pas forcément par vous :-)

    Préférez lui SCOPE_IDENTITY()
    t'as raison. Merci pour l'info.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2008, 17h56
  2. Utiliser une procédure stockée dnas Framework C8
    Par Darcynette dans le forum Cognos
    Réponses: 4
    Dernier message: 14/12/2007, 19h22
  3. [PDO] Utilisation de procédures stockées
    Par s.cardinaux dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/10/2007, 23h39
  4. Réponses: 8
    Dernier message: 27/09/2007, 08h58
  5. [CR][VB6] Utilisation des procédures stockées
    Par couledoux dans le forum SDK
    Réponses: 3
    Dernier message: 10/03/2005, 14h29

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