【问题标题】:How to escape string in System.Data.SQLite without prepared statements如何在没有准备好的语句的情况下转义 System.Data.SQLite 中的字符串
【发布时间】:2023-03-18 18:40:01
【问题描述】:

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

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

【问题讨论】:

  • 使用参数,你不会溢出任何东西
  • 如果你必须这样做使用 stringbuilder

标签: c# sqlite system.data.sqlite


【解决方案1】:

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

这是一篇很好的文章:

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

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

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

【讨论】:

  • +1 用于回答基本问题,而不是尝试为建议的解决方法提供解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-12-29
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多