首页 > 解决方案 > VB.Net 清除数据集和数据表以便接收新的数据集

问题描述

在我可以将新值分配给数据表列表之前,我无法清除数据集。程序正在从每个文件中读取数组值,每个文件的数据存储在每个数据表的列表中。稍后,我想从每个数据表中获取一些数据,存储到新数据表中并清除/删除旧数据表(通过设置 dataset.clear())。但是,当我转到第二个文件夹并收集新文件时,会在 "dsSet.Tables.Add(dataInfo)" 行抛出错误。任何人都知道为什么,因为 dataset.clear() 应该从数据集中删除所有信息,包括数据表。正确的?当我没有清除数据集时,我抛出错误说“数据表(0)已经存在”。代码如下:

Dim dataReader As IO.StreamReader  
Dim readEachLine As String
Dim indexTable As DataTable
Dim dataInfo As DataTable
Dim dsSet As DataSet = New DataSet("Set1")

For Each folder As String In Directory.GetDirectories(folderPath, "*", System.IO.SearchOption.AllDirectories)

    Dim myFiles As String()
    myFiles = IO.Directory.GetFiles(folder, "*.txt")
   
    Dim filesCounter As Integer = myFiles.Count
 
    For i As Integer = 0 To filesCounter - 1

        dataInfo = New DataTable(i)
        With dataInfo
            .Columns.Add("dtData1", System.Type.GetType("System.String"))
            .Columns.Add("dtData2", System.Type.GetType("System.String"))
            .Columns.Add("dtData3", System.Type.GetType("System.String"))
            .Columns.Add("dtData4", System.Type.GetType("System.String"))
            .Columns.Add("dtData5", System.Type.GetType("System.String"))
            .Columns.Add("dtData6", System.Type.GetType("System.String"))
            .Columns.Add("dtData7", System.Type.GetType("System.String"))
            .Columns.Add("dtData8", System.Type.GetType("System.String"))
            .Columns.Add("dtData9", System.Type.GetType("System.String"))
            .Columns.Add("dtData10", System.Type.GetType("System.String"))
        End With

        dataReader = New IO.StreamReader(ArrayFileData(i), System.Text.Encoding.Default)

        Do
            readEachLine = dataReader.ReadLine
            If readEachLine Is Nothing Then Exit Do
            Dim dataColumns() As String = readEachLine.Split(",")
            Dim dataFileRow As DataRow = dataInfo.NewRow
            dataFileRow("dtData1") = dataColumns(0)
            dataFileRow("dtData2") = dataColumns(1)
            dataFileRow("dtData3") = dataColumns(2)
            dataFileRow("dtData4") = dataColumns(3)
            dataFileRow("dtData5") = dataColumns(4)
            dataFileRow("dtData6") = dataColumns(5)
            dataFileRow("dtData7") = dataColumns(6)
            dataFileRow("dtData8") = dataColumns(7)
            dataFileRow("dtData9") = dataColumns(8)
            dataFileRow("dtData10") = dataColumns(9)
            dataInfo.Rows.Add(dataFileRow)
        Loop
        dataReader.Close()
        dsSet.Tables.Add(dataInfo)

    Next

    rowCounter = 0

    For k As Integer = 0 To (dsSet.Tables(0).Rows.Count - 1)
        rowCounter = rowCounter + 1
        Dim newIndexRow As DataRow = indexTable.NewRow
        If rowCounter = 1 Then
            newIndexRow("Data1") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData1")
            newIndexRow("Data2") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData2")
            newIndexRow("Data3") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData3")
            newIndexRow("Data4") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData4")
            newIndexRow("Data5") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData5")
            newIndexRow("Data6") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData6")
            newIndexRow("Data7") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData7")
            newIndexRow("Data8") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData8")
            newIndexRow("Data9") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData9")
            newIndexRow("Data10") = dsStocks.Tables(0)(dsStocks.Tables(0).Rows.Count - 1)("dtData10")
            indexTable.Rows.Add(newIndexRow)
        Else
    ' will add something later
        End If
    Next

   dsSet.Clear()
    '        dsSet.Dispose()
    '        dsSet = Nothing
Next

标签: vb.netlistdatatabledataset

解决方案


表必须在数据集清除后设置为清除,而不是之前。

dsSet.Clear()
dsSet.Tables.Clear()

推荐阅读