2016-09-05 5 views
0

私は、EntLib 6のアクセサを使用してOracle SPをパラメータとともに実行しようとすることはできません。私がオラクルのODP.NET(EntLibContrib 6を使用して)に切り替えたとき、私は悪名高いものを取得し始めました「間違った番号または種類の引数を ' TEST_PROCEDURE '"EntLib 6とODP.NET - Accessorがパラメータを失う

は、ここに私のコードです:

メイン

var query = "TEST_PROCEDURE"; 

var accessor = _db.CreateSprocAccessor(
    query, 
    new OracleParamMapper(), 
    new ColumnMapper<MyEntity>().Map() 
); 

var p1 = new OracleParameter("param1", OracleDbType.Varchar2, 1); 
p1.Direction = ParameterDirection.Input; 
p1.Value = "T"; 

var p2 = new OracleParameter("param2", OracleDbType.RefCursor); 
p2.Direction = ParameterDirection.Output; 

return accessor.Execute(p1, p2); 

OracleParamMapper

public class OracleParamMapper : IParameterMapper 
{ 
    public void AssignParameters(DbCommand command, object[] parameterValues) 
    { 
     ((OracleCommand)command).BindByName = true; 

     foreach (var item in parameterValues) 
     { 
      command.Parameters.Add(item); 
     } 
    } 
} 

このマッパーは、呼び出さと私はパラメータが正しくに追加されて見ることができますコレクションが、しかしそのために私は彼らがExecuteの呼び出しが行われたときに消えるように見えるミステリアスな理由です。

PROCEDURE TEST_PROCEDURE (param1 IN VARCHAR2, param2 IN OUT SYS_REFCURSOR); 

手順ストアド は

誰もがこの作業を行うことができていますか?前もって感謝します。

答えて

0

さて、今すぐ動作しています。実際、この答えはこの間ずっとありました。私がしなければならなかったのは、EntLibContribライブラリとvoilaによって提供されるクラスを使うことでした!

誰かがこれを読んでいる場合は、EntLibContrib.Data.OdpNet.OracleDatabaseクラスのCreateOracleSprocAccessor()メソッドを見てください。乾杯!

関連する問題