Dapper를 사용하여 T-SQL 저장 프로 시저에서 XML 문자열 반환

ado.net c# dapper xml

문제

대형 VB6 응용 프로그램을 .NET으로 변환하는 프로젝트를 진행 중입니다. 나는 VB6 ADO 함수가 사용했던 모든 데이터베이스 코드를 처리하기 위해 놀라운 Dapper 확장 메서드를 사용하고있는 기존 VB6 ADO 코드의 외형을 제공하는 프로젝트를 만들기로 결정했습니다.

새 프로젝트에서 지원해야하는 기능 중 하나는 FOR XML을 통해 T-SQL 저장 프로 시저에서 XML 문자열 결과를 가져 오는 기능입니다. Dapper는 내가 볼 수있는 XML을 반환하는 지원을하지 않습니다. 그래서이 반환 값을 제공하기 위해 ADO.NET ExecuteXmlReader 메서드를 구현했습니다. 내 프로젝트는 Dapper DynamicParameters 를 사용하여 저장 프로 시저에 필요한 모든 in / out 매개 변수를 캡처합니다.

어떻게해야하는지 알지 DynamicParametersSqlCommand.SqlParameterCollection 으로 변환하여 이러한 매개 변수를 ExecuteXmlReader 메서드의 SqlCommand 개체에 채울 수 있습니다. 이 시나리오에서도 출력 매개 변수를 지원해야합니다.

DynamicParameters 반복 할 수 있지만 매개 변수 이름과 값만 가져옵니다. 방향, 유형, 크기, 크기 및 정밀도가 필요합니다. Dapper에는 SQL 문자열에서 리터럴을 대체하기위한 IDbCommand 객체를 사용하는 DynamicParameters.ReplaceLiterals 메서드가 있습니다. 매개 변수를 채우는 방법도 있었으면 좋겠습니다.

내가 여기서 뭔가 분명한 것을 놓치고 있니? Dapper Execute 메서드를 호출하면 DyanmicParameters 를이 메서드에 직접 전달할 수 있습니다. SqlCommand 개체로 전달하는 방법을 보지 못했습니다.

수락 된 답변

테스트를 마치면 Dapper가 XML을 저장 프로 시저에서 가져 오는 것을 실제로 지원한다는 것을 알았습니다.

var result = conn.Query<string>(@"select * from <someTable> for xml auto");

이렇게하면 각 요소에 최대 2,033자를 포함하는 문자열 배열이 반환되며 결과를 단일 문자열로 포함하기 위해 간단히 참여할 수 있습니다.

var fullResult = string.Join("", result);

또는

var fullResult = string.Concat(result);

또는 한 걸음에 모두 :

var result = string.Concat(conn.Query<string>(
    @"select * from <someTable> for xml auto", buffered: false));

그래서 ExcuteXmlReader 메서드를 직접 구현할 필요가 없습니다. 이제 Dapper가 매개 변수를 정상적으로 처리하도록 할 수 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.