Maison >base de données >tutoriel mysql >Pourquoi ExecuteScalar() renvoie-t-il 0 lors de la récupération de l'ID d'une ligne insérée en C# ?
Récupération de l'ID d'une ligne insérée en C#
Lors de l'insertion de nouvelles données dans une table de base de données, capture de l'ID de la ligne nouvellement générée peut être indispensable pour un traitement ultérieur. Cet article explore un problème courant où l'utilisation d'ExecuteScalar() pour obtenir l'ID de ligne inséré renvoie systématiquement 0, même si l'ID réel est différent de zéro.
Le bloc de code fourni :
MySqlCommand comm = connect.CreateCommand(); comm.CommandText = insertInvoice; comm.CommandText += "\'" + invoiceDate.ToString("yyyy:MM:dd hh:mm:ss") + "\', " + bookFee + ", " + adminFee + ", " + totalFee + ", " + customerID + ")"; int id = Convert.ToInt32(comm.ExecuteScalar());
tente d'exécuter une instruction d'insertion et de récupérer l'ID généré à l'aide de ExecuteScalar(). Cependant, cette approche échoue généralement en raison de l'imprévisibilité de la méthode ExecuteScalar() dans des contextes non scalaires.
Pour récupérer de manière fiable l'ID de la ligne insérée, le code suivant peut être utilisé :
MySqlCommand comm = connect.CreateCommand(); comm.CommandText = insertStatement; comm.ExecuteNonQuery(); long id = comm.LastInsertedId;
Après avoir exécuté l'instruction insert avec ExecuteNonQuery(), nous pouvons accéder à la propriété LastInsertedId de l'objet de commande, qui fournit l'ID généré pour la ligne récemment insérée. Cette méthode est recommandée pour récupérer de manière fiable l'ID de ligne inséré.
De plus, la syntaxe MySQL pour récupérer l'ID inséré (last_insert_id()) n'est pas prise en charge en C#. Au lieu de cela, LastInsertedId peut être utilisé dans le cadre de l'objet MySqlCommand pour obtenir l'ID généré.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!