1

メソッドに送信する文字列から構築された MySQL クエリを呼び出す

文字列に一重引用符が含まれていると問題が発生します'

\'MySQL で安全に使用できるようにa に置き換えたい

%しかし、クエリを作成するときに、文字列の最初と最後に一重引用符と a を追加します。例えば'%texthere%'

最初と最後の引用符を除くすべての単一引用符を置き換える方法を知る必要がありますか?

したがって、次のもののみが置き換えられます。'%thi'stext%'

これに:'%thi\'stext'%

4

6 に答える 6

4

単純:

int first = s.IndexOf('\'');
int last = s.LastIndexOf('\'');
string prefix = s.Substring(0, first+1);
string query = s.Substring(first+1, last-first-1);
string suffix = s.Substring(last);
s = prefix + query.Replace("'", "\\'") + suffix;

もちろん、実際には代わりに SQL パラメータを使用する必要があります。

于 2013-03-01T04:06:18.787 に答える
1

とても愚かな私はついに方法をもっとよく調べました

私はそれを修正しましたstring.Replace("'", "\'")

%&を'最初と%最後'に追加する前に

私はあなたたちからたくさん学びました、どうもありがとう

于 2013-03-01T04:51:14.650 に答える
0

私が以前にこれを行った方法は次のとおりです。

  1. IndexOf を使用して、文字が最初に出現するインデックスを取得します。
  2. 手順 1 で見つかったインデックスから始まる元の文字列の部分文字列を取得します。
  3. 手順 2 で見つかった部分文字列を逆にします
  4. 手順 3 の反転文字列に対して手順 1 を繰り返すと、最初の ' 文字の後から最後の文字の前までの文字列を含む部分文字列が残ります。
  5. 手順 4 の部分文字列を再び逆にして (元の順序に戻すため)、残りの ' 文字を \' に置き換えます。
  6. (pseudoCode) を使用して文字列を再構築します -

    finalString = string.Concat( originalString.Substring(0, firstIndex), replacementSubstringFromStep5, originalString.Substring(secondIndex, originalStringLength - 1)

これにより、元の文字列の最初の ' 文字と最後の文字の後のすべての文字を含む文字列が取得され、その間の文字はすべて、MySQL クエリ用にエスケープされた置き換えられた ' 文字になります。

お役に立てれば!

編集:私がこれを行ったとき、それはデータベースクエリではなく、相互リンクアプリケーションでの文字列操作のためであったことに注意してください。他の人が述べているように、ストアドプロシージャとパラメーターを使用する方が良いことに同意します。ただし、私が提供したソリューションは、ベストプラクティスなどには触れずに、OP が求めていることを実行します。

于 2013-03-01T04:00:20.757 に答える
0

以下のリンク参照

.NET の文字列から二重引用符を取り除く

すべての二重引用符を文字列に置き換えます

解決策が得られない場合は、別の解決策を提供することを教えてください。

編集 わかりましたので、このような文字列を試してフィードバックを返します

string query=@"%thi'stext%";
于 2013-03-01T04:03:54.273 に答える
0

最初にトリム関数を使用して、文字列の両側から一重引用符を切り取ります。次に、"'" を "\'" に置き換え、文字列の両側に一重引用符を追加します。' が文字列の最初または最後の文字である場合、これは機能しません。

于 2013-03-01T03:48:27.880 に答える
0

この方法がお役に立てば幸いです: raw がパターン "'%free text here with single quotes%'" に一致すると仮定します。

    private string ReplaceSpecial(string raw)
    {
        return String.Format("'%{0}%'", raw.Substring(2, raw.Length - 2).Replace("'", "\\'"));
    }
于 2013-03-01T04:58:12.147 に答える