source

Dapper를 사용하여 한 번의 왕복에 여러 개의 SQL 문이 있습니다.그물

factcode 2023. 6. 28. 22:00
반응형

Dapper를 사용하여 한 번의 왕복에 여러 개의 SQL 문이 있습니다.그물

ADO.NET에는 여러 SQL 문을 한 번의 왕복으로 데이터베이스에 보내고 모든 문에 대한 결과를 받을 수 있는 좋은 기능이 있습니다.

var command = new SqlCommand("SELECT count(*) FROM TableA; SELECT count(*) FROM TableB;", connection);

using(var reader = command.ExecuteReader())
{
    reader.Read();
    resultA = reader.GetInt32(0);
    reader.NextResult();
    reader.Read();
    resultB = reader.GetInt32(0);
}

Dapper에도 비슷한 기능이 있습니까?NET?

네, 더 데퍼QueryMultiple확장을 통해 다음을 수행할 수 있습니다.

string query = @"SELECT COUNT(*) FROM TABLEA;
                 SELECT COUNT(*) FROM TABLEB";
using (var multi = connection.QueryMultiple(query, null))
{
    int countA = multi.Read<int>().Single();
    int countB = multi.Read<int>().Single();
}     

Marc Gravell에 따르면 이것은 단일 배치에서 여러 쿼리를 실행하는 이상적인 방법입니다.

참고: Dapper 제작자 Sam Saffron은 사용에 대한 코드 샘플과 함께 자세한 설명을 게시했습니다.QueryMultiple이를 달성하기 위해.

업데이트: Marc의 중요한 의견을 추가합니다.

참고: 1.5-ish(알파 빌드의 약간 이전 버전)부터는 Read()보다 더 편리하고 효율적인 ReadSingle() 방법이 있습니다.싱글()

var grid = connection.QueryMultiple("
             SELECT COUNT(*) FROM TABLEA
             SELECT COUNT(*) FROM TABLEB
             SELECT COUNT(*) FROM TABLEC");
var lstResult = new List<int>();
var isNext = false;
do{
    var first2 = info.Read<int>().Single();
    lstResult.Add(first2);
    isNext=info.IsConsumed;
}
while (!isNext);

언급URL : https://stackoverflow.com/questions/19337468/multiple-sql-statements-in-one-roundtrip-using-dapper-net

반응형