Kursinnehåll
Introduktion till .NET med C#
Introduktion till .NET med C#
Datareader Kontra Dataset
I föregående avsnitt använde vi objektet MySqlDataReader
för att läsa data från databasen.
I teorin hämtar DataReader (eller MySqlDataReader
) inte all data på en gång när vi kör en fråga. Istället hämtar den data på ett sekventiellt sätt, vilket innebär att den hämtar en rad i taget. När vi anropar metoden Read(), hämtas nästa rad från databasen i realtid.
Detta är anledningen till att en aktiv anslutning till databasen krävs under dataläsning. Det förklarar också varför vi måste stänga DataReader-objektet efter att ha hämtat data.
Å andra sidan finns det en annan metod för att hämta data, nämligen via en DataAdapter. En DataAdapter hämtar relevant data från databasen och fyller ett DataSet med den hämtade datan, vilket i praktiken innebär att en kopia av datan skapas. Ett DataSet är en speciell typ av klass för att lagra data som hämtats från en SQL-databas. Vi kan enkelt komma åt och visa data från ett DataSet.
Även om båda metoderna kan verka nästan likadana, finns det viktiga skillnader mellan DataReader och DataSet:
Minnesanvändning och lagring:
DataReader hämtar data från databasen en post i taget och håller anslutningen öppen under läsningen. Den lagrar inte data i minnet. Detta resulterar i minimal minnesanvändning;
DataSet lagrar data som hämtats från databasen i minnet inom applikationen.
Åtkomst och navigering:
DataReader tillhandahåller en snabb, framåtriktad dataström. Den möjliggör sekventiell åtkomst till data och stöder inte slumpmässig åtkomst eller navigering. När en post har lästs kan den inte återbesökas om inte frågan körs igen;
DataSet gör det möjligt att iterera genom rader i valfri ordning och ändra data inom DataSet utan att påverka ursprungsdatan i databasen.
Realtidsåtkomst vs. frånkopplad åtkomst:
DataReader ger realtidsåtkomst till data från databasen. Den kräver en aktiv anslutning till databasen under tiden data läses, och anslutningen förblir öppen tills all data har lästs eller tills DataReader stängs explicit;
DataSet ger frånkopplad åtkomst till data. När data har hämtats från databasen och lagrats i DataSet kan anslutningen till databasen stängas. Datan är då tillgänglig i applikationen och kan manipuleras offline utan att upprätthålla en anslutning till databasen.
Utifrån ovan nämnda för- och nackdelar kan vi dra slutsatsen att DataReader är lämplig för scenarier där endast framåtriktad åtkomst till data är tillräcklig, medan DataSet är mer lämplig för scenarier där du vill minimera anslutningstiden och behöver arbeta interaktivt med data.
1. Vilket av följande påståenden om DataReader är sant?
2. Vad lagrar DataSet i minnet?
Tack för dina kommentarer!