2012-05-10 7 views
0

私はデータベースに対して(2回)問合せを実行し、その結果をデータセットに戻す機能があります。結果を確認して(あるものがあることを確認する)、ループして戻り値の各データセットを取得し、別のデータセットにインポート(コピー)します。DataSet行Add/Imports何もなし

リストに主キーを追加して、同じ項目を2回目(2番目のクエリから)にデータセットに追加しないようにします。

その後、データセットを返します。

問題がありますか?クエリが動作し、返された値があります。しかし、私が行をインポートすることを目指しているデータセットは、インポートされた行を保持しません。

私のアプローチと問題点についてお答えください。私は常に改善するつもりです!

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 

答えて

0

カラム名は明示的に指定する必要があります。何らかの理由で私はインポートされたdatarow行から列名を暗黙的に継承するというデータセットを考えていました。

clientsWithMonitors.Tables(0).Columns.Add("Foo") 
clientsWithMonitors.Tables(0).Columns.Add("Bar") 
関連する問題