sql >> Databáze >  >> RDS >> Sqlserver

Databázové záznamy výnosů pomocí LinqToSql?

V případě provádění základního dotazu může fungovat tak (určitě je to možné) - nicméně v případě dotazování na nahou Table<T> , možná budiž, že se to všechno nejprve vyrovná; možná byste mohli zkusit dotaz na počet během iterace nebo spustit trasování. V tomto případě mám podezření nejprve se uloží do vyrovnávací paměti.

Znovu uzavřeno:to také závisí na tom, zda někdo používá foreach , pak ano:protože foreach explicitně zlikviduje iterátor pomocí finally . Nicméně! Není zaručeno, pokud to někdo udělá například (velmi zlobivý a laxní):

var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
    Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad

pak protože iterátor a:není zlikvidován, b:se nevyčerpává a c:nespadne, nevypne se správně (kterákoli z těchto 3 podmínek bude řádně zavřít). Zdůraznění:toto je patologický případ:normálně je přiměřeně bezpečné říci „uzavře se, ano“.

Pokud chcete zaručené bez vyrovnávací paměti, všimněte si, že "dapper" to má, pokud nastavíte buffered na false :

IEnumerable<Customer> customers = connection.Query<Customer>(
       "select * from Customer", buffered: false);

(může také pracovat s parametry atd.)



  1. SQL Server Hromadné vložení souboru CSV s nekonzistentními uvozovkami

  2. mysql date_sub pomocí pole jako interval

  3. PDO a MySQL „mezi“

  4. Problém při pokusu o spuštění balíčku SSIS pomocí Oracle Connection Attunity