Szukaj…


Składnia

  • public static IEnumerable <T> Zapytanie <T> (to IDbConnection cnn, string sql, parametr param = null, SqlTransaction transaction = null, bool buforowany = true)
  • public static IEnumerable <dynamic> Query (ten IDbConnection cnn, string sql, obiekt param = null, SqlTransaction transaction = null, bool buffered = true)

Parametry

Parametr Detale
cnn Twoje połączenie z bazą danych, które musi być już otwarte.
sql Polecenie do wykonania.
param Obiekt do wyodrębnienia parametrów.
transakcja Transakcja, której częścią jest to zapytanie, jeśli istnieje.
buforowane Określa, czy buforować odczyt wyników zapytania. Jest to parametr opcjonalny z domyślną wartością true. Gdy buforowane jest true, wyniki są buforowane na List<T> a następnie zwracane jako IEnumerable<T> który jest bezpieczny dla wielokrotnego wyliczania. Gdy buforowane jest false, połączenie sql jest utrzymywane otwarte do czasu zakończenia odczytu, co pozwala na przetworzenie pojedynczego wiersza w pamięci. Wiele wyliczeń spowoduje odrodzenie dodatkowych połączeń z bazą danych. Chociaż buforowane fałsz jest bardzo wydajne w zmniejszaniu zużycia pamięci, jeśli zachowuje się tylko bardzo małe fragmenty zwracanych rekordów, ma znaczny narzut wydajności w porównaniu do chętnego materializowania zestawu wyników. Wreszcie, jeśli masz wiele równoległych niebuforowanych połączeń sql, musisz rozważyć głodzenie puli połączeń, powodując żądania blokowania, aż połączenia będą dostępne.

Zapytanie o typ statyczny

W przypadku typów znanych w czasie kompilacji użyj parametru ogólnego z 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);

Zapytania o typy dynamiczne

Możesz także zapytać dynamicznie, jeśli zrezygnujesz z typu ogólnego.

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

Zapytanie z parametrami dynamicznymi

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow