Re: [問題] 如何在Page_Load底下同時讀取兩個資料表?

看板Web_Design作者 (十三)時間13年前 (2010/10/30 22:24), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串2/2 (看更多)
三種方法, 第一種使用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
就可以用KenZ大的方法直接UNION取聯集
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
沒有啦過獎了XD
10/31 23:25, 5F
文章代碼(AID): #1Cp2gCW0 (Web_Design)
文章代碼(AID): #1Cp2gCW0 (Web_Design)