今天遇到了往Sqlite数据库里插入1400多条数据的情况,结果每次都需要一两分钟才能完成.

搜索了一下,在​​这里​​找到了解决办法,所需要的时间直接变成不到2秒!


internal static void 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次通信,而新方法只进行一次通信


时间当然有差别了……