Si ejecuta un grueso de ExecuteNonQuery(), y se compromete a todos en una sola vez, se puede obtener el número total de cambios después de la conexión por leer el valor de retorno de "SELECT TOTAL_CHANGES();"
La función para obtener los cambios totales:
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];
}
}
}
usarlo en otra función:
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);
}
}
que estoy haciendo esto, y por alguna razón a pesar de que una nueva fila se creó en mi table, este método devuelve -1. ¿Debo también tener algo en mi declaración SQL? – JoeManiaci
SqlCommand.ExecuteNonQuery() devuelve -1 cuando se hace Insert/Update/Delete. Consulte https://blogs.msdn.microsoft.com/spike/2009/01/27/sqlcommand-executenonquery-returns-1-would-doing-insert -update-delete/ –
Esto no siempre funciona como uno podría esperar. Para una ACTUALIZACIÓN, el número de filas devueltas es el número de filas que * podría * haberse cambiado en lugar de la cantidad de filas que realmente se cambiaron. Digamos que está realizando una ACTUALIZACIÓN en la que se pueden ver afectadas hasta 50 filas. Sin embargo, en 35 de esas filas, la ACTUALIZACIÓN no causa cambios en los datos. Los datos cambian solo para 15 filas de las 50 posibles filas. En este caso, uno esperaría que "15" sea el valor devuelto, pero en cambio el valor devuelto es 50, el número total de filas. – Ian