Je travaille actuellement sur un projet C # et je lance une requête d'insertion qui effectue également une sélection en même temps, par exemple:
INSERT INTO table (SELECT * FROM table WHERE column=date)
Est-il possible de voir combien de lignes ont été insérées au cours de cette requête?
ExecuteNonQuery
- renvoie le nombre de lignes affectées.
SqlCommand comm;
// other codes
int numberOfRecords = comm.ExecuteNonQuery();
Si vous exécutez le code SQL à partir de votre question dans une SqlCommand
et vérifiez la valeur de retour de ExecuteNonQuery
, il devrait vous indiquer le nombre d'enregistrements affectés.
De la documentation :
Valeur de retour
Type: System.Int32
Le nombre de lignes affectées.
Si vous exécutez une grande partie de ExecuteNonQuery () et que vous les validez tous en une fois, vous pouvez obtenir le nombre total de modifications après la connexion en lisant la valeur renvoyée dans "SELECT total_changes ();"
La fonction pour obtenir le total des changements:
public static long GetTotalChanges(SQLiteConnection m_dbConnection)
{
string sql = "SELECT total_changes();";
using (SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection))
{
using (SQLiteDataReader reader = command.ExecuteReader())
{
reader.Read();
return (long)reader[0];
}
}
}
Utilisez-le dans une autre fonction:
public static long MyBulkInserts()
{
using (SQLiteConnection m_dbConnection = new SQLiteConnection())
{
m_dbConnection.Open();
using (var cmd = new SQLiteCommand(m_dbConnection))
{
using (var transaction = m_dbConnection.BeginTransaction())
{
//loop of bulk inserts
{
cmd.ExecuteNonQuery();
}
transaction.Commit();
}
}
return GetTotalChanges(m_dbConnection);
}
}
ExecuteNonQuery renvoie les lignes affectées SEULEMENT QUAND Utiliser les lignes affectées dans les propriétés de connexion est défini, sinon (par défaut) renvoie les lignes correspondantes.