6

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

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

4

1 回答 1

5

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;
}
于 2013-02-26T21:25:01.973 回答