1) Vous exécutez votre requête deux fois en appelant ExecuteNonQuery
et ExecuteScalar
. Par conséquent, vous insérerez deux enregistrements dans votre table chaque fois que cette fonction sera exécutée. Votre SQL, tout en étant deux déclarations distinctes, fonctionnera ensemble et donc vous avez seulement besoin de l'appel à ExecuteScalar
.
2) Scope_Identity()
returns a decimal. Vous pouvez soit utiliser Convert.ToInt32
sur le résultat de votre requête, ou vous pouvez convertir la valeur de retour en décimal, puis en int.
3) Assurez-vous d'envelopper vos objets de connexion et de commande dans les instructions using
afin qu'ils soient correctement éliminés. Avez-vous essayé de scinder cela en deux objets SqlCommand?
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(sql, connection))
{
connection.Open();
int tenderId = (int)(decimal)command.ExecuteScalar();
}
}
un pour chaque requête? – luke
quel type est tendre? –
Vous réalisez que vous exécutez le SQL deux fois et que vous insérez deux fois l'enregistrement. Exécutez simplement la méthode ExecuteScalar. –