sql >> Database teknologi >  >> RDS >> Mysql

mens på IDataReader.Read virker ikke med udbytteafkast, men foreach på læseren gør

Det er ikke while vs foreach det gør forskellen. Det er opkaldet til .Cast<T>() .

I den første prøve giver du efter for det samme objekt i hver iteration af while-løkken. Hvis du ikke er forsigtig, ender du med at have gennemført udbytteiteratoren, før du rent faktisk bruger dataene, og DataReader vil allerede være bortskaffet. Dette kan ske, hvis du for eksempel skulle kalde .ToList() efter at have kaldt denne metode. Det bedste, du kunne håbe på, ville være for hver post på listen at have den samme værdi.
(Prof tip:det meste af tiden vil du ikke ringe til .ToList() indtil du absolut skal. Det er bedre bare at arbejde med IEnumerable records).

I det andet eksempel, når du kalder .Cast<T>() på datalæseren laver du faktisk en kopi af dataene, når de gentager hver post. Nu giver du ikke længere det samme objekt.



  1. MySQL:Tæl to ting i én forespørgsel?

  2. MySQL fejl #2014 - Kommandoer ude af synkronisering; du kan ikke køre denne kommando nu

  3. mysql returtabelnavn

  4. Sådan indsætter du JSON i en tabel i SQL Server