Как создать и управлять несколькими наборами данных - PullRequest
2 голосов
/ 01 декабря 2009

Какой для меня лучший способ иметь несколько наборов данных?

Я думал о создании подпрограммы для создания наборов данных с номерами в именах, каждый с нужными данными, но это не очень разумно (хотя может работать)

Я хотел бы создать то, что было бы похоже на "Массив данных"
В.Б:

<whatever> = ds(1).<whatever>
<whatever> = ds(2).<whatever>
...
...

и beign, чтобы увидеть, сколько наборов данных у меня есть в этом "массиве" было бы желательно.

любой ответ в c # или vb.net приветствуется! (хотя я развиваюсь на vb.net)

Я пытался сделать это как массив

    Dim dinfo As DirectoryInfo = New DirectoryInfo("c:\")  
    Dim finfo As FileInfo() = dinfo.GetFiles("*.xml")
    Dim ds() As DataSet = Nothing

    For a = 0 To finfo.GetLength(0) Step 1

        ds(a).ReadXml("c:\" + finfo(a).Name)
    Next

и я получаю

***Object reference not set to an instance of an object.***

поэтому я предполагаю, что это не так.

(obs, я сделал один и тот же код, загружая один XML в один набор данных, и он отлично работает, я перебирал назад и вперед более одного раза, чтобы убедиться, что это не просто логическая ошибка, это синтаксис отсутствие знания программирования .. ха-ха)

Спасибо!

Ответы [ 3 ]

3 голосов
/ 01 декабря 2009

Ответ на прошлый марсело: НЕ ДЕЛАЙТЕ ЭТОГО.
Наборы данных большие, и, используя один, вы уже занимает слишком много памяти.

Что я сделал:
Создал ОДИН набор данных и использовал его (получил нужные поля), затем очистил его:

dim ds as new dataset

Эта строка кода была в FOR, куда я загружал каждый файл, поэтому он каждый раз сбрасывается. Работал отлично.

2 голосов
/ 01 декабря 2009

ну, конечно, вы можете сделать это просто:

Dim ds(100) as DataSet

Это будет работать. Однако набор данных может содержать несколько таблиц, что делает массив наборов данных 4-м размерным массивом (набор данных, таблица, строка, столбец). Если вам действительно нужны эти функции, вы можете создать массив, как указано выше, или использовать список массивов, или любой другой класс .net коллекции, который лучше всего соответствует вашим потребностям.

~~~~~~~~~~~~~~~~~~~~~~~~~~~ Редактировать, увидев ваши изменения ~~~~~~~~~~~~~~~ ~~~~~~~

Причина, по которой вы получаете исключение нулевой ссылки, состоит в том, что массив содержит ноль объектов, если вы объявляете его без номера. Если вы не знаете, сколько наборов данных вам понадобится во время разработки, вам, вероятно, следует подумать об использовании arraylist или одной из коллекций .net. Есть оператор, который вы могли бы выполнить: «Redim Preserve ds (ds.length)», который увеличит размер массива на 1, чтобы вы могли заполнить следующий, но я не рекомендую его. Это воссоздает весь массив в памяти, копирует значения, а затем удаляет старый.

~~~~~~~~~~~~~~~~~~~~~~~~~~ ArrayList версия ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~

Хорошо, вот как это будет выглядеть с ArrayList:

Dim dinfo As DirectoryInfo = New DirectoryInfo("c:\")
Dim finfo As FileInfo() = dinfo.GetFiles("*.xml")
Dim ds As New ArrayList()

For a As Integer = 0 To finfo.GetLength(0)
    Dim tempDS As New DataSet
    tempDS.ReadXml("c:\" + finfo(a).Name)
    ds.Add(tempDS)
Next

~~~~~~~~~~~~~~~~~~~~~~~~~~ Версия массива ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~

Вот как это будет выглядеть с обычным массивом, если вы не чувствуете себя комфортно с arrayList:

Dim dinfo As DirectoryInfo = New DirectoryInfo("c:\")
Dim finfo As FileInfo() = dinfo.GetFiles("*.xml")

Dim ds(-1) As DataSet
For a As Integer = 0 To finfo.GetLength(0)
    ReDim Preserve ds(ds.Length)
    ds(ds.Length - 1) = New DataSet()
    ds(ds.Length - 1).ReadXml("c:\" + finfo(a).Name)
Next
0 голосов
/ 02 декабря 2009

Вы уверены, что вам не нужен один DataSet с несколькими таблицами?

Затем вы можете назвать каждую таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...