2014-03-29 5 views
1

내가 현재의 DATAACCESS 블록을 배우고 매개 변수 엔터프라이즈 라이브러리 내가 어떻게 ExecuteSprocAccessor기업 도서관 6 ExecuteSprocAccessor는

를 사용하여 일련의 객체를 반환하는이 코드 인을 이해하려고 노력하고 있어요 6.

내가 사용하고있는 것 :

실행하면 "매개 변수 개수가 저장 프로 시저 값의 수와 일치하지 않습니다."가 표시됩니다. 오류. cmd.Parameters 콜렉션을 검사 할 때 위에서 언급 한 2 개의 매개 변수를 볼 수 있습니다.

저는 오류가 마지막 명령의 cmd.Parameters에 있음을 확신합니다. 문서에 따르면 객체 배열을 사용할 수 있습니다. DBParameter 컬렉션을 사용하려면 어떻게해야합니까?

== 업데이트 난 그냥 시도하고 객체 배열에있는 DbParameter를 번역 할 방법을 만들기로 결정 잠시 동안 대답을 찾고 후 2014년 3월 29일 ==

합니다. 이걸 만든 ....이 방법

public static object[] ParametertoObj(DbCommand cmd) 
{ 

object[] obj = new object[cmd.Parameters.Count]; 

int i = 0; 

foreach (DbParameter item in cmd.Parameters) 
    { 
     obj[i] = item.Value; 
     i++; 
    } 

return obj; 
} 

중요한 것은 매개 변수들이 저장 프로 시저에서 호출되는 것과 동일한 순서로 컬렉션에 추가 할 필요가 있다는 것입니다.

나는 효율적인 방법이 있어야한다고 확신한다.

답변

0

당신은 명령 개체를 필요로하지 않는다 - 당신이 사용하고자하는 값으로 직접 접근 전화 :

IRowMapper <OrderName> resmapper = MapBuilder<OrderName>.MapAllProperties() 
             .Map(x => x.Name).ToColumn("ProductName") 
             .Map(x => x.PurchaseTotal).ToColumn("TotalPurchase") 
             .Build(); 

List<OrderName> procaccessor = sqlServerDB.ExecuteSprocAccessor<OrderName>(
    "SalesByCategory", resmapper, "Beverages", 1996).ToList<OrderName>(); 

당신이 매개 변수가 저장 프로 시저와 같은 순서로 일치 할 필요가 참고로.

+0

sp에 출력 매개 변수가있는 경우 –

+0

@ShashankSood 값을 내 머리 꼭대기에서 꺼내는 방법은 IDataReader에 대한 액세스 권한과 액세스 권한이 있기 때문에 접근자를 사용하여 수행 할 수 있다고 생각하지 않습니다. get output 매개 변수는 실제 출력 매개 변수에 대한 액세스가 필요합니다. ADO.NET을 사용하여 출력 매개 변수를 가져 오려면 다음이 도움이됩니다. https://stackoverflow.com/questions/290652/get-output-parameter-value-in-ado-net. –

+0

아니,이 방법으로 만 원했어. –