データを処理してSQL Serverに格納する必要があるC#プログラムがあります。私が抱えている問題は、保存されているデータの一部に合法的に一重引用符が含まれていることです。データを保存するときには、一重引用符を含む項目を探し、二重引用符で一重引用符を置き換えて、切り捨てられた文字列を取得しないようにする必要があります。シングルクォートを含むSQL Serverに文字列データを保存する最も良い方法は何ですか
私は私がFSQという静的モジュールに持って次のルーチンを通過させています単一引用符が含まれている可能性のあるデータを追加していwhereever現時点では、このルーチンである(単一引用符を修正):
/// <summary>
/// Fix Single Quote - Used to remove Double quotes from strings that would confuse Access database by replacing with Single Quotes.
/// </summary>
/// <param name="s">String text to be fixed by removing double quotes.</param>
/// <returns>The original string with any double-quotes removed and replaced with single quotes. If an error occurs will return an empty string.</returns>
public static string FSQ(string s)
{
string tmp ="";
try
{
if (s == null)
return "";
s = s.Trim();
if (s == "")
return s;
if(s.Contains("'"))
{
if(!s.Contains("''"))//Already been fixed previously so skip here
tmp = s.Replace("'", "''");
s = tmp;
}
return s;
}
catch (Exception ex)
{
PEH("FDQ", "Common Module", ex.Message);
return "";
}
} //public static String FDQ(String s)
これは機能し、私の文字列はOKにSQLに保存されますが、このルーチンへの呼び出しがたくさんあるので、プログラムは処理中に何千もの行のデータをループします。
この関数を呼び出す必要性を否定するより効率的なルーチンがありますか?ほとんどの場合、これらの項目を含むクエリを更新または挿入するだけです。
助けてください。
なんてこった。 'SqlCommand' +' SqlParamater'は、自動的にエスケープ処理を行うことで、これを問題にならないでしょう。 –
また、私が '' '' 'を渡すことができれば、それは置換を実行することをスキップし、それでも不一致の引用符が許されることに注意してください。 –
@InnovaITveSolutionsいいえ、これは複製として使用するべきではありません。なぜなら、OPはC#からそれをやっているからです。この場合、文字列の一重引用符をエスケープすると、SQLインジェクションの招待状となります。 – dasblinkenlight