SQLite非常慢ExecuteNonQuery

Rom*_*key 6 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*eon 5

使用SQLite的事情是,你包裹插入,更新,删除事务中的命令,否则这将是痛苦而缓慢。您可以使用 .NET 数据提供程序中内置的事务支持来执行此操作,或者由于您正在读取 .sql 文件,因此您可以创建第一行begin transaction和最后一行commit transaction。无论哪种方式都应该有效。

如果您想在 .sql 文件中执行此操作,则它可能如下所示。

begin transaction;

insert into ...;
update ...;
delete ...;

commit transaction;
Run Code Online (Sandbox Code Playgroud)

或者如果你在代码中这样做,它看起来像这样。

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;
}
Run Code Online (Sandbox Code Playgroud)