Если запустить большую часть ExecuteNonQuery(), и их все совершают один раз, вы можете получить общее количество изменений после соединения пути чтения возвращаемого значения из «SELECT total_changes();»
Функция, чтобы получить общее количество изменений:
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];
}
}
}
использовать его в другой функции:
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);
}
}
Я делаю это, и по какой-то причине, даже если новая строка была создана в моем table, этот метод возвращает -1. Должен ли я иметь что-то в своем заявлении sql? – JoeManiaci
SqlCommand.ExecuteNonQuery() возвращает -1 при вставке/обновлении/удалении См. Https://blogs.msdn.microsoft.com/spike/2009/01/27/sqlcommand-executenonquery-returns-1-when-doing-insert -update-delete/ –
Это не всегда работает так, как можно было бы ожидать. Для UPDATE количество возвращенных строк - это количество строк, которые * могут * были изменены, а не количество строк, которые были фактически изменены. Предположим, вы делаете UPDATE, где может быть затронуто до 50 строк. Однако для 35 из этих строк UPDATE не приводит к изменению данных. Данные изменяются только для 15 строк из 50 возможных строк. В этом случае можно было бы надеяться, что «15» будет возвращенным значением, но вместо этого возвращаемое значение равно 50, общее количество строк. – Ian