Dernier identifiant MySql, connecteur .net

J’utilise le connecteur MySql .net et je dois obtenir l’ID d’insertion généré par la dernière requête. Maintenant, je suppose que la valeur de retour de MySqlHelper.ExecuteNonQuery devrait être le dernier ID d’insertion, mais elle renvoie simplement 1.

Le code que j’utilise est:

 int insertID = MySqlHelper.ExecuteNonQuery(Global.ConnectionSsortingng, "INSERT INTO test SET var = @var", paramArray); 

Cependant, insertID est toujours 1. J’ai essayé de créer une connexion MySql et d’ouvrir / fermer manuellement, ce qui a entraîné le même comportement

1 est le nombre d’enregistrements effectués par la requête; ici, une seule ligne est insérée. 1 renvoie par conséquent

pour obtenir l’id de la ligne insérée, vous devez utiliser scope_identity() dans sqlserver et LAST_INSERT_ID() dans MySql

Il suffit d’utiliser le champ LastInsertedId

 MySqlCommand dbcmd = _conn.CreateCommand(); dbcmd.CommandText = sqlCommandSsortingng; dbcmd.ExecuteNonQuery(); long imageId = dbcmd.LastInsertedId; 

Essayez d’utiliser cette requête pour obtenir le dernier identifiant inséré –

 SELECT LAST_INSERT_ID(); 

Ensuite, exécutez la méthode DbCommand.ExecuteReader pour obtenir IDataReader –

 command.CommandText = "SELECT LAST_INSERT_ID()"; IDataReader reader = command.ExecuteReader(); 

… et obtenir des informations du lecteur –

 if (reader != null && reader.Read()) long id = reader.GetInt64(0); 

… N’oubliez pas de fermer le lecteur 😉

J’ai eu le même problème et après quelques tests, j’ai découvert que le problème semblait être la méthode de connexion; vous utilisez une chaîne de connexion.

C’est bien sûr utiliser la réutilisation automatique du pool de connexions, mais dans ce cas, cela m’a posé problème.

La solution finale pour moi consiste à créer une nouvelle connexion, à exécuter la requête d’insertion, puis à exécuter last_insert_id (). Sur la même connexion.

Sans utiliser la même connexion, last_insert_id () pourrait renvoyer n’importe quoi, je ne sais pas pourquoi, mais supposons qu’il perd la trace des choses car il peut s’agir de connexions différentes.

Exemple:

 MySqlConnection connection = new MySqlConnection(ConnectionSsortingng); connection.Open(); int res = MySqlHelper.ExecuteNonQuery( connection, "INSERT INTO games (col1,col2) VALUES (1,2);"); object ores = MySqlHelper.ExecuteScalar( connection, "SELECT LAST_INSERT_ID();"); if (ores != null) { // Odd, I got ulong here. ulong qkwl = (ulong)ores; int Id = (int)qkwl; } 

J’espère que ça aidera quelqu’un!