2017-02-08 16 views
0

System.Data.SQLiteの文字列をパラメータを使用せずにエスケープするにはどうすればよいですか?私はそのように潜在的に大きなINSERTクエリを構築しています。準備文なしでSystem.Data.SQLiteの文字列をエスケープする方法

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(); 

個々の挿入を別のクエリに分割することはできますが、自分自身で文字列をエスケープする方が効率的ではないでしょうか?私はクエリパラメータを動的に生成することができましたが、パラメータリストが大きくなりすぎることはありませんでしたか?

+2

使用はあなたがこれをしなければならない場合は、 – pm100

+1

をオーバーフローさせないでください。 – pm100

答えて

3

効率が問題であれば、複数の挿入をパラメータ(安全のため)で別々に実行しますが、トランザクション内で実行します。行ごとに挿入するとSQLiteのパフォーマンスはひどいですが、トランザクション内ですべての挿入をラップすることができれば、はるかに優れたパフォーマンスが得られます。

ここでは、この上で良い記事です:

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

そしてfuther明確化のために、私は参考SQLiteの、からの直接このFAQへの記事ディープリンク:

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

+2

+1解決策を提供するのではなく、根本的な質問に答えるために回避策を提案します。 – milleniumbug

+0

素晴らしいです、ありがとうございます。 –

関連する問題