8.4.1 填充DataSet
在下面的示例中,你將會看到如何從SQL Server表中獲得數(shù)據(jù)并用它填充DataSet中的DataTable對象。你還將看到如何通過編程循環(huán)遍歷記錄并逐一顯示。所有的邏輯代碼都放在Page.Load事件處理程序中。
首先,代碼創(chuàng)建連接并定義SQL查詢的文本:
下一步是創(chuàng)建用于讀取雇員列表的SqlDataAdapter類的實(shí)例。雖然每個DataAdapter對象都支持4個Command對象,但是只有一個(SelectCommand)是填充DataSet所必需的。為了簡單起見,可以創(chuàng)建需要的Command對象,然后把它賦給DataAdapter.SelectCommand屬性。在DataAdapter的構(gòu)造函數(shù)中只要提供Connection對象和查詢語句就可以了,如下所示:
現(xiàn)在你要做的是創(chuàng)建一個新的空DataSet對象,然后利用DataAdapter.Fill()方法執(zhí)行查詢并把結(jié)果放到DataSet新建的DataTable中。此時,還可以指定表的名稱。如果不指定,會自動定義一個默認(rèn)名(如Table)。在下面的示例中,盡管不是必需的,但還是使用了和數(shù)據(jù)庫中源表一致的名字來命名表:
注意這段代碼并沒有調(diào)用Connection.Open()方法來打開連接。相反,當(dāng)調(diào)用Fill()方法時,DataAdapter自動打開和關(guān)閉相關(guān)聯(lián)的連接。所以,唯一需要考慮進(jìn)行異常處理的一行代碼是DataAdapter.Fill()。當(dāng)然,也可以選擇手工打開和關(guān)閉連接。調(diào)用Fill()方法時,如果連接已經(jīng)打開,DataAdapter將使用該連接并且執(zhí)行完畢后也不會自動關(guān)閉它。當(dāng)需要在數(shù)據(jù)源上執(zhí)行一系列快速連續(xù)的操作時,這樣做很有效,它不會因?yàn)橹貜?fù)地打開和關(guān)閉連接從而帶來額外的開銷。
最后一步是顯示DataSet的內(nèi)容。一種快捷方式是利用前一章所講的技術(shù)來檢索每條記錄并構(gòu)建一個HTML字符串。下面的代碼循環(huán)遍歷DataTable的所有DataRow對象并在列表中顯示每個記錄的字段值:
當(dāng)然,ASP.NET模型可以把你從編寫原始的HTML代碼中解脫出來。更好的辦法是把DataSet中的數(shù)據(jù)綁定到一個數(shù)據(jù)綁定控件上,它將基于模板自動生成所需的HTML。第9章將會詳細(xì)介紹數(shù)據(jù)綁定控件。
注解
將DataSet和控件綁定時,視圖狀態(tài)中并沒有保存數(shù)據(jù)對象。數(shù)據(jù)控件只保存足夠當(dāng)前顯示的信息。如果要在多次回發(fā)間和DataSet交互,就必須以手工方式把DataSet保存到視圖狀態(tài)(這會顯著增加頁面的大?。┗蛘邥捇蚓彺鎸ο笾小?BR>
|