【发布时间】:2018-08-27 18:20:19
【问题描述】:
我正在尝试使用事务将大量数据插入 SQLite 数据库。
using (var transaction = database.BeginTransaction())
{
foreach(var i in Enumerable.Range(0, _wordCount))
{
statement.CommandText = $"INSERT INTO Hashes (word, hash) VALUES ('{words[i]}', '{hashes[i]}')";
statement.ExecuteNonQuery();
}
transaction.Commit();
}
上述代码适用于 10 - 12k 范围内的少量数据,但是,任何超过 12k 标记的数据似乎都会崩溃并出现以下错误
'SQL logic error near "d": syntax error'
在线资源表明,对于通过单个事务可以完成的插入次数不应该有限制,因此无论插入次数如何,事务都可以正常运行
当超过 12,000 次插入时,我有什么遗漏或者我的交易可能失败的任何原因吗?
【问题讨论】:
-
只有当您插入超过 12 000 条记录时才会发生这种情况?
-
不完全是 12,000。它在 12,000 到 12,400 之间崩溃
-
我的猜测是其中一个单词包含一个单引号。无论如何,请使用参数。
-
是的,使用带有占位符的预处理语句,而不是直接在查询中插入未知文本。这就是您收到语法错误的原因。 (顺便说一句,我刚刚运行了一个脚本,在一个事务中插入了近 300,000 行。你的问题与事务或限制或类似的东西无关。)