2009-12-01 17 views
2

我擁有多個數據集的最佳方式是什麼?如何創建和管理多個數據集

我想過創造在其名稱中的數字,每一個與所需的數據創建數據集的程序,但不是很聰明的(儘管可能會奏效)

我想創造什麼會像「陣列數據集的」
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加載到一個數據集的相同代碼,並且它完美地工作,我已經來回多次確保它不僅僅是一個邏輯錯誤,它的語法並缺乏編程知識..哈哈)

謝謝!

+0

但它只是不起作用.. =(以及數據集出了什麼問題?對不起,我真的很陌生 – Marcelo 2009-12-01 16:36:47

+1

人們不喜歡數據集,因爲它們是龐大而笨重的對象,它們佔據了大塊的內存和系統資源使用,而在大型應用程序中,當用戶開始抱怨程序運行速度很慢時,它們可能會引起巨大的麻煩,數據集唯一真正的好處就是可以使用它們編寫代碼的效率高於 – Jrud 2009-12-01 16:42:35

+0

我在我的編程carreer的第一個月,已經祝賀我的成就,其中一些(我不能從谷歌獲得的)我問這裏,你們幫助我很多!(順便說一句,我已經完成了一個數據集的加載,使用和覆蓋每個文件)。您的最佳實踐技巧讓我思考更廣泛,並且會讓我成爲有朝一日的好人,謝謝。 – Marcelo 2009-12-01 16:59:05

回答

3

對過去的馬塞洛的答案是不要做。
數據集很大,通過使用一個你已經消耗太多內存。

我所做的:
創建了一個數據集,並用它(得到了我想要的字段),然後把它清理:

dim ds as new dataset 

這行代碼是在我裝每個文件FOR,所以它每次刷新。完美工作。

+0

完美,現在只要你允許你和線程完成就接受你自己的答案。 – Jrud 2009-12-01 17:08:11

2

以及你當然可以通過簡單地做到這一點:

Dim ds(100) as DataSet 

,將工作。但是,數據集可以包含多個表,從而使數據集的數組成爲排序第四維數組(數據集,表,行,列)。如果你真的需要這個功能,那麼你可以按照上面的描述創建一個數組,或者使用一個數組列表,或者其他.net集合類最適合你的需求。

~~~~~~~~~~~~~~~~~編輯後編輯~~~~~~~~~~~~~~ ~~~~~~~~

你得到空引用異常的原因是,如果你聲明它沒有數字,數組中有零對象。如果您不知道在設計時需要多少數據集,那麼您應該考慮使用數組列表或其中一個.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

我不能......它必須能夠獲得儘可能多的xmls ......在某些情況下它可能高達6000。 – Marcelo 2009-12-01 16:34:07

+0

你沒有提到你第一次有例外:P我做了一個編輯解釋了該怎麼做。如果您希望我可以詳細瞭解ArrayList集合。 – Jrud 2009-12-01 16:39:54

+0

或Redim聲明,如果你真的,真的想,但我想說,它的糟糕的編程習慣。 – Jrud 2009-12-01 16:43:46

0

你確定你不需要一個DataSet與多個表嗎?

然後您可以命名每個表。