DataSet行无添加/导入

时间:2012-05-10 12:54:04

标签: vb.net dataset datarow

所以我在针对数据库的触发查询时(两次)有一个函数,并在数据集中返回结果。它检查结果(以确保有一些)然后循环并从返回的数据集中抓取每一行并将其导入(复制)到不同的数据集。

我还将一个主键添加到List中,因此我不会将相同的项目(从第二个查询中)添加两次到数据集。

然后我返回数据集。

问题?查询有效,并且返回值..但是,我在其中导入行的数据集不会保留导入的行。

请就我的方法和手头的问题提出任何建议;我一直在寻求改进!

Public Function GetClientsWithMonitors(ByVal argHost As FOO.Interfaces.BAR) As DataSet
    Try
        Dim localDataSet As New DataSet()
        Dim clientsWithMonitors As New DataSet()
        Dim tempList As New List(Of Integer)

        clientsWithMonitors.Clear()
        localDataSet.Clear()
        tempList.Clear()
        clientsWithMonitors.Tables.Add()

        'SQL getting monitors applied to clients
        Dim clientSQL As String = "SELECT DISTINCT c.ClientID, c.Name FROM agents a LEFT JOIN clients c ON c.ClientID = a.ClientID WHERE a.ClientID > 0"
        'SQL getting monitors applied directly to an agent
        Dim agentSQL As String = "SELECT DISTINCT c.ClientID, c.Name FROM clients c LEFT JOIN computers comp ON c.ClientID = comp.ClientID LEFT JOIN agents a ON comp.ComputerID = a.ComputerID  WHERE a.LocID = 0 AND a.ClientID = 0 AND a.ComputerID > 0"
        localDataSet = argHost.GetDataSet(clientSQL)
        If localDataSet.Tables.Count > 0 AndAlso localDataSet.Tables(0).Rows.Count > 0 Then
            For Each row As DataRow In localDataSet.Tables(0).Rows
                If Not tempList.Contains(CInt(row("ClientID").ToString())) Then
                    Dim clientID As Integer = CInt(row("ClientID").ToString())
                    clientsWithMonitors.Tables(0).ImportRow(row)
                    tempList.Add(clientID)
                End If
            Next
        End If
        If localDataSet.Tables.Count > 0 AndAlso localDataSet.Tables(0).Rows.Count > 0 Then
            localDataSet.Clear()
            localDataSet = argHost.GetDataSet(agentSQL)
            For Each row As DataRow In localDataSet.Tables(0).Rows
                If Not tempList.Contains(CInt(row("ClientID").ToString())) Then
                    Dim clientID As Integer = CInt(row("ClientID").ToString())
                    clientsWithMonitors.Tables(0).ImportRow(row)
                    tempList.Add(clientID)
                End If
            Next
        End If
        Return clientsWithMonitors
    Catch ex As Exception
        LogEventViaHost(argHost, "Error Getting dataset of clients with a specified monitor" & ex.StackTrace & " " & ex.Message)
        Return Nothing
    End Try

1 个答案:

答案 0 :(得分:0)

必须明确说明列名;出于某种原因,我在想数据集它会隐式地从导入的datarow行继承列名。

clientsWithMonitors.Tables(0).Columns.Add("Foo")
clientsWithMonitors.Tables(0).Columns.Add("Bar")