Wenn Sie einen Großteil der ExecuteNonQuery() laufen, und sich verpflichten, sie alle in einmal, können Sie die Anzahl der gesamten Änderungen nach der Verbindung erhalten, indem Sie den Rückgabewert von lesen „SELECT total_changes();“
Die Funktion die gesamten Änderungen zu erhalten:
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];
}
}
}
es in einer anderen Funktion verwenden:
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);
}
}
ich das tue, und aus irgendeinem Grunde, obwohl eine neue Zeile erstellt wurde meine Tabelle gibt diese Methode -1 zurück. Sollte ich auch etwas in meiner SQL-Anweisung haben? – JoeManiaci
SqlCommand.ExecuteNonQuery() gibt -1 zurück, wenn Sie Einfügen/Aktualisieren/Löschen ausführen Siehe https://blogs.msdn.microsoft.com/spike/2009/01/27/sqlcommand-executenonquery-returns-1-when-doing-insert -update-delete/ –
Dies funktioniert nicht immer wie erwartet. Bei einem UPDATE ist die Anzahl der zurückgegebenen Zeilen die Anzahl der Zeilen, die * geändert werden konnten * und nicht die Anzahl der Zeilen, die tatsächlich geändert wurden. Nehmen wir an, Sie machen ein UPDATE, bei dem bis zu 50 Zeilen betroffen sein könnten. Bei 35 dieser Zeilen bewirkt das UPDATE jedoch keine Änderung der Daten. Die Daten ändern sich nur für 15 Zeilen der 50 möglichen Zeilen. In diesem Fall würde man hoffen, dass "15" der zurückgegebene Wert ist, aber stattdessen der zurückgegebene Wert 50 ist, die Gesamtzahl der Zeilen. – Ian