2016-09-05 14 views
0

매개 변수가있는 Oracle SP를 실행하기 위해 EntLib 6의 액세서를 사용하려는 첫 번째 사용자가 될 수 없습니다. MS에서 (더 이상 사용하지 않는) OracleClient를 사용할 때 모든 것이 잘 동작했지만 오라클 자신의 ODP.NET (EntLibContrib 6 사용)으로 전환했을 때 나는 악명이 높아지기 시작했습니다 "잘못된 번호 또는 ' TEST_PROCEDURE ' ". 여기 EntLib 6 및 ODP.NET - 액세서가 매개 변수를 잃습니다

내 코드입니다 :

홈페이지

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() 메소드를 살펴보십시오. 건배!