如何查询本地数据表并将信息返回到VB.net中的数据表

时间:2018-11-30 17:46:07

标签: vb.net datatable

我正在尝试将查询和现有数据表传递给函数。该函数将使用传递的查询来查询传递的数据表并返回结果。

很遗憾,我无法返回任何数据。我已经在下面发布了我的代码。谁能帮我解决这个问题?我不知道我在做什么错。

Public Function ExecQueryTest(Query As String, DT As DataTable) As DataTable

    Dim Result() As DataRow
    'initialize the table to have the same number of columns of the table that is passed into the function
    Dim LocalTable As DataTable = DT
    'initialize counting variables
    Dim x, y As Integer

    'use the select command to run a query and store the results in an array
    Result = DT.Select(Query)

   'remove all items from the localtable after initial formatting
    For x = 0 To LocalTable.Rows.Count - 1
        LocalTable.Rows.RemoveAt(0)
    Next

    'for loop to iterate for the amount of rows stored in result
    For x = 0 To Result.GetUpperBound(0)
        'add each array row into the table 
        LocalTable.Rows.Add(Result(x))
    Next

    ExecQueryTest = LocalTable
End Function

如果有更好的方法可以实现我的目标,那么我不介意从头开始。我只希望能够处理动态表,查询,并能够以数据表格式返回信息。

2 个答案:

答案 0 :(得分:2)

问题在这里:

Dim LocalTable As DataTable = DT

该代码无法执行您认为的操作。 DataTable是引用类型,这意味着仅将DT分配给LocalTable变量分配对同一对象的引用。没有创建新表,也没有任何内容被复制。因此,后面的代码也清除了原始表:

'remove all items from the localtable after initial formatting
For x = 0 To LocalTable.Rows.Count - 1
    LocalTable.Rows.RemoveAt(0)
Next

尝试以下方法:

Public Function ExecQueryTest(Query As String, DT As DataTable) As DataTable
    ExecQueryTest = New DataTable() 'create new DataTable object to hold results
    For Each row As DataRow In DT.Select(Query)
        ExecQueryTest.LoadDataRow(row.ItemArray, True)
    Next
End Function

尽管您可能还需要克隆每个DataRow记录。

答案 1 :(得分:0)

您可以仅用

清除表格
LocalTable.Clear()

除了使用该循环外,还可以使用以下方法将选择的结果直接转换为数据表

LocalTable = Result.CopyToDataTable