我正在使用SQLite但是当我开始执行非查询时可能是10k +命令[.sql文件]。我发现它很慢,最多可能需要10分钟才能结束将信息添加到数据库中。
无论如何这是我的ExecuteNonQuery代码。
public int ExecuteNonQuery(string sql)
{
var cnn = new SQLiteConnection(_dbConnection);
cnn.Open();
var mycommand = new SQLiteCommand(cnn) {CommandText = sql};
int rowsUpdated = mycommand.ExecuteNonQuery();
cnn.Close();
return rowsUpdated;
}
我希望有一种方法可以让它花费几秒钟完成。
答案 0 :(得分:4)
SQLite的一点是你拥有在事务中包装insert-update-delete命令,否则会很慢。您可以使用.NET数据提供程序中内置的事务支持来执行此操作,或者由于您正在读取.sql文件,因此可以创建第一行begin transaction
和最后一行commit transaction
。无论哪种方式都应该有效。
如果你想在.sql文件中这样做,那么它可能看起来像这样。
begin transaction;
insert into ...;
update ...;
delete ...;
commit transaction;
或者如果你在代码中执行它,它将看起来像这样。
public int ExecuteNonQuery(string sql)
{
var cnn = new SQLiteConnection(_dbConnection);
cnn.Open();
var transaction = cnn.BeginTransaction();
var mycommand = new SQLiteCommand(cnn) {CommandText = sql};
mycommand.Transaction = transaction;
int rowsUpdated = mycommand.ExecuteNonQuery();
transaction.Commit();
cnn.Close();
return rowsUpdated;
}