Ricerca…


Sintassi

  • public static IEnumerable <T> Query <T> (questo IDcConnection cnn, stringa sql, oggetto param = null, SqlTransaction transaction = null, bool buffered = true)
  • public static IEnumerable <dynamic> Query (questo IDcConnection cnn, stringa sql, oggetto param = null, SqlTransaction transaction = null, bool buffered = true)

Parametri

Parametro Dettagli
cnn La tua connessione al database, che deve essere già aperta.
sql Comando da eseguire.
param Oggetto da cui estrarre i parametri.
transazione Transazione di cui questa query fa parte, se esiste.
tamponata Indica se bufferizzare o meno i risultati della query. Questo è un parametro facoltativo con il valore predefinito true. Quando il buffer è vero, i risultati vengono memorizzati in un List<T> e quindi restituiti come IEnumerable<T> che è sicuro per l'enumerazione multipla. Quando il buffer è falso, la connessione sql viene mantenuta aperta fino al termine della lettura, consentendo di elaborare una singola riga alla volta in memoria. Più enumerazioni genereranno ulteriori connessioni al database. Mentre buffered false è altamente efficiente per ridurre l'utilizzo della memoria se si mantengono solo frammenti molto piccoli dei record restituiti, ha un overhead delle prestazioni considerevole rispetto alla materializzazione impaziente del set di risultati. Infine, se si dispone di numerose connessioni SQL simultanee non bufferizzate, è necessario considerare l'inattività del pool di connessioni che causa il blocco delle richieste fino a quando le connessioni diventano disponibili.

Interrogazione per un tipo statico

Per i tipi noti al momento della compilazione, utilizzare un parametro generico con 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);

Interrogazione per i tipi dinamici

Puoi anche eseguire query dinamicamente se non utilizzi il tipo generico.

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

Query con parametri dinamici

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow