2011-08-08 90 views
2

目標達成: 我想從3個不同的地方有3個不同的SQL查詢3個不同的dataTable到1單個DataSet,我將不得不返回形式我的功能。如何用Vb.net中的3個不同適配器填充數據集?

我:

Private Function getDataSet() 
    Dim ad1,ad2,ad3 As Object 
    ad1 = New Data.OleDb.OleDbDataAdapter(query1, conStr1) 
    ad2 = New Data.SqlClient.SqlDataAdapter(query2, conStr2) 
    ad3 = New Data.SqlClient.SqlDataAdapter(query3, conStr3) 
    Dim dataSet As New Data.DataSet 

    // I want to fill dataSet with the 3 adapters ! 
    // ad1.Fill(dataSet) : ad2.Fill(dataSet) : ad3.Fill(dataSet) 
    // Will this work ? 

    ad1.Dispose() : ad2.Dispose() : ad3.Dispose() // What does Dispose() method do ? 
    Return dataSet 
End Function 

Dim ds = getDataSet() 
data1 = ds.Tables(0) 
data2 = ds.Tables(1) 
data3 = ds.Tables(2) 

請幫助..

  • 我想用最好的執行上述任務。

回答

2

我不會填充DataSet,但在每次DataAdapter的數據集的數據表:

Private Function getDataSet() As DataSet 
    Dim ds As New Data.DataSet 
    ds.Tables.Add(New DataTable("Table1")) 
    ds.Tables.Add(New DataTable("Table2")) 
    ds.Tables.Add(New DataTable("Table3")) 

    Using con As New OleDb.OleDbConnection("conStr1") 
     Using ad As New Data.OleDb.OleDbDataAdapter("query1", con) 
      con.Open() 
      ad.Fill(ds.Tables("Table1")) 
     End Using 
    End Using 
    Using con As New OleDb.OleDbConnection("conStr2") 
     Using ad As New Data.OleDb.OleDbDataAdapter("query2", con) 
      con.Open() 
      ad.Fill(ds.Tables("Table2")) 
     End Using 
    End Using 
    Using con As New OleDb.OleDbConnection("conStr3") 
     Using ad As New Data.OleDb.OleDbDataAdapter("query3", con) 
      con.Open() 
      ad.Fill(ds.Tables("Table3")) 
     End Using 
    End Using 

    Return ds 
End Function 

任意數量的DataAdapter對象可以用一個DataSet中。每個 DataAdapter可用於填充一個或多個DataTable對象,並將 解決更新返回到相關數據源。 DataRelation和 約束對象可以添加到DataSet本地,這使您可以將來自不同數據源的數據關聯起來。例如,DataSet可以包含來自Microsoft SQL Server數據庫的數據,通過OLE DB公開的DB2數據庫以及流式傳輸XML的數據源。一個或多個DataAdapter對象可以處理與每個 數據源的通信。

More...

「//這是什麼Dispose()方法嗎?」

http://msdn.microsoft.com/en-us/library/system.idisposable.dispose.aspx

執行與釋放或重置非託管資源相關的應用程序定義的任務。

我寧願using-statement(見上面的代碼樣本),因爲它是simplier並關閉連接等

+0

我們是開放,在這裏3次關閉連接,我們不能做所有的'3個查詢1連接'如果所有3都具有相同的'conStr'? –

+0

@Yuga。很高興我能幫上忙。但是不要誤解你可以爲所有人使用相同的連接。由於連接池將使用相同的連接(當連接字符串相同時),即使您將使用不同的方法創建/打開/關閉連接。所以你不應該有一個「全局」連接並使用它。在需要的地方創建並使用它,ADO.NET連接池將爲您完成剩下的工作。 –

相關問題