2

ここのリンクからSqlMapper.csファイルをダウンロードしました。

私は少し紛らわしい問題を抱えていますが。パラメータを使用するたびに、同じ文字列データを使用していると確信しているにもかかわらず、クエリは空のコレクションを返します。

データの抽出に使用されるコードのスニペットを次に示します。

using (PhoenixConnection connection = new PhoenixConnection(Open: true))
{
    //this example works, returns 1 token object
    string queryWorks = @"Select AccountName, AccountToken from btsource.accounts
    where AccountName = 'RekindledPhoenix'";

    // replaces 'RekindledPhoenix' with a parameter, returns empty collection
    string queryDoesnt = @"Select AccountName, AccountToken from btsource.accounts 
    where AccountName = @AccountName";

    var tokenList = connection.Query<TokenRequest>(queryWorks);
    var tokenList = connection.Query<TokenRequest>(queryDoesnt, new { AccountName = "RekindledPhoenix" });
    return tokenList.FirstOrDefault();
}

これが私が使用している私のクラスです...

public class TokenRequest
{
    public string AccountName { get; set; } //`AccountName` VARCHAR(50) NOT NULL
    public long AccountToken { get; set; } //`AccountToken` BIGINT(20) NOT NULL
}

そして、これが私の PhoenixConnection オブジェクトのラッパー関数です。

public IEnumerable<T> Query<T>(string Query, dynamic Parameters = null)
{
    return _connection.Query<T>(Query, (object)Parameters);
}

私はもう試した:

  • mysql テーブルの名前と値を再確認する
  • 動的以外のものを使用するようにラッパーを変更する (機能しませんでした)
  • 接続開いていることを確認しています
  • 生の mysqlConnection オブジェクト、コマンドテキストなど

何が欠けているのでしょうか?

パラメータに使用される特別な設定はありますか?

編集:

未加工のMySqlConnectionパラメーターを使用すると、 ではなく でより適切に機能します?@、Dapper ではまだ機能しません。

[@:]疑問符は無視されているように見えますが、正規表現 ( ) ステートメントでパラメーターを抽出する特定の行が Dapper 内にあることに気付きました。期待どおりの結果を得るには、何を変更すればよいですか?

4

1 に答える 1

3

問題が見つかりました。生のMySqlConnectionオブジェクトを使用してクエリを実行した後@、どのステートメントでもシンボルが機能しなかった理由を検索するようになりました。以前はいつも を使ってい?たので、この動作は私には奇妙でした。

SqlMapper.cs の変更

次の@記号を? (おおよその行番号で)に変更します。

1863 行: if (identity.sql.IndexOf("?" + prop.Name, StringComparison.InvariantCultureIgnoreCase) < 0

行 1831: return parameters.Where(p => Regex.IsMatch(sql, "[?:]" + p.Name + "([^a-zA-Z0-9_]+|$)", RegexOptions.IgnoreCase | RegexOptions.Multiline));

私の問題を解決しました!

于 2013-07-28T20:49:51.653 に答える