wake-up-neo.com

Erhalten Sie betroffene Zeilen in ExecuteNonQuery

Ich arbeite gerade an einem C # -Projekt und führe eine Einfügeabfrage aus, die gleichzeitig auch eine Auswahl ausführt, z.

INSERT INTO table (SELECT * FROM table WHERE column=date)

Gibt es eine Möglichkeit, wie viele Zeilen bei dieser Abfrage eingefügt wurden?

37
Boardy

ExecuteNonQuery - gibt die Anzahl der betroffenen Zeilen zurück.

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

Wenn Sie die SQL von Ihrer Frage aus in einer SqlCommand ausführen und den Rückgabewert von ExecuteNonQuery überprüfen, sollte Ihnen mitgeteilt werden, wie viele Datensätze betroffen waren.

Aus der Dokumentation :

Rückgabewert 
Geben Sie Folgendes ein: System.Int32
Die Anzahl der betroffenen Zeilen.

14
M.Babcock

Wenn Sie einen Großteil von ExecuteNonQuery () ausführen und alle auf einmal festschreiben, können Sie die Anzahl der gesamten Änderungen nach der Verbindung abrufen, indem Sie den Rückgabewert von "SELECT total_changes ();" lesen.

Die Funktion zum Abrufen der Gesamtänderungen:

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];
                }
            }
        }

Verwenden Sie es in einer anderen Funktion:

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 gibt die betroffenen Zeilen zurück. ONLY WHEN Use Affected Rows in den Verbindungseigenschaften ist gesetzt, wenn nicht (Standard) übereinstimmende Zeilen zurückgibt.

0
AlejandroAlis