Nous sommes actuellement le 12 Juil 2026, 10:11

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 6 message(s) ] 
Auteur Message
MessagePublié: 18 Avr 2005, 14:14 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
Comment faire pour récupérer un NuméroAuto après avoir fait un INSERT INTO dans une base de données Access en C# ?

Par exemple si j'ai cette table Contact:
Code :
ID (NuméroAuto)
Nom (texte)
Prénom (texte)


J'exécute ce code pour ajouter un enregistrement:
Code :
...
string sql = "INSERT INTO Contact(Nom, Prénom) VALUES(@Nom, @Prénom)";

OleDbCommand comm = new OleDbCommand(sql, conn);

comm.Parameters.Add("@Nom", nom);
comm.Parameters.Add("@Prénom", prenom);

comm.ExecuteNonQuery();


J'aimerais remplacé la command ExecuteNonQuery pour obtenir le ID qui est généré automatiquement par Access.


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 18 Avr 2005, 21:04 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

Inscription : 06 Fév 2002, 22:42
Message(s) : 185
Localisation : Québec
Ouvre le .NET framework SDK documentation et assaye cet URL :


ms-help://MS.NETFrameworkSDKv1.1/cpguid ... values.htm


En gros tu dois "handler" l'évènement "OnRowUpdated" du DataSet. Cet évènement est déclenché par un UPDATE du DataAdapter pour chaque ligne ajoutée à la table.


Code :
 protected static void OnRowUpdated(object sender, OleDbRowUpdatedEventArgs args)
  {
    // Include a variable and a command to retrieve the identity value from the Access database.
    int newID = 0;
    OleDbCommand idCMD = new OleDbCommand("SELECT @@IDENTITY", nwindConn);

    if (args.StatementType == StatementType.Insert)
    {
      // Retrieve the identity value and store it in the CategoryID column.
      newID = (int)idCMD.ExecuteScalar();
      args.Row["CategoryID"] = newID;
    }
  }
}


Si je me souviens bien il y avait une légère erreur dans l'exmple. Si tu es patient je pourrai poster le code VB.NET correct demain...

_________________
HTH

:arrow: This posting is provided "AS IS" with no warranties, and confers no rights cr*sse!


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 18 Avr 2005, 22:02 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
J'avais vu @@identity lors de mes recherches sur Google, mais ça semblait seulement fonctionner pour MySQL.

Je vais attendre votre code.

Pour le moment j'utilise max() puisque c'est seulement pour faire un démo et je sais qu'il n'y aura jamais plus d'un update de la table en même temps.

Avec ADO j'utilisais AddNew avec les recordset, mais je ne suis pas encore très à l'aise avec ADO.NET. Quelqu'un aurait un bon livre en C# ADO.NET ?


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 18 Avr 2005, 22:10 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

Inscription : 06 Fév 2002, 22:42
Message(s) : 185
Localisation : Québec
SELECT @@Identity est supporté par SQL Server est nouveau depuis Access 2000. Il retourne le dernier Autonumber dans le contexte de la connexion en cours.

_________________
HTH

:arrow: This posting is provided "AS IS" with no warranties, and confers no rights cr*sse!


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 19 Avr 2005, 12:16 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

Inscription : 06 Fév 2002, 22:42
Message(s) : 185
Localisation : Québec
Tel que promis :

Code :
If e.StatementType = StatementType.Insert Then
    ' Retrieve the identity value and store it in the IdIntervention column.

    Dim oCmd As New OleDbCommand("SELECT @@IDENTITY", e.Command.Connection)

    e.Row("IdIntervention") = oCmd.ExecuteScalar()
    e.Row.AcceptChanges()

End If



AcceptChanges fait en sorte que l'enregistrement n'est pas marqué comme "modifié".

_________________
HTH

:arrow: This posting is provided "AS IS" with no warranties, and confers no rights cr*sse!


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 20 Avr 2005, 10:31 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
Merci, ça fonctionne très bien !

Avec ADO.NET et les DataSet c'est très simple finalement.

Code :
...
DataRow row = dataSet.Tables[0].NewRow();
string ID = row["ID"];

row["Nom"] = nom;
row["Prénom"] = prenom

dataSet.Tables[0].Rows.Add(row);
...


Par contre, ça ne fonctionne pas avec ASP.NET. J'imagine que la connection n'est pas toujours ouverte sur la BD contrairement à une application WinForm.


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 6 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
cron
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site