旨在实现: 我希望将来自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)
请帮助..
- 我想使用上述任务的最佳实现。
答案 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对象可以处理每个对象的通信 数据来源。
“// Dispose()方法做什么用?”
http://msdn.microsoft.com/en-us/library/system.idisposable.dispose.aspx
执行与释放,释放或重置非托管资源相关的应用程序定义任务。
我更喜欢using-statement(参见上面的代码示例),因为它更简单,也可以关闭连接等。