[c# et sql server] @@Identity (récupérer un numéro auto)

Kati83 Messages postés 65 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 3 septembre 2004 - 17 mai 2004 à 16:03
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 2 nov. 2005 à 16:49
Bonjour,

Je voudrais savoir comment on fait pour récupérer l'id d'une ligne que l'on vient d'insérer et qui est un numéro auto.
J'ai trouvé des exemples dans la doc, mais ils sont en asp, et moi je voudrais pouvoir faire ça en c#

D'après ce que j'ai trouvé sur http://www.devparadise.com/technoweb/code/sql/A436.asp, il suffite de faire la requete insert suivie de ; SELECT @@IDENTITY as ID

Mais je ne parviens pas à le mettre en place avec c#

Merci pour votre aide.

*** Kati ***

3 réponses

JijeDsLeNoir Messages postés 9 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 1 octobre 2007
18 mai 2004 à 00:44
Exemple de solution possible :
Ajout d'un nouveau fournisseur dans la table Suppliers de la base northwind

try
{
// Connexion a la base de donnee sql serveur
SqlConnection sqlConn = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=ORDI-JIJE\SQL");

// Commande d'insertion d'un nouveau fournisseur + retour de la valeur identity
SqlCommand sqlCmd = new SqlCommand("INSERT INTO Suppliers (CompanyName) VALUES ('Test');SELECT @@IDENTITY;", sqlConn);

// Ouvre la connexion
sqlCmd.Connection.Open();

// Execute la commande d'insertion avec lecture de l'identity
int iIdentity = Convert.ToInt32((decimal)sqlCmd.ExecuteScalar());

// Ferme la connexion à la base
sqlCmd.Connection.Close();

// Affiche l'identity du nouveau fournisseur
MessageBox.Show(string.Concat("Le nouveau fournisseur a pour ID : ", iIdentity.ToString()));
}
catch(Exception exc)
{
MessageBox.Show(string.Concat("Erreur : ", exc.Message));
}


Dans cette exemple, l'ajout du fournisseur est réalisé par une simple requete. Mais il est préférable d'utiliser des procedures stockées pour travailler sur une base de données...

Oui c'est moi, là-bas dans le noir!
0
Kati83 Messages postés 65 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 3 septembre 2004
18 mai 2004 à 09:46
Ok, merci beaucoup pour ton aide.
En fait, j'utilise toujours les proc stockées, c plus propre je trouve...
En fait, j'avais fait une erreur toute bête : je n'utilisais pas executescalar, mias executereader, et il me générais des exceptions en rapport avec des cast invalides...
Bref, merci beaucoup, ça tourne impec maintenant !

Bonne journée

PS : très stylée la photo...

*** Kati ***
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
2 nov. 2005 à 16:49
C'est violent vos méthodes

ExecuteScalar() c'est bien beau mais si tu supprimes un element au
milieu, à la prochain incrémentation ca pète si tu as activé la non
gestion des doublons.



Notre amis le coq n'aurait pas une solution miracle en 2 lignes ?

----------------------------
C++ forever
C# amateur
0
Rejoignez-nous