Mehr‑Anweisungs‑Operationen

Dapper Mehr‑Anweisungs‑Operationen QueryMultiple

  1. QueryMultiple(): Führt mehrere SQL‑Abfragen über eine einzelne Verbindung aus und liefert mehrere Ergebnismengen auf einmal zurück.
  2. Trenne mehrere SQL‑Anweisungen mit einem Semikolon ;.
  3. Rückgabetyp ist GridReader. Mit .Read<T>() liest du jede Ergebnismenge nacheinander in der vorgegebenen Reihenfolge.
  4. Vorteil: Es wird nur eine einzige Datenbankverbindung aufgebaut, was den Netzwerkaufwand bei mehreren Abfragen senkt.

Beispiel

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))
            {
                // Mehrere SQL‑Anweisungen mit Semikolon trennen
                string sql = "SELECT * FROM Customers; SELECT * FROM Book;";
                // Multi‑Ergebnis‑Reader abrufen
                var multiReader = db.QueryMultiple(sql);

                // Lesen in der Reihenfolge der SQL‑Anweisungen
                IEnumerable<Customers> customerList = multiReader.Read<Customers>();
                IEnumerable<Book> bookList = multiReader.Read<Book>();

                multiReader.Dispose(); // Reader‑Ressourcen freigeben
            }
            Console.ReadKey();
        }
    }
}Code-Sprache: C# (cs)
  1. Die Lesereihenfolge muss exakt mit der SQL‑Reihenfolge übereinstimmen
    Die zuerst geschriebene SELECT‑Anweisung muss zuerst gelesen werden, falsche Reihenfolge löst Fehler aus.
  2. Rufe Read nicht öfter auf als es Ergebnismengen gibt.
  3. Bei MySQL prüfe, ob Mehrfach‑Anweisungen in der Verbindungszeichenfolge aktiviert sind (standardmäßig meist aktiv).
  4. QueryMultiple eignet sich nur für SELECT‑Abfragen. Sei vorsichtig bei gemischtem INSERT / UPDATE / DELETE, nutze stattdessen besser Transaktionen.

Mehr‑Anweisungs‑Abfrage mit Parametern

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-Sprache: C# (cs)

Mehr‑Anweisungs‑Operationen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert