출력 매개 변수는 multi.Read와 함께 항상 null입니다.

c# dapper

문제

우리는 Dapper.Net을 광범위하게 사용하고 있으며 매우 만족합니다. 그러나 multi.Read를 사용하여 저장 프로 시저에서 출력 매개 변수를 검색 할 때 문제가 발생 했습니다 .

var p = new DynamicParameters(); 
p.Add("@id", id); 
p.Add("TotalRows", dbType: DbType.Int32, direction: ParameterDirection.Output); 

using (var multi = cnn.QueryMultiple(string.Format("dbo.[{0}]", spName), p,
    commandType: CommandType.StoredProcedure))
{  
    int TotalRows = p.Get<int>("@TotalRows"); //This is always null

    var results = multi.Read<New_Supplier>().ToList<IDBSupplier>();
    var areas = multi.Read<node>().ToList<IDBNode>();
    var categories = multi.Read<node>().ToList<IDBNode>();
    int TotalRows = multi.Read<int>().FirstOrDefault(); // This works

}

그러나 우리가 connection.Query 구문을 사용하면 단일 결과 집합을 얻으려면 출력 매개 변수가 채워집니다.

var result = cnn.Query<New_Supplier>(string.Format("spname"), p,
    commandType: CommandType.StoredProcedure).ToList<New_Supplier>();
int TotalRows = p.Get<int>("@TotalRows");

오류는 Dapper DynamicParameters의 출력 매개 변수에있는 AttachedParam의 sqlValue가 항상 null이라는 것입니다.

이 문제를 해결하기 위해 출력 매개 변수의 값을 저장 프로 시저의 결과 집합에 추가하고 그런 식으로 읽고 있습니다.

매개 변수가 항상 null 인 이유는 무엇입니까?

수락 된 답변

TDS 스트림에서 OUT 매개 변수는 끝에 있습니다. Query<T> 예제 에서 TDS 스트림을 사용했습니다 .

var result = cnn.Query<New_Supplier>(string.Format("spname"), p,
    commandType: CommandType.StoredProcedure).ToList<New_Supplier>();
int TotalRows = p.Get<int>("@TotalRows");

스트림을 소비했기 때문에 새 매개 변수 값에 도달했기 때문에 값을 사용할 수 있어야합니다. QueryMultiple 예제에서는 TDS 스트림의 끝에 도달 하지 않았습니다 . p.Get 이동 :

var p = new DynamicParameters(); 
p.Add("@id", id); 
p.Add("TotalRows", dbType: DbType.Int32, direction: ParameterDirection.Output); 

using (var multi = cnn.QueryMultiple(string.Format("dbo.[{0}]", spName), p,
    commandType: CommandType.StoredProcedure))
{      
    var results = multi.Read<New_Supplier>().ToList<IDBSupplier>();
    var areas = multi.Read<node>().ToList<IDBNode>();
    var categories = multi.Read<node>().ToList<IDBNode>();
}
int TotalRows = p.Get<int>("@TotalRows");

그래도 문제가 해결되지 않으면 알려주세요; P



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow