2011-08-08 1 views
2

達成目標: 私は3つの異なる場所から3つの異なるSQLクエリから3つの異なるデータテーブルを1つの単一データセットにしたいと思います。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を埋めていないだろうが、各データアダプターとデータセットのDataTableの:

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 

は、データアダプター、オブジェクトの任意の数は、DataSetを使用することができます。各 DataAdapterを使用して1つ以上のDataTableオブジェクトを埋め込み、 は関連するデータソースに更新を解決します。 DataRelationと 制約オブジェクトをローカルでDataSetに追加することができます。 では、異なるデータソースのデータを関連付けることができます。たとえば、 DataSetには、Microsoft SQL Serverデータベース、IBM OLE DBを介して公開されたDB2データベース、および XMLをストリームするデータソースのデータを含めることができます。 1つ以上のDataAdapterオブジェクトは、各データソースへの通信を処理できます。

More...

"//のDispose()メソッドは何をしますか?"

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

、アンマネージリソースの解放およびリセットに関連付けられているアプリケーション定義のタスクを実行します。

それはsimplierだとも接続を閉じたので、私は我々が開閉接続を3回ここで、我々は `内のすべての3つのクエリを行うことはできませんされて

+0

など(上記のコードサンプルを参照してください)using-statementを好むだろう全ての3が同じ 'conStr'を持っているならば、1接続? –

+0

@ Yuga。お役に立てて嬉しいです。しかし、すべての人に同じ接続を使用できるということを誤解しないでください。異なる方法で/ open/closeを作成しても、Connection-Poolは同じ接続(接続文字列が同じ場合)を使用するためです。だからあなたは1つの "グローバル"接続を持つべきではなく、これを使うべきです。それを必要な場所に作成して使用すると、ADO.NET Connection-Poolが残りの作業を行います。 –

関連する問題