SQLite非常慢ExecuteNonQuery

时间:2013-02-26 21:21:06

标签: c# sqlite

我正在使用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;
}

我希望有一种方法可以让它花费几秒钟完成。

1 个答案:

答案 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;
}