Operaciones de múltiples sentencias

Operaciones de múltiples sentencias en Dapper: QueryMultiple

  1. QueryMultiple(): ejecuta varias consultas SQL con una única conexión y devuelve varios conjuntos de resultados de una sola vez.
  2. Separa las sentencias SQL con un punto y coma ;.
  3. El tipo devuelto es GridReader. Usa .Read<T>() para leer cada conjunto de datos en el mismo orden de escritura.
  4. Ventaja: solo se abre una conexión a base de datos, reduciendo la sobrecarga de red de múltiples consultas.

Ejemplo

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))
            {
                // Varias sentencias SQL separadas por punto y coma
                string sql = "SELECT * FROM Customers; SELECT * FROM Book;";
                // Obtener el lector de múltiples resultados
                var multiReader = db.QueryMultiple(sql);

                // Leer siguiendo el orden de las sentencias SQL
                IEnumerable<Customers> customerList = multiReader.Read<Customers>();
                IEnumerable<Book> bookList = multiReader.Read<Book>();

                multiReader.Dispose(); // Liberar recursos del lector
            }
            Console.ReadKey();
        }
    }
}Lenguaje del código: C# (cs)
  1. El orden de lectura debe coincidir exactamente con el orden de las sentencias SQL
    El primer SELECT debe leerse primero; si cambias el orden obtendrás errores.
  2. No llames a Read más veces que conjuntos de resultados existentes.
  3. Con MySQL verifica que la cadena de conexión tenga habilitado el soporte para múltiples sentencias (suele estar activado por defecto).
  4. QueryMultiple sirve principalmente para consultas SELECT. Ten cuidado con sentencias mixtas INSERT‑UPDATE‑DELETE; se recomienda usar transacciones.

Consulta multi‑sentencia con 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>();Lenguaje del código: C# (cs)

Operaciones de múltiples sentencias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *