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#]Recuperer le resultat d'une requette SELECT @@IDENTITY


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 44
    Par défaut [c#]Recuperer le resultat d'une requette SELECT @@IDENTITY
    Bonjour,

    comment recuperer la valeur retourné par ma requete SELECT @@IDENTITY AS LastId (j'utilise sql server) qui retourne le denier id inseré dans une table.
    Faut il creer un datareader comme pour tout autre select "classique".

    Merci

    Edit:
    voici le code d'insertion suivi du select @@identity:

    string maRequete = "INSERT INTO referer_test (lib_test) VALUES(\'" + monTest + "\'); SELECT @@IDENTITY AS LastId";
    myCmdInsert = new SqlCommand();
    myCmdInsert.Connection = MyConnection;
    myCmdInsert.CommandText = maRequete;

    myCmdInsert.ExecuteNonQuery();

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Franchement, j'opterai pour une decomposition des transactions

    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
    39
    40
    41
    42
    43
     
    sqlConnection myConnection = new sqlConnection(myConnString);
    sqlCommand myCmd;
    sqlTransaction myTrans;
     
    string requeteInsert = "INSERT INTO referer_test (lib_test) VALUES(\'" + monTest + "\'); 
    string requeteSelect = "SELECT @@IDENTITY AS LastId";
     
    myConnection.Open();
    myCmd = myConnection.CreateCommand();
     
    myTrans = myConnection.BeginTransaction();
    myCmd.Connection = myConnection;
    myCommand.Transaction = myTrans;
     
    Try
       {
          myCommand.CommandText = requeteInsert ;        
          myCommand.ExecuteNonQuery();
          myCommand.CommandText = requeteSelect ; 
          myreader = myCommand.ExecuteReader();
          myTrans.Commit();
          // code de traitement du reader
        }
    Catch (Exception e)
        {      
             Try
               {
                   myTrans.Rollback();
                }
             Catch (SqlException ex)
               {
                    If (! myTrans.Connection Is Nothing) 
                      {
                         // recupérer l'exception ex
                       }
                }
            // recupérer l'exception e
          }
    Finally
       {
            myConnection.Close();
       }

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    JE ferais tout simplement (sans la gestion d'erreur, a toi de la mettre )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    string maRequete = "SELECT @@IDENTITY"; 
    myCmdInsert = new SqlCommand(); 
    myCmdInsert.Connection = MyConnection; 
    myCmdInsert.CommandText = maRequete; 
     
    Int m_lastid = (int) myCmdInsert.ExecuteScalar();

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par Morpheus
    JE ferais tout simplement (sans la gestion d'erreur, a toi de la mettre )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string maRequete = "SELECT @@IDENTITY"; 
    myCmdInsert = new SqlCommand(); 
    myCmdInsert.Connection = MyConnection; 
    myCmdInsert.CommandText = maRequete; 
    Int m_lastid = (int) myCmdInsert.ExecuteScalar();
    ok j'avais oublié executeScalar()
    mais donc tu es aussi d'avis de separer les transactions

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 44
    Par défaut
    Merci a vous deux ca fonctionne parfaitement!

    Cependant j'ai un probleme avec cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int m_lastid = (int) myCmdSelect.ExecuteScalar();
    J'ai une erreur: Specified cast is not valid.

    Pour resoudre le probleme j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object m_lastid  = myCmdSelect.ExecuteScalar();
    mais comment faire pour caster correctement myCmdSelect.ExecuteScalar() en int.

    Merci

  6. #6
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Par défaut Re: [c#]Recuperer le resultat d'une requette SELECT @@IDENTI
    Citation Envoyé par MaxiMax
    Bonjour,

    comment recuperer la valeur retourné par ma requete SELECT @@IDENTITY AS LastId (j'utilise sql server) qui retourne le denier id inseré dans une table.
    Faut il creer un datareader comme pour tout autre select "classique".

    Merci

    Edit:
    voici le code d'insertion suivi du select @@identity:

    string maRequete = "INSERT INTO referer_test (lib_test) VALUES(\'" + monTest + "\'); SELECT @@IDENTITY AS LastId";
    myCmdInsert = new SqlCommand();
    myCmdInsert.Connection = MyConnection;
    myCmdInsert.CommandText = maRequete;

    myCmdInsert.ExecuteNonQuery();
    ton code est bon ... faut juste pas faire la dernière ligne, car c est bien une requete Query puisqu'elle doit te retourner le "LastId".
    donc il faut gérer ca comme tu fais pour une requete SELECT
    (à travers un sqlDataReader par exemple...)

  7. #7
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Donc retour au code neguib

  8. #8
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Par défaut
    oui mais non ...
    il n est pas obliger de décomposer ...
    en plus
    myreader = myCommand.ExecuteNonQuery();
    je suis pas sur que ca fonctionne ...
    ExecuteNonQuery ne retourne que le nombre de lignes affectées (par maj, insertion ou suppression)
    Je pense qu'il veut récupérer l ID généré

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par MaxiMax
    Merci a vous deux ca fonctionne parfaitement!

    Cependant j'ai un probleme avec cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int m_lastid = (int) myCmdSelect.ExecuteScalar();
    J'ai une erreur: Specified cast is not valid.

    Pour resoudre le probleme j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object m_lastid  = myCmdSelect.ExecuteScalar();
    mais comment faire pour caster correctement myCmdSelect.ExecuteScalar() en int.

    Merci
    Curieux..

    Essaye:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int m_lastid = Convert.ToInt32(myCmdSelect.ExecuteScalar());

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

Discussions similaires

  1. [Débutant] Recuperer le resultat d'une seule ligne select dans des variables ou un tableau
    Par Celia_anais dans le forum Accès aux données
    Réponses: 2
    Dernier message: 17/06/2015, 10h56
  2. Réponses: 3
    Dernier message: 05/08/2010, 12h15
  3. Réponses: 3
    Dernier message: 27/05/2008, 08h02
  4. recuperer ler resultat d une procedure stockée
    Par Nadaa dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/08/2004, 08h45
  5. Trie sur une requette SELECT
    Par Yali dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/08/2004, 09h56

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