2009-12-01 6 views
2

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

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

я хотел бы создать что будет как "ARRAY OF DataSets"
Vb:

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

Спасибо!

+0

но он просто не работает .. = (и что не так с наборами данных? Извините, я действительно новичок в этом – Marcelo

+1

Люди не любят массивы данных, потому что они большие, громоздкие объекты. Они занимают огромные куски ресурсов и системных ресурсов, а в больших приложениях они могут вызвать массивные головные боли, когда пользователи начинают жаловаться на то, насколько медленна ваша программа. Единственное реальное преимущество для наборов данных - это эффективность, с которой вы можете их кодировать. – Jrud

+0

Ребята, это Я в первый месяц своего карьерного карьера и уже поздравляю за свои достижения, некоторые из них (те, которые я просто не могу получить от Google), я спрашиваю здесь, и вы, ребята, мне очень помогли! (btw , я сделал это с ONE-набором данных, загружаемым, используемым и написанным над каждым файлом). Советы по лучшим практикам заставляют меня думать шире и заставят меня когда-нибудь стать хорошими. – Marcelo

ответ

3

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

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

dim ds as new dataset 

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

+0

отлично, теперь просто принимайте свой собственный ответ, когда он позволяет вам и потоку завершить. – Jrud

2

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

Dim ds(100) as DataSet 

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

~~~~~~~~~~~~ ~ ~~~~~~~~

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

Версия ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

Хорошо, вот как это будет выглядеть с 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

Я не могу .. он должен иметь возможность получить как можно больше xmls. В некоторых случаях это может быть до 6 тысяч. – Marcelo

+0

Вы не упомянули, что у вас было исключение в первый раз: P Я сделал править, объясняя, что делать. Если вы хотите, я могу подробнее рассказать о коллекции ArrayList. – Jrud

+0

или заявление Redim, если вы ДЕЙСТВИТЕЛЬНО, ДЕЙСТВИТЕЛЬНО хотите, но я говорю, его плохая практика программирования. – Jrud

0

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

Затем вы можете назвать каждый стол.

Смежные вопросы