c# Sqlite批量新增資料
阿新 • • 發佈:2019-02-06
今天遇到了往Sqlite資料庫裡插入1400多條資料的情況,結果每次都需要一兩分鐘才能完成.
搜尋了一下,在這裡找到了解決辦法,所需要的時間直接變成不到2秒!
internalstaticvoid FastInsertMany(DbConnection cnn)
{
using (DbTransaction dbTrans = cnn.BeginTransaction())
{
using (DbCommand cmd = cnn.CreateCommand())
{
try
{
cmd.CommandText = "INSERT INTO TestCase(MyValue) VALUES(?)" ;
DbParameter Field1 = cmd.CreateParameter();
cmd.Parameters.Add(Field1);
for (int n = 0; n < 100000; n++)
{
Field1.Value = n + 100000;
cmd.ExecuteNonQuery();
}
}
dbTrans.Commit();
}
catch
{
dbTrans.RollBack();
}
}
}
原來花兩分鐘是由於ExecuteNonQuery方法執行時自己提交了更新事務,預設執行更新操作是會自動提交事務的,也就是說預設情況下一條SQL語句就是一個事務,如果不明白可以去看事務的隔離級別。更改後的程式碼把所有的更新SQL放在一個事務中,只有執行到Commit方法時才提交事務。
與資料庫通訊的內容兩次完成的,但舊的方法進行了100000次通訊,而新方法只進行一次通訊
時間當然有差別了……