Recherche…


Syntaxe

  • public static IEnumerable <T> Query <T> (cet IDbConnection cnn, chaîne sql, objet param = null, SqlTransaction transaction = null, bool buffered = true)
  • public statique IEnumerable <dynamique> Query (cet IDbConnection cnn, chaîne sql, objet param = null, SqlTransaction transaction = null, bool buffered = true)

Paramètres

Paramètre Détails
CNN Votre connexion à la base de données, qui doit déjà être ouverte.
sql Commande à exécuter.
param Objet pour extraire les paramètres de.
transaction Transaction dont cette requête fait partie, le cas échéant.
tamponné S'il faut ou non mettre en mémoire tampon les résultats de la requête. Ceci est un paramètre facultatif avec la valeur par défaut étant true. Lorsque la mise en mémoire tampon est vraie, les résultats sont mis en mémoire tampon dans une List<T> , puis renvoyés sous la forme d'un IEnumerable<T> sûr pour une énumération multiple. Lorsque la mise en mémoire tampon est fausse, la connexion SQL est maintenue ouverte jusqu'à ce que vous ayez fini de lire, ce qui vous permet de traiter une seule ligne à la fois en mémoire. Plusieurs énumérations engendreront des connexions supplémentaires à la base de données. Bien que false mis en mémoire tampon soit très efficace pour réduire l’utilisation de la mémoire si vous ne gérez que de très petits fragments d’enregistrements renvoyés, il se caractérise par une surcharge de performances considérable par rapport à la matérialisation rapide du jeu de résultats. Enfin, si vous avez de nombreuses connexions SQL non tamponnées simultanées, vous devez tenir compte de la famine du pool de connexions, ce qui entraîne le blocage des requêtes jusqu'à ce que les connexions soient disponibles.

Interrogation pour un type statique

Pour les types connus à la compilation, utilisez un paramètre générique avec 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);

Interrogation pour les types dynamiques

Vous pouvez également interroger dynamiquement si vous omettez le type générique.

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

Requête avec paramètres dynamiques

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow