Suche…


Syntax

  • public static IEnumerable <T> Query <T> (diese IDbConnection-cnn, Zeichenfolge sql, object param = null, SqlTransaction-Transaktion = null, bool gepuffert = true)
  • public static IEnumerable <dynamic> Query (diese IDbConnection-CNN, Zeichenfolge sql, object param = null, Transaktion SqlTransaction = null, bool buffered = true)

Parameter

Parameter Einzelheiten
cnn Ihre Datenbankverbindung, die bereits geöffnet sein muss.
sql Befehl zum Ausführen
param Objekt, aus dem Parameter extrahiert werden sollen.
Transaktion Transaktion, zu der diese Abfrage gehört, sofern vorhanden.
gepuffert Ob das Lesen der Ergebnisse der Abfrage zwischengespeichert werden soll oder nicht. Dies ist ein optionaler Parameter mit der Standardeinstellung true. Wenn gepuffert wahr ist, werden die Ergebnisse in eine List<T> gepuffert und dann als IEnumerable<T> , das für mehrere Aufzählungen sicher ist. Wenn gepuffert "false" ist, bleibt die SQL-Verbindung offen, bis Sie mit dem Lesen fertig sind, sodass Sie eine einzelne Zeile zur Zeit im Speicher bearbeiten können. Durch mehrere Aufzählungen werden zusätzliche Verbindungen zur Datenbank hergestellt. Zwar ist gepuffertes false sehr effizient, um die Speicherauslastung zu reduzieren, wenn Sie nur sehr kleine Fragmente der zurückgegebenen Datensätze verwalten, was jedoch einen erheblichen Performance-Overhead im Vergleich zu eifrigem Ergebnis bewirkt. Wenn Sie über zahlreiche gleichzeitige ungepufferte SQL-Verbindungen verfügen, müssen Sie bedenken, dass der Verbindungspool verhungert, dass Anforderungen blockiert werden, bis Verbindungen verfügbar werden.

Abfrage nach einem statischen Typ

Verwenden Sie für zur Kompilierzeit bekannte Typen einen generischen Parameter mit der Query<T> .

public class Dog
{
    public int? Age { get; set; }
    public Guid Id { get; set; }
    public string Name { get; set; }
    public float? Weight { get; set; }

    public int IgnoredProperty { get { return 1; } }
}    

//
IDBConnection db = /* ... */;

var @params = new { age = 3 };
var sql = "SELECT * FROM dbo.Dogs WHERE Age = @age";

IEnumerable<Dog> dogs = db.Query<Dog>(sql, @params);

Abfrage nach dynamischen Typen

Sie können auch dynamisch abfragen, wenn Sie den generischen Typ weglassen.

IDBConnection db = /* ... */;
IEnumerable<dynamic> result = db.Query("SELECT 1 as A, 2 as B");

var first = result.First();
int a = (int)first.A; // 1
int b = (int)first.B; // 2

Abfrage mit dynamischen Parametern

var color = "Black";
var age = 4;

var query = "Select * from Cats where Color = :Color and Age > :Age";
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("Color", color);
dynamicParameters.Add("Age", age);

using (var connection = new SqlConnection(/* Your Connection String Here */))
{
    IEnumerable<dynamic> results = connection.Query(query, dynamicParameters);
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow