This question already has answers here:
SQLite Insert very slow?
(4个答案)
已关闭8年。
好吧,我正在使用SQLite,但是当我开始执行非查询时,大概有10k +条命令[.sql文件]。我发现,将信息添加到数据库可能要花费10分钟以上的时间,速度非常慢。
无论如何,这是我的ExecuteNonQuery代码。
我希望有一种方法可以使它花费几秒钟来完成。
或者,如果您在代码中执行此操作,它将看起来像这样。
(4个答案)
已关闭8年。
好吧,我正在使用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;
}
我希望有一种方法可以使它花费几秒钟来完成。
最佳答案
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;
}
关于c# - SQLite ExecuteNonQuery非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15099484/
10-16 10:37