web-dev-qa-db-fra.com

Obtenir les lignes affectées sur ExecuteNonQuery

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?

37
Boardy

ExecuteNonQuery - renvoie le nombre de lignes affectées.

SqlCommand comm;
// other codes
int numberOfRecords = comm.ExecuteNonQuery();
79
John Woo

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.

14
M.Babcock

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);
            }
        }
0
Jfly

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.

0
AlejandroAlis