1

ASP.NET アプリケーションから、このクエリを MySQL に発行したい

SELECT * FROM responses WHERE field_id LIKE '3\_%'

つまり、2 番目の文字がアンダースコア文字であるレコードを探しています。

モデル デザイナーによって生成されたコードは次のようになります。

    public virtual RiskAnalysis.responsesDataTable GetResponseGroupForAnalysis(int raid, string fieldid) {
    this.Adapter.SelectCommand = this.CommandCollection[2];
    this.Adapter.SelectCommand.Parameters[0].Value = ((int)(raid));
    if ((fieldid == null)) {
        throw new global::System.ArgumentNullException("fieldid");
    }
    else {
        this.Adapter.SelectCommand.Parameters[1].Value = ((string)(fieldid));
    }
    RiskAnalysis.responsesDataTable dataTable = new RiskAnalysis.responsesDataTable();
    this.Adapter.Fill(dataTable);
    return dataTable;
}

この関数を次のように呼び出すと:

string filter_string = @"3\_%";    
ResponsesAdapter.GetResponseGroupForAnalysis(10, filter_string);

MySQL ログは、クエリを次のように報告します。

SELECT     *
FROM         responses
WHERE     (ra_id = 10) AND (field_id LIKE '3\\_%')

言い換えれば、私はここで盲目的に明らかな何かが欠けていることを知っていますが、C# を使用せずに MySQL のエスケープ バックスラッシュをクエリに配置するにはどうすればよいでしょうか?

4

2 に答える 2

0

(field_id LIKE '3\_%');OK、MySQLでは と同等で(field_id LIKE '3\\_%');あり、どちらも field_id が '3_' で始まるレコードを検索するようです (実験によると、説明またはドキュメントのリンクを聞いてうれしいです) 。そこで私はよく混乱しました - 私が何を得ようとしているのかを理解しようとしてくれたマフムードとルネに感謝します!

于 2012-11-08T11:48:53.850 に答える
0

標準 SQL では、ESCAPEキーワードを使用してエスケープ文字を設定できます。

LIKE述語のドキュメントで述べられているように、MySQL はこれで標準 SQL に従います。

そのようです:

...

field_id LIKE '3\_%' ESCAPE '\' 

これにより、ワイルドカード_が文字列リテラルとして扱われます。

これがあなたが求めていたものであることを願っています。

于 2012-11-07T11:36:28.290 に答える