如何在没有准备好的语句的情况下转义 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 深层链接到此常见问题解答,我觉得这很有帮助:
如何在不使用参数的情况下转义 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 深层链接到此常见问题解答,我觉得这很有帮助: