Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: .NET Framework
.NET
Standard
Als u gegevens wilt ophalen met behulp van een DataReader, maakt u een exemplaar van het opdrachtobject en maakt u vervolgens een DataReader door Command.ExecuteReader aan te roepen om rijen op te halen uit een gegevensbron. De DataReader biedt een niet-gebufferde gegevensstroom waarmee procedurele logica resultaten van een gegevensbron opeenvolgend kan verwerken.
Opmerking
De DataReader is een goede keuze wanneer u grote hoeveelheden gegevens opzoekt omdat de gegevens niet in de cache worden opgeslagen in het geheugen.
In het volgende voorbeeld ziet u hoe u een DataReader gebruikt, waarbij reader een geldig DataReader wordt aangegeven en command een geldig opdrachtobject vertegenwoordigt.
reader = command.ExecuteReader();
Gebruik de methode DataReader.Read om een rij op te halen uit de queryresultaten. U kunt elke kolom van de geretourneerde rij openen door de naam of het rangnummer van de kolom door te geven aan de DataReader. Voor de beste prestaties biedt DataReader echter een reeks methoden waarmee u toegang hebt tot kolomwaarden in hun systeemeigen gegevenstypen (GetDateTime, GetDouble, GetGuid, GetInt32, enzovoort). Zie voor een lijst met getypte toegangsmethoden voor gegevensproviderspecifieke DataReadersSqlDataReader. Door de getypte toegangsmethoden te gebruiken wanneer u het onderliggende gegevenstype kent, vermindert u de hoeveelheid typeconversie die nodig is bij het ophalen van de kolomwaarde.
In het volgende voorbeeld wordt een DataReader-object herhaald en worden twee kolommen uit elke rij geretourneerd.
static void HasRows(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM Categories;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Check if the DataReader has any row.
if (reader.HasRows)
{
// Obtain a row from the query result.
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
// Always call the Close method when you have finished using the DataReader object.
reader.Close();
}
}
De DataReader sluiten
Roep altijd de Close() methode aan wanneer u klaar bent met het DataReader object.
Opmerking
Als uw opdracht uitvoerparameters of retourwaarden bevat, zijn deze waarden pas beschikbaar als de DataReader is gesloten.
Belangrijk
Hoewel een DataReader is geopend, wordt de verbinding uitsluitend door die DataReader gebruikt. U kunt geen opdrachten uitvoeren voor de verbinding, inclusief het maken van een andere DataReader, totdat de oorspronkelijke DataReader is gesloten.
Opmerking
Roep Close of Dispose niet aan voor een Connection, een DataReader of een ander beheerd object in de Finalize-methode van uw klasse. In een finalizer kunt u alleen onbeheerde resources vrijgeven die rechtstreeks eigendom zijn van uw klasse. Als uw klasse geen onbeheerde resources heeft, moet u geen methode Voltooien in uw klassedefinitie opnemen. Zie Garbagecollection voor meer informatie.
Meerdere resultatensets ophalen met NextResult
Als de DataReader meerdere resultatensets retourneert, roept u de NextResult-methode aan om de resultatensets opeenvolgend te doorlopen. Het volgende voorbeeld toont hoe de SqlDataReader de resultaten van twee SELECT-query's verwerkt met de ExecuteReader methode.
static void RetrieveMultipleResults(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM dbo.Categories;" +
"SELECT EmployeeID, LastName FROM dbo.Employees",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Check if the DataReader has any row.
while (reader.HasRows)
{
Console.WriteLine("\t{0}\t{1}", reader.GetName(0),
reader.GetName(1));
// Obtain a row from the query result.
while (reader.Read())
{
Console.WriteLine("\t{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
// Hop to the next result-set.
reader.NextResult();
}
// Always call the Close method when you have finished using the DataReader object.
reader.Close();
}
}
Schemagegevens ophalen uit DataReader
Terwijl een DataReader is geopend, kunt u schemagegevens over de huidige resultatenset ophalen met behulp van de methode GetSchemaTable . GetSchemaTable retourneert een DataTable object dat is gevuld met rijen en kolommen die de schemagegevens voor de huidige resultatenset bevatten. De gegevenstabel bevat één rij voor elke kolom van de resultatenset. Elke kolom van de schematabel wordt toegewezen aan een eigenschap van de kolommen die worden geretourneerd in de rijen van de resultatenset, waarbij ColumnName de naam van de eigenschap is en de waarde van de kolom de waarde van de eigenschap is. In het volgende voorbeeld worden de schemagegevens voor DataReader weggeschreven.
static void GetSchemaInfo(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM Categories;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Retrieve schema information about the current result-set.
DataTable schemaTable = reader.GetSchemaTable();
foreach (DataRow row in schemaTable.Rows)
{
foreach (DataColumn column in schemaTable.Columns)
{
Console.WriteLine(String.Format("{0} = {1}",
column.ColumnName, row[column]));
}
}
// Always call the Close method when you have finished using the DataReader object.
reader.Close();
}
}