4

私はc#を使用してDBから値を読み取ろうとしています。クエリ文字列には、次のような複数の一重引用符が含まれています。Esca'pes'(クエリ文字列はテキストファイルから読み取られています)

そのため、SQLクエリを作成する前に、すべての一重引用符を2つの一重引用符に置き換えたいと思いました。私のコードは以下の通りです:

if (name.Contains('\''))
{
    name = name.Replace('\'','\''');  
}

これを修正する方法は?

4

3 に答える 3

21

charリテラルではなく、文字列を使用してください。

name = name.Replace("'", "''");

ただし、SQL文字列を連結しているように聞こえます。これは、SQLインジェクションのリスクがあるため、最新のアプリケーション設計では「禁止」という大きなルールです。代わりにSQLパラメータを使用してください。SQL ServerとMySQLを備えたADO.NETを含め、すべての最新のDBMSプラットフォームがそれらをサポートし、Accessもそれらをサポートします。

于 2012-11-07T20:22:09.253 に答える
3

name = name.Replace("'","''");

無関係なことに、SQLで使用するために文字列を連結していますか?代わりにパラメータを試してください。それが目的です。あなたはおそらくそれを必要以上に難しくしているでしょう。

于 2012-11-07T20:22:23.327 に答える
2

1文字を2文字に置き換えたいので、ReplaceのStringオーバーロードを使用する必要があります

if (name.Contains('\''))
{
    name = name.Replace("'","''");  
}

(注:一重引用符は、文字表記の場合のように文字列でエスケープする必要はありません。)

于 2012-11-07T20:21:43.047 に答える