如何创建和管理多个数据集

时间:2009-12-01 16:25:50

标签: c# vb.net arrays dataset

我有多个数据集的最佳方式是什么?

我考虑创建一个例程来创建名称中带有数字的数据集,每个数据集都有所需的数据,但这不是很聪明(尽管可能有效)

我想创造一个像“数据集阵列”的东西 VB:

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

并且能够看到我在这个“数组”中有多少数据集是可取的。

欢迎使用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 个答案:

答案 0 :(得分:3)

过去马塞洛的答案是不要做 数据集很大,使用一个你已经消耗了太多的内存。

我做了什么:
创建了一个数据集并使用它(得到我想要的字段)然后清理它:

dim ds as new dataset

这行代码在我加载每个文件的FOR中,因此每次都会刷新。工作得很好。

答案 1 :(得分:2)

你当然可以通过以下方式来做到这一点:

Dim ds(100) as DataSet

那会有效。但是,数据集可以包含多个表,使数据集数组成为第四维数组(数据集,表,行,列)。如果您确实需要此功能,那么您可以创建如上所述的数组,或使用数组列表,或任何其他最适合您需要的.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

答案 2 :(得分:0)

您确定不需要一个包含多个表的DataSet吗?

然后,您可以为每个表命名。