Operações com múltiplas instruções

Operações com múltiplas instruções Dapper‑ QueryMultiple

  1. QueryMultiple(): executa várias consultas SQL numa única conexão e retorna vários conjuntos de resultados de uma só vez.
  2. Separe as instruções SQL com ponto e vírgula ;.
  3. O tipo de retorno é GridReader. Use .Read<T>() para ler cada conjunto de dados na ordem em que foram escritos.
  4. Vantagem: apenas uma conexão com banco de dados é criada, reduzindo a sobrecarga de rede de várias consultas.

Exemplo

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))
            {
                // Múltiplos SQL separados por ponto e vírgula
                string sql = "SELECT * FROM Customers; SELECT * FROM Book;";
                // Obter leitor de múltiplos resultados
                var multiReader = db.QueryMultiple(sql);

                // Ler na ordem das instruções SQL
                IEnumerable<Customers> customerList = multiReader.Read<Customers>();
                IEnumerable<Book> bookList = multiReader.Read<Book>();

                multiReader.Dispose(); // Liberar recursos do leitor
            }
            Console.ReadKey();
        }
    }
}Code language: C# (cs)
  1. A ordem de leitura deve corresponder exatamente à ordem das instruções SQL
    O primeiro SELECT tem que ser lido primeiro. Ordem incorreta causa erros.
  2. Não chame Read mais vezes do que a quantidade de conjuntos de resultados disponíveis.
  3. No MySQL confirme se o suporte a múltiplas instruções está ativado na string de conexão (geralmente vem ativado por padrão).
  4. QueryMultiple é indicado apenas para consultas SELECT. Tenha cuidado ao misturar INSERT / UPDATE / DELETE; prefira usar transações.

Consulta com múltiplas instruções e parâmetros

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)

Operações com múltiplas instruções

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *