Dapper 다중 구문 작업 QueryMultiple
QueryMultiple():하나의 연결로 여러 SQL 쿼리를 실행하고 여러 결과 집합을 한 번에 반환합니다.- 여러 SQL 구문은 세미콜론
;으로 구분합니다. - 반환 타입은
GridReader이며.Read<T>()를 호출하여 순서대로 각 테이블 데이터를 읽습니다. - 장점:데이터베이스 연결을 한 번만 맺기 때문에 여러 차례 쿼리할 때 발생하는 네트워크 부하를 줄입니다.
예시
using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;
namespace ConsoleApp4
{
public class Customers
{
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
public class Book
{
public string Title { get; set; }
}
class Program
{
static void Main(string[] args)
{
var connStr = ConfigurationManager.ConnectionStrings["CustomerConnection"].ConnectionString;
using (IDbConnection db = new MySqlConnection(connStr))
{
// 여러 SQL 구문은 세미콜론으로 구분
string sql = "SELECT * FROM Customers; SELECT * FROM Book;";
// 다중 결과 판독기 가져오기
var multiReader = db.QueryMultiple(sql);
// SQL 작성 순서 그대로 읽기
IEnumerable<Customers> customerList = multiReader.Read<Customers>();
IEnumerable<Book> bookList = multiReader.Read<Book>();
multiReader.Dispose(); // 판독기 리소스 해제
}
Console.ReadKey();
}
}
}Code language: C# (cs)
- 읽는 순서는 SQL 순서와 정확히 일치해야 합니다
먼저 작성한 SELECT부터 Read 해야 하며 순서가 바뀌면 오류가 발생합니다. - 결과 집합 개수보다 많이 Read 를 호출하지 마세요.
- MySQL은 연결 문자열에서 다중 구문 지원이 활성화되어 있는지 확인하십시오(보통 기본으로 활성화됨).
QueryMultiple은SELECT 조회에만 적합합니다. INSERT·UPDATE·DELETE가 섞인 SQL은 신중하게 사용해야 하며 트랜잭션 사용을 권장합니다.
매개변수가 있는 다중 구문 쿼리
string sql = "SELECT * FROM student WHERE Id=@id; SELECT * FROM book WHERE Id=@id;";
using var multiReader = db.QueryMultiple(sql, new { id = 1 });
var stu = multiReader.ReadFirstOrDefault<Student>();
var book = multiReader.ReadFirstOrDefault<Book>();Code language: C# (cs)
다중 구문 작업
Previous: IN 쿼리
Next: JOIN 다중 테이블 연관 쿼리