Nếu bạn chạy một số lượng lớn của ExecuteNonQuery(), và cam kết tất cả chúng trong một lần, bạn có thể nhận được số tổng thay đổi sau khi kết nối bằng cách đọc các giá trị trả về từ "SELECT TOTAL_CHANGES();"
Chức năng để có được tổng số thay đổi:
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];
}
}
}
Sử dụng nó trong chức năng khác:
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);
}
}
tôi đang làm điều này, và vì một lý do mặc dù một hàng mới đã được tạo ra trong tôi bảng, phương thức này trả về -1. Tôi cũng nên có một cái gì đó trong câu lệnh sql của tôi? – JoeManiaci
SqlCommand.ExecuteNonQuery() trả về -1 khi thực hiện Chèn/Cập nhật/Xóa Xem https://blogs.msdn.microsoft.com/spike/2009/01/27/sqlcommand-executenonquery-returns-1-when-doing-insert -update-delete/ –
Điều này không phải lúc nào cũng hoạt động như mong đợi. Đối với một UPDATE số hàng trả về là số hàng * có thể * đã được thay đổi thay vì số hàng thực sự đã thay đổi. Giả sử bạn đang thực hiện CẬP NHẬT, nơi tối đa 50 hàng có thể bị ảnh hưởng. Tuy nhiên đối với 35 trong số những hàng này, UPDATE không gây ra bất kỳ dữ liệu nào được thay đổi. Dữ liệu chỉ thay đổi 15 hàng trong số 50 hàng có thể. Trong trường hợp này, người ta hy vọng rằng "15" sẽ là giá trị trả lại nhưng thay vào đó giá trị trả về là 50, tổng số hàng. – Ian