【问题标题】:How to fill a dataset with 3 different adapters in Vb.net?如何在 Vb.net 中使用 3 个不同的适配器填充数据集?
【发布时间】:2011-10-22 16:41:08
【问题描述】:

目标实现: 我想将来自 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)

请帮忙..

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

【问题讨论】:

    标签: .net vb.net dataset dataadapter


    【解决方案1】:

    我不会用每个 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 对象和 将更新解析回相关数据源。数据关系和 可以在本地将约束对象添加到 DataSet 中,从而使 您可以关联来自不同数据源的数据。例如,一个 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(请参阅上面的代码示例),因为它更简单并且还可以关闭连接等。

    【讨论】:

    • 我们在这里打开和关闭连接 3 次,如果所有 3 个都具有相同的 conStr,我们不能在 1 connection 中执行所有 3 个查询吗?
    • @Yuga。很高兴我能帮助你。但不要误解,您可以为所有人使用相同的连接。由于连接池将使用相同的连接(当连接字符串相同时),即使您将使用不同的方法创建/打开/关闭它。所以你不应该有一个“全局”连接并使用它。在您需要的地方创建和使用它,ADO.NET 连接池将为您完成剩下的工作。
    猜你喜欢
    • 2011-09-26
    • 2014-07-02
    • 1970-01-01
    • 2013-11-27
    • 2014-03-23
    • 1970-01-01
    • 2023-03-20
    • 2021-06-10
    • 2015-06-08
    相关资源
    最近更新 更多