如何在Vb.net中使用3个不同的适配器填充数据集?

时间:2011-08-08 19:49:07

标签: .net vb.net dataset dataadapter

旨在实现: 我希望将来自3个不同位置的3个不同SQL查询的3个不同的dataTable分配到1个单独的DataSet中,我必须从我的函数返回。

我有:

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)

请帮助..

  
      
  • 我想使用上述任务的最佳实现。
  •   

1 个答案:

答案 0 :(得分:2)

我不会使用每个DataAdapter填充DataSet,而是填充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
  

任何数量的DataAdapter对象都可以与DataSet一起使用。每   DataAdapter可用于填充一个或多个DataTable对象   将更新解析回相关数据源。 DataRelation和   可以在本地将Constraint对象添加到DataSet中   您要关联来自不同数据源的数据。例如,a   DataSet可以包含来自Microsoft SQL Server数据库(IBM)的数据   通过OLE DB公开的DB2数据库,以及流式传输的数据源   XML。一个或多个DataAdapter对象可以处理每个对象的通信   数据来源。

More...

  

“// Dispose()方法做什么用?”

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

执行与释放,释放或重置非托管资源相关的应用程序定义任务。

我更喜欢using-statement(参见上面的代码示例),因为它更简单,也可以关闭连接等。