如何在没有预处理语句的情况下转义System.Data.SQLite中的字符串

时间:2017-02-08 21:08:44

标签: c# sqlite system.data.sqlite

如何在不使用参数的情况下转义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();

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

1 个答案:

答案 0 :(得分:3)

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

这是一篇很好的文章:

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

为了进一步澄清,本文直接从SQLite链接到此常见问题解答,我觉得这很有帮助:

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