2009-03-11 5 views
13

私はテキストフィールドとそのSQLステートメントを壊しています。どのように私はそのフィールドのすべての文字をエスケープするのですか? parametrised SQLは、すべての入力値をエスケープし、SQLインジェクション攻撃からあなたを保護するのに役立ちます使用C#でsqliteを使用したSQLエスケープ

SQLiteCommand cmd = _connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "SELECT * FROM MyTable WHERE MyColumn = @parameter"; 
cmd.Parameters.Add(new SQLiteParameter("@parameter", textfield)); 
SQLiteDataReader reader = cmd.ExecuteReader(); 

:私はあなたがのようにパラメータを使用する必要がありますC#でhttp://sqlite.phxsoftware.com/

答えて

31

をsqliteのを使用しています。

+0

私は複数のparamsを持っている場合、私は何をしますか?私は= cmd.CommandTextを書くのですか」... @パラメータ... @parameter "; cmd.Parameters.Add(...); cmd.Parameters.Add(...);? –

+0

はい、配列の配列を渡すことができるAddRangeメソッドもあります。 –

+0

パラメータの配列を受け入れるParameters.AddRangeを頼んだり使用したりして、Parameters.Addを何度も呼び出すことができます。 – bstoney

0

あなたも疑問単一引用符(ではない「)を持つすべての単一引用符の区切り文字を置き換えることができます挿入します。

sql = sql.Replace("'","''"); 
+2

このメソッドは再利用されませんそれは奇妙なバグにつながる可能性があります。 – Palani

+0

必ずしもそうではありません。あなたのSQLを構築し、最後のステップを置き換える場合は、すべてが良いはずです。何年も問題なく働いた。私は今アプリケーションブロックを使用しているので、問題はありません。 :) – klkitchens

+0

この方法は、テキストファイルなどにダンプするSQLセーフを作成する必要がある場合に適しています。 –

関連する問題