2009-04-23 12 views
1

私は.NET2.0でプログラムを作成しています。使用する前に入力をエスケープする必要があります。残念ながら、私が使用しているシステムでは、標準パラメータメソッドシステムは完全には機能しません。 ODBCCommandクラスを使用して、私は? (私がやっているちょっとしたことのために必要な)ステートメントの選択部分のパラメータを、エラーを出さずに返すことができるので、一重引用符( ')を含んでも含まなくてもよい文字列を手動でエスケープする必要があります。助言がありますか?SQLの文字列をエスケープする標準機能

編集 - 例SQL:

私はそれをしたいと思い通り:

INSERT INTO TABLE_A (COLUMN_A, COLUMN_B) 
SELECT (?, COLUMN_C) 
FROM TABLE_B 
WHERE COLUMN_D = ? 

そのまま:

INSERT INTO TABLE_A (COLUMN_A, COLUMN_B) 
SELECT ('INPUT_VALUE_HERE', COLUMN_C) 
FROM TABLE_B 
WHERE COLUMN_D = ? 

編集:Sybase ASEのは、ODBC

を通じて、DBドライバです
+2

実行しようとしているSELECTの例を挙げることはできますか? – Steven

+0

これは、列名やテーブル名などの場合、攻撃者が注入を行うために一重引用符を必要としないことを忘れないでください。さもないと ?働くはずですね。 –

+0

また、どのデータベースを使用していますか?すべてのデータベースが同じエスケープ文字セットを持っているわけではなく、SELECTステートメントのどこに応じて異なるエスケープ文字が必要かによって異なります。 – Steven

答えて

3
Dim s As String = "Michael O'Flatley" 
Dim escapedString as String = s.Replace("'", "''") 
+0

'%'シンボルはどうですか? –

+0

私はSybase ASEについて話すことができませんが、SQL ServerとOracleでは、 'like'節の一部である場合は%(および_)をエスケープする必要があります –

3

rこの拡張機能を持つ文字列パラメータ

public static string SqlEncode(string str) 
{ 
    if (str == null) return String.Empty; 
    return str.Replace("'","''"); 
} 
+1

拡張機能にするにはpublic static string SqlEncode (この文字列str)? –

+0

彼のためにそれを修正しました。 –

+0

良いアイデアですが、見てみると、この.NET2.0が表示されます(拡張メソッドはありません)。 –

関連する問題