私はc#を使用してDBから値を読み取ろうとしています。クエリ文字列には、次のような複数の一重引用符が含まれています。Esca'pes'(クエリ文字列はテキストファイルから読み取られています)
そのため、SQLクエリを作成する前に、すべての一重引用符を2つの一重引用符に置き換えたいと思いました。私のコードは以下の通りです:
if (name.Contains('\''))
{
name = name.Replace('\'','\''');
}
これを修正する方法は?
charリテラルではなく、文字列を使用してください。
name = name.Replace("'", "''");
ただし、SQL文字列を連結しているように聞こえます。これは、SQLインジェクションのリスクがあるため、最新のアプリケーション設計では「禁止」という大きなルールです。代わりにSQLパラメータを使用してください。SQL ServerとMySQLを備えたADO.NETを含め、すべての最新のDBMSプラットフォームがそれらをサポートし、Accessもそれらをサポートします。
name = name.Replace("'","''");
無関係なことに、SQLで使用するために文字列を連結していますか?代わりにパラメータを試してください。それが目的です。あなたはおそらくそれを必要以上に難しくしているでしょう。
1文字を2文字に置き換えたいので、ReplaceのStringオーバーロードを使用する必要があります
if (name.Contains('\''))
{
name = name.Replace("'","''");
}
(注:一重引用符は、文字表記の場合のように文字列でエスケープする必要はありません。)