2010-08-20 8 views
5

Jak przekonwertować zestaw danych do modułu DataReader?Jak przekonwertować DataSet a na DataReader?

+2

czuję istnieje luka w to, co staramy się robić. CZY próbujesz zrobić na wyższym poziomie? – Dann

+0

Nie możesz. Jeśli chcesz uzyskać więcej wyjaśnień, podaj więcej informacji. –

Odpowiedz

13

Można użyć następującego kodu do zmiany zestawu danych do DataReader:

DataTableReader rd = ds.Tables[0].CreateDataReader(); 
0

DataSet ma metodę zwaną CreateDataReader który stworzy DataTableReader, ale nie sądzę, że można stworzyć DataReader.

DataSet.CreateDataReader

0

zestaw danych jest odłączony obiekt w pamięci. DataReader jest połączonym obiektem jednokierunkowym.

Sądzę więc, że nie jest to możliwe.

Czy to naprawdę potrzebne?

+0

https://msdn.microsoft.com/en-us/library/system.data.common.dbdatareader(v=vs.110).aspx - Odczytuje strumień wyjściowy z źródła danych tylko do przodu. Nie mówi nic o byciu "połączonym" z bazą danych. – JJS

0

Jeśli chcesz wykonać iterację za pomocą DataSet, nie potrzebujesz modułu DataReader. Rekord jest odłączony obiekt w pamięci tak iteracyjne thru to użyciem-każda:

foreach(var row in ds.Tables["YourTable"]) 
{ 
    var value = row.Field<int>("ID"); // etc 
} 
0

Nie można konwertować DataSet do DbDataReader.

Można jednak utworzyć DbDataReader, który odczyta wyniki z DataSet, wywołując metodę CreateDataReader na DataSet.

Jednak wydaje się to dziwną rzeczą do zrobienia. Możesz po prostu powtórzyć wyniki zawarte w DataSet za pomocą właściwości Tables DataSet i The Rows właściwości DataTable. Używanie DbDataReader ograniczyłoby ci przekazywanie tylko dostępu do wyników. Jedyną korzyścią jaką widzę przy korzystaniu z DbDataReader byłby wywołanie API, które wymagałoby jednego jako parametru.

Jeśli twój zestaw danych jest wynikiem polecenia SELECT z bazy danych, powinieneś być w stanie uzyskać DbDataReader przez wywołanie DbCommand.ExecuteReader(). Spowoduje to całkowite odcięcie zestawu DataSet i sprawi, że będzie on bardziej wydajny.