Сохранение результатов 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, но тот же метод можно использовать с другими популярными коннекторами базы данных.