2016-04-20 27 views
2

私は現在最新のバージョンのdapperバージョン1.50.0-beta9を使用しています。 Oracle用に使用しているプロバイダはOracle.ManagedDataAccess、バージョン12.1.2400です。 dapperの動的パラメータを使用しているときにエラーが発生します。私のコードは、以下の例のようになります。Dapper DynamicParameters returned error

public class PersonDAL : OracleBase { 

    public PersonDAL() : base() { 
    } 

    public PersonDAL(string connectionString) : base(connectionString) { 
    } 

    public const string ParamPersonID = ":personid"; 
    public const string ParamClassID = ":classid"; 
    private const string getPersonByClassAndID = "SELECT PERSON_ID AS PersonID, PERSON_DESCRIPTION AS PersonDescription, CLASS_ID AS ClassID FROM TABLE_PERSON WHERE PERSON_ID = " + ParamPersonID + " AND CLASS_ID = " + ParamClassID; 

    public SystemModel GetModelByPersonID_ClassID(int classID, int personid) { 
     DynamicParameter = new DynamicParameters(); 
     DynamicParameter.Add(ParamClassID, classID); 
     DynamicParameter.Add(ParamPersonID, personid); 
     return Connection.QuerySingle<SystemModel>(getPersonByClassAndID, DynamicParameter); 
    } 
} 

これは、このエラーが返されます。

Invalid parameter binding
Parameter name: personidAND

+0

上記の解決策は現在動作します – BananaGuard

答えて

0

あなたはSQLの構文が欠落しています。あなたが持っていることはあなたがANDまたはORと途中でいくつかのスペースを必要とする

WHERE Foo=:fooBar=:bar 

です。

このシナリオでは、実際にはDynamicParametersは必要ありません。ここでの "古典的な"大まかな使い方は、パラメータオブジェクトとして、

new { classID, personID } 

となります。

+0

ええ、ちょうど私はANDをクエリに入れていないのを見ました。どちらの方法でも、私が取得したクエリにANDがある場合:無効なパラメータバインド パラメータ名:personidAND ....返り値を変更する必要があると言っている:return Connection.QuerySingle (getSystemBySystemCode、new {classID、 personID}); – BananaGuard

+0

OK、あなたのご提案と私はまだ同じ問題が発生しています。無効なパラメータバインド パラメータ名:personidAND – BananaGuard

+0

ありがとう、ダッパーをダウンロードしてデバッグしました。 – BananaGuard