Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: .NET Framework
.NET
Standard
Aby pobrać dane przy użyciu elementu DataReader, utwórz wystąpienie obiektu Command , a następnie utwórz element DataReader , wywołując polecenie Command.ExecuteReader w celu pobrania wierszy ze źródła danych. Element DataReader udostępnia niebuforowany strumień danych, który umożliwia logiki proceduralnej efektywne przetwarzanie wyników ze źródła danych sekwencyjnie.
Uwaga / Notatka
DataReader jest dobrym wyborem podczas pobierania dużych zbiorów danych, ponieważ dane nie są przechowywane w pamięci podręcznej.
Poniższy przykład ilustruje użycie elementu DataReader, gdzie reader reprezentuje prawidłowy element DataReader i command reprezentuje prawidłowy obiekt command.
reader = command.ExecuteReader();
Użyj metody DataReader.Read , aby uzyskać wiersz z wyników zapytania. Dostęp do każdej kolumny zwróconego wiersza można uzyskać, przekazując nazwę lub numer porządkowy kolumny do elementu DataReader. Jednak w celu uzyskania najlepszej wydajności funkcja DataReader udostępnia szereg metod, które umożliwiają dostęp do wartości kolumn w ich natywnych typach danych (GetDateTime, GetDouble, GetGuid, GetInt32 itd.). Aby uzyskać listę typowych metod dostępu dla elementów DataReaders specyficznych dla dostawcy danych, zobacz SqlDataReader. Użycie typowych metod dostępu, gdy wiadomo, że bazowy typ danych zmniejsza ilość konwersji typu wymaganej podczas pobierania wartości kolumny.
Poniższy przykład iteruje przez obiekt DataReader i zwraca dwie kolumny z każdego wiersza.
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();
}
}
Zamknij DataReader
Zawsze wywołuj metodę Close() po zakończeniu korzystania z obiektu DataReader.
Uwaga / Notatka
Jeśli polecenie zawiera parametry wyjściowe lub wartości zwracane, te wartości nie są dostępne do momentu zamknięcia obiektu DataReader.
Ważne
Gdy DataReader jest otwarty, połączenie jest używane wyłącznie przez ten DataReader. Nie można wykonać żadnych poleceń dla połączenia, w tym tworzenia innego elementu DataReader, dopóki oryginalny element DataReader nie zostanie zamknięty.
Uwaga / Notatka
Nie należy wywoływać Close lub Dispose dla połączenia, DataReader ani innego zarządzanego obiektu w metodzie Finalize klasy. W finalizatorze zwalniaj tylko niezarządzane zasoby, które należą do klasy bezpośrednio. Jeśli klasa nie jest właścicielem żadnych zasobów niezarządzanych, nie uwzględnij metody Finalize w definicji klasy. Aby uzyskać więcej informacji, zobacz Zbieranie śmieci.
Pobieranie wielu zestawów wyników przy użyciu polecenia NextResult
Jeśli element DataReader zwraca wiele zestawów wyników, wywołaj metodę NextResult , aby iterować zestawy wyników sekwencyjnie. Poniższy przykład przedstawia SqlDataReader przetwarzanie wyników dwóch instrukcji SELECT przy użyciu ExecuteReader metody .
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();
}
}
Pobieranie informacji o schemacie z DataReader
Gdy DataReader jest otwarty, możesz pobrać informacje o schemacie dotyczące bieżącego zestawu wyników, używając metody GetSchemaTable. Polecenie GetSchemaTable zwraca DataTable obiekt wypełniony wierszami i kolumnami zawierającymi informacje o schemacie dla bieżącego zestawu wyników. Tabela DataTable zawiera jeden wiersz dla każdej kolumny zestawu wyników. Każda kolumna tabeli schematu jest mapowana na właściwość kolumn zwracanych w wierszach zestawu wyników, gdzie kolumna ColumnName jest nazwą właściwości, a wartość kolumny jest wartością właściwości. Poniższy przykład zapisuje informacje o schemacie dla elementu DataReader.
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();
}
}
Zobacz także
- Adaptery danych i Czytniki danych
- Polecenia i parametry
- Pobieranie informacji o schemacie bazy danych
- Microsoft ADO.NET dla programu SQL Server