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

ASP.NET Discussion :

Récupérer auto-id de l'INSERT qu'on vient de faire


Sujet :

ASP.NET

  1. #1
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Points : 1 119
    Points
    1 119
    Par défaut Récupérer auto-id de l'INSERT qu'on vient de faire
    Bonjour,

    je fais un INSERT dans une db.

    juste après, je dois faire un autre INSERT dans une 2eme table, mais dans cette INSERT je dois avoir entre autre l'id autoincrémenté lors du premier INSERT.

    quel est le meilleur moyen pour le récupérer?

    il y a la solution classique de faire entre les 2 requêtes une 3ème pour récupérer le dernier id de la table, mais je ne la trouve pas sûre si l'application comporte plusieurs utilisateurs susceptibles d'ajouter des enregistrements en même temps.

    je me trompe peut-être?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Points : 136
    Points
    136
    Par défaut
    En SQLServer:
    crée une procédure stockée pour le insert avec le SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO .....VALUES ()
    SELECT @@Identity AS 'Id'
    En C#, execute la procédure stockée et récupère la valeur de retour:
    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
     
    scInsertPost.CommandText = "sp_InsertPost";
    			scInsertPost.CommandType = System.Data.CommandType.StoredProcedure;
    			scInsertPost.Connection = scDBConnection;
    			scInsertPost.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Name", System.Data.SqlDbType.VarChar, 255));
    			scInsertPost.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Comment", System.Data.SqlDbType.VarChar, 255));
    			scInsertPost.Parameters.Add(new System.Data.SqlClient.SqlParameter("@WithOperator", System.Data.SqlDbType.Bit));
    			scInsertPost.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Stand", System.Data.SqlDbType.TinyInt, 1));
    			scInsertPost.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Archived", System.Data.SqlDbType.Bit));
    			scInsertPost.Parameters.Add(new System.Data.SqlClient.SqlParameter("@InstructionSheet", System.Data.SqlDbType.VarChar, 255));
    			scInsertPost.UpdatedRowSource = System.Data.UpdateRowSource.None;
    			scInsertPost.Parameters["@Name"].Value = sName;
    			scInsertPost.Parameters["@Comment"].Value = sComment;
    			scInsertPost.Parameters["@WithOperator"].Value = bWithOperator;
    			scInsertPost.Parameters["@Stand"].Value = System.Convert.ToByte(sStand);
    			scInsertPost.Parameters["@Archived"].Value = bArchived;
    			scInsertPost.Parameters["@InstructionSheet"].Value = sIntructionSheet;
    			iId = System.Convert.ToInt32(scInsertPost.ExecuteScalar());
    			scInsertPost.Dispose();
    			scDBConnection.Close();

  3. #3
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Citation Envoyé par Troopers
    En SQLServer:
    crée une procédure stockée pour le insert avec le SQL:
    Il y'a toute une discussion entre l'utilisation de @@IDENTITY et SCOPE_IDENTITY() en ce qui concerne SQL Server. Perso, j'utilise toujours le second.

    Sinon, je pense qu'il y'a moyen d'utiliser des paramètres de retour plus efficacement (càd avec ParameterDirection.ReturnValue)

  4. #4
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    On peut pas récupérer id on faisant comme ca ?

    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
        private void createTransaction_Web()
        {
           ConnectionStringSettings settings;
           settings = ConfigurationManager.ConnectionStrings["DatabaseConnection"];
           string sIntert_Transaction = "INSERT INTO TRANSACTIONS_WEB"
                   + "(IDMarchand, DateTransaction,Montant,Valide,P2P,RemonteeBackOffice)"
                   + "VALUES('000000','" + DateTime.Now.ToString() + "', '0','0','0','0')";
            if (settings != null)
            {
                try
                {
                    SqlConnection oConnection = new SqlConnection(settings.ConnectionString);
                    SqlCommand oCommand = new SqlCommand(sIntert_Transaction,oConnection);
                    //Ouvre la connection
                    oConnection.Open();
                    //execute la commande
                    int newID = (int)oCommand.ExecuteScalar();
     
                    oConnection.Close();
                }
                catch (Exception e)
                {
                    IDmessage.Text = e.Message;
                }
            }
        }
    }

  5. #5
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    ExecuteScalar() s'utilise pour executer une requete qui renvoit une valeur (par exemple un SELECT COUNT(*) )

    La meilleur solution reste la procédure stockée.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

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

Discussions similaires

  1. récupérer l'id d'un insert qu'on vient de faire
    Par lisa.a dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/02/2009, 20h16
  2. Réponses: 11
    Dernier message: 23/11/2007, 09h38
  3. Récupérer le numéro auto lors d'une insertion
    Par zoidy dans le forum Access
    Réponses: 5
    Dernier message: 27/04/2006, 11h20
  4. Réponses: 8
    Dernier message: 25/01/2006, 12h06
  5. Réponses: 16
    Dernier message: 12/04/2005, 14h22

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