Re: [問題] 如何在Page_Load底下同時讀取兩個資料表?
三種方法,
第一種使用SqlDataReader,第二種使用DataSet,
第三種動態建立SqlDataSource使用DataView。
設想要呈現第一個資料表的GridView叫GridView1,
想要呈現第二個資料表內容的GridView叫GridView2。
如果沒有要應用在GridView上的話,其實原理相同,依此類推就可以了。
第一種:
Dim connString As String = _
WebConfigurationManager. _
ConnectionStrings("NorthwindConnectionString").ConnectionString
Dim conn As New SqlConnection(connString)
conn.Open()
Dim cmd As New SqlCommand()
cmd.Connection = conn
'重點:在CommandText中寫入兩條Select Command
cmd.CommandText = "SELECT TOP 5 * FROM [dbo].[Employees]"
cmd.CommandText &= " SELECT TOP 5 * FROM [dbo].[Orders]"
Dim dr As SqlDataReader = cmd.ExecuteReader()
GridView1.DataSource = dr
GridView1.DataBind()
'重點:SqlDataReader.NextResult會將目前讀取的資料表移至SqlCommand
'所篩選出的第二張資料表,以此類推也可以有第三張、第四張......
While dr.NextResult()
GridView2.DataSource = dr
GridView2.DataBind()
End While
'釋放資源
dr.Close()
dr.Dispose()
cmd.Dispose()
conn.Close()
conn.Dispose()
第二種:
Dim connString As String = _
WebConfigurationManager. _
ConnectionStrings("NorthwindConnectionString").ConnectionString
Dim conn As New SqlConnection(connString)
conn.Open()
Dim da As New SqlDataAdapter()
Dim cmd As New SqlCommand()
cmd.Connection = conn
'一樣寫入兩條Select Command
cmd.CommandText = "SELECT TOP 5 * FROM [dbo].[Employees]"
cmd.CommandText &= "SELECT TOP 5 * FROM [dbo].[Orders]"
da.SelectCommand = cmd
Dim ds As New DataSet()
'注意不要為srcTable或Table之類的命名
da.Fill(ds)
'由於DataSet是存在於記憶體中的,所以此時已經可以釋放以下資源
cmd.Dispose()
da.Dispose()
conn.Close()
conn.Dispose()
'利用索引來存取第一張與第二張資料表
GridView1.DataSource = ds.Tables(0).DefaultView
GridView1.DataBind()
GridView2.DataSource = ds.Tables(1).DefaultView
GridView2.DataBind()
'釋放DataSet資源
ds.Clear()
ds.Dispose()
第三種:
Dim sqlds As New SqlDataSource()
sqlds.ConnectionString = _
WebConfigurationManager. _
ConnectionStrings("NorthwindConnectionString").ConnectionString
'如法炮製
sqlds.SelectCommand = "SELECT TOP 5 * FROM [dbo].[Employees]"
sqlds.SelectCommand &= "SELECT TOP 5 * FROM [dbo].[Orders]"
'取得DataView
Dim dv As DataView = _
CType(sqlds.Select(DataSourceSelectArguments.Empty), DataView)
'從DataView往上取得DataTable,再進一步取得DataSet
'最後再用索引取得第一張與第二張資料表
GridView1.DataSource = dv.Table.DataSet.Tables(0).DefaultView
GridView1.DataBind()
GridView2.DataSource = dv.Table.DataSet.Tables(1).DefaultView
GridView2.DataBind()
dv.Dispose()
sqlds.Dispose()
希望能幫上一點忙:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.70.234.217
→
10/31 05:25, , 1F
10/31 05:25, 1F
→
10/31 05:26, , 2F
10/31 05:26, 2F
推
10/31 12:20, , 3F
10/31 12:20, 3F
→
10/31 12:20, , 4F
10/31 12:20, 4F
→
10/31 23:25, , 5F
10/31 23:25, 5F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):