Se si esegue una massa di ExecuteNonQuery(), e li impegnano in una volta, è possibile ottenere il numero di cambiamenti totali dopo connessione leggere il valore restituito da "SELECT TOTAL_CHANGES();"
La funzione di ottenere il totale cambia:
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];
}
}
}
utilizzarlo in un'altra funzione:
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);
}
}
sto facendo questo, e per qualche ragione, anche se una nuova riga è stato creato nel mio tabella, questo metodo restituisce -1. Dovrei avere anche qualcosa nella mia istruzione sql? – JoeManiaci
SqlCommand.ExecuteNonQuery() restituisce -1 quando si esegue Insert/Update/Delete Vedere https://blogs.msdn.microsoft.com/spike/2009/01/27/sqlcommand-executenonquery-returns-1-when-doing-insert -update-delete/ –
Questo non sempre funziona come ci si potrebbe aspettare. Per un UPDATE il numero di righe restituite è il numero di righe che * potrebbe * essere stato modificato anziché il numero di righe effettivamente modificate. Supponiamo che stiate facendo un UPDATE in cui possono essere interessate fino a 50 righe. Tuttavia, per 35 di queste righe, UPDATE non causa la modifica di alcun dato. I dati cambiano solo per 15 righe delle 50 possibili righe. In questo caso si spera che "15" sia il valore restituito ma invece il valore restituito è 50, il numero totale di righe. – Ian