如何在没有准备好的语句的情况下转义 System.Data.SQLite 中的字符串

How to escape string in System.Data.SQLite without prepared statements

如何在不使用参数的情况下转义 System.Data.SQLite 中的字符串?我正在像这样构建一个可能很大的 INSERT 查询。

string sql = "INSERT INTO Request (Col1, Col2, Col3) VALUES ";
bool hasValue = false;
foreach (TestItem item in order.Tests)
{
    if (hasValue)
        sql += ", ";
    hasValue = true;

    sql = sql + String.Format("('{1}', '{2}', '{3}')", sql, a, b, c);
}

using (SQLiteCommand command = new SQLiteCommand(sql, _database))
    command.ExecuteNonQuery();

我可以将每个插入分解为一个单独的查询,但我自己转义字符串不是更有效吗?我可以动态生成查询参数,但参数列表不会太大吗?

如果您关心效率,我会考虑单独执行多个插入,使用参数(为了安全),但在一个事务中。逐行插入时,SQLite 的性能很糟糕,但如果你可以将所有插入都包装在一个事务中,你会看到更好的性能。

这是一篇关于此的好文章:

https://www.jokecamp.com/blog/make-your-sqlite-bulk-inserts-very-fast-in-c/

为了进一步说明,文章直接从 SQLite 深层链接到此常见问题解答,我觉得这很有帮助:

http://www.sqlite.org/faq.html#q19