2

实现目标: 我希望将来自 3 个不同位置的 3 个不同 SQL 查询的 3 个不同数据表放入 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)

请帮忙..

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

1 回答 1

2

我不会用每个 DataAdapter 填充 DataSet,而是填充 DataSet 的 DataTables:

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,这使您能够关联来自不同数据源的数据。例如,DataSet 可以包含来自 Microsoft SQL Server 数据库、通过 OLE DB 公开的 IBM DB2 数据库以及流式传输 XML 的数据源的数据。一个或多个 DataAdapter 对象可以处理与每个数据源的通信。

更多的...

" // Dispose() 方法是做什么的?"

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

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

I would prefer the using-statement(see code-sample above) because it's simplier and also closes connection etc.

于 2011-08-08T20:08:35.970 回答