Opérations multi‑instructions Dapper : QueryMultiple
QueryMultiple(): exécute plusieurs requêtes SQL sur une seule connexion et retourne plusieurs ensembles de résultats en une seule fois.- Séparez les différentes instructions SQL par un point‑virgule
;. - Le type de retour est
GridReader. Appelez.Read<T>()pour lire successivement chaque jeu de données dans l’ordre d’écriture. - Atout : une seule connexion base de données est ouverte, ce qui réduit la surcharge réseau liée aux multiples requêtes.
Exemple
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))
{
// Plusieurs SQL séparés par des points‑virgules
string sql = "SELECT * FROM Customers; SELECT * FROM Book;";
// Récupérer le lecteur multi‑résultats
var multiReader = db.QueryMultiple(sql);
// Lire dans l’ordre des instructions SQL
IEnumerable<Customers> customerList = multiReader.Read<Customers>();
IEnumerable<Book> bookList = multiReader.Read<Book>();
multiReader.Dispose(); // Libérer les ressources du lecteur
}
Console.ReadKey();
}
}
}Langage du code : C# (cs)
- L’ordre de lecture doit correspondre strictement à l’ordre des requêtes SQL
Le premier SELECT doit être lu en premier ; un ordre erroné provoque une erreur. - N’appelez pas Read au‑delà du nombre d’ensembles de résultats disponibles.
- Avec MySQL, vérifiez que le support multi‑instructions est activé dans la chaîne de connexion (généralement activé par défaut).
QueryMultipleest réservé aux requêtes SELECT ; soyez prudent avec des requêtes mélangeant INSERT / UPDATE / DELETE, préférez les transactions.
Requête multi‑instructions avec paramètres
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>();Langage du code : C# (cs)
Opérations multi‑instructions
Previous: Requête IN