14. maj 2003 - 13:24Der er
9 kommentarer og 1 løsning
DataSet vs. DataReader, hvilke fordele/ulemper ved hver af dem??
Hej!
Jeg er lige begyndt at rode med ADO.NET og sidder med en access-DB. Så vidt jeg har forstået kan man benytte sig af i hvert fald to forskellige klasser til at manipulere data med, når man skal kontakte sin DB. Nemlig: DataSet og DataReader, men hvilke fordele og ulemper er der forbundet med hver af de to???
Dataset er en in-memory copy af din tabel/database, mens datareaderen er en forward-only reader der bruges til at løbe igennem dine records.
Der er fordele og ulemper ved dem begge, primært hastighed og kompleksitet. Hvor DataReader helt klart er den ultra-hurtigste, så kan man med DataSet lave mange sjove ting, så som arbejde med disconnected version af sin database :)
og ikke mindst tælle hvor mange rækker man har, og så iøvrigt bladre både frem og tilbage i dataset'et. Brug altid datareader hvis du bare skal traske igennem en masse data række for række, og dataset hvis du skal mere end det.
Må jeg indskyde et tillægsspørgsmål, mens jeg har jeres opmærksomhed? Kan man ikke med DataReader og MSSQL server udtrække post x til y fra sin SELECT forespørgsel?
Cyberfessor: Hvorfor skal du holde styr på det? Det gør SQL serveren da for dig? (du skal selvfølgelig holde styr på din query) Select Top 10 * From Customers Order By CustomerID
De næste 10 rækker (11 til 20) Select Top 10 * From (Select Top 40 * from Customers Order by Customerid Desc) Order By CustomerID
De næste 10 rækker (21 til 30) Select Top 10 * From (Select Top 30 * from Customers Order by Customerid Desc) Order By CustomerID
odegaard>> fordi at han formulerede sit spm som om at han ikke vil udskrive alt fra sin recordset... men jo, du har da ret, og hvis jeg ikke havde haft så travlt havde jeg da også skrevet at han nok burde overvejere at skrive sin query så han kun henter det han skal bruge
Okay, det ser spændende ud. Jeg leger lige lidt med det. Der findes ikke andre måder at gøre det på med MSSQL? Hvis man nu fx ikke kender antallet af rækker, så skal man jo først lave en SELECT count(*) as @count og så køre: select top 10 * from (select top (@count-@start) from....
Takker for de mange kommentarer... (ingen svar)...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.