Сохранение результатов DataReader в массив в VB.NET

Как я могу сохранить результаты DataReader в массиве, но при этом иметь возможность ссылаться на них по имени столбца? По сути, я хочу иметь возможность клонировать содержимое DataReader, чтобы я мог закрыть читателя и по-прежнему иметь доступ. Я не хочу хранить элементы в DataTable, как все предлагают.

Я видел много ответов, но я не мог найти ответы на свои вопросы.

1 ответ

Решение

Я нашел самый простой способ сделать это, заполнив массив словарями со строками в качестве ключей и объектами в качестве значений, например:

' Read data from database
Dim result As New ArrayList()
Dr = myCommand.ExecuteReader()

' Add each entry to array list
While Dr.Read()
    ' Insert each column into a dictionary
    Dim dict As New Dictionary(Of String, Object)
    For count As Integer = 0 To (Dr.FieldCount - 1)
        dict.Add(Dr.GetName(count), Dr(count))
    Next

    ' Add the dictionary to the ArrayList
    result.Add(dict)
End While
Dr.Close()

Итак, теперь вы можете перебрать результат с помощью цикла for следующим образом:

For Each dat As Dictionary(Of String, Object) In result
     Console.Write(dat("ColName"))
Next

Совершенно похоже на то, как вы сделали бы это, если бы это был только DataReader:

While Dr.Read()
    Console.Write(Dr("ColName"))
End While

В этом примере используется драйвер MySQL/NET, но тот же метод можно использовать с другими популярными коннекторами базы данных.

Другие вопросы по тегам