1 / 64

第 8 章 ADO.NET元件與資料繫結

第 8 章 ADO.NET元件與資料繫結. 第 8 章 ADO.NET元件與資料繫結. 8-1 資料庫的基礎 8-2 ASP.NET 網頁資料庫 8-3 ADO.NET 的 DataReader 物件 8-4 ADO.NET 的 DataSet 物件 8-5 資料繫結的基礎 8-6 SqlDataSource 資料來源控制項. 8-1 資料庫的基礎. 8-1-1 資料庫系統 8-1-2 關聯式資料庫. 8-1-1 資料庫系統.

barth
Download Presentation

第 8 章 ADO.NET元件與資料繫結

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 ADO.NET元件與資料繫結

  2. 第8章 ADO.NET元件與資料繫結 • 8-1 資料庫的基礎 • 8-2 ASP.NET網頁資料庫 • 8-3 ADO.NET的DataReader物件 • 8-4 ADO.NET的DataSet物件 • 8-5 資料繫結的基礎 • 8-6 SqlDataSource資料來源控制項

  3. 8-1 資料庫的基礎 • 8-1-1 資料庫系統 • 8-1-2 關聯式資料庫

  4. 8-1-1 資料庫系統 • 我們所泛稱的資料庫只是「資料庫系統」(Database System)的一部分,資料庫系統是由資料庫(Database)和「資料庫管理系統」(Database Management System,DBMS)所組成,如右圖所示:

  5. 8-1-2 關聯式資料庫 • 關聯式資料庫是使用「資料表」(Tables)的二維表格來儲存資料,每一個資料表使用「欄位」(Fields)分類成很多群組,每一個群組是一筆「記錄」(Records),例如:通訊錄資料表,如下表所示:

  6. 8-2 ASP.NET網頁資料庫 • 8-2-1 ASP.NET與資料庫 • 8-2-2 ADO.NET的基礎 • 8-2-3 ASP.NET的資料控制項 • 8-2-4 將資料庫加入ASP.NET網站

  7. 8-2-1 ASP.NET與資料庫-說明 • ASP.NET技術的Web應用程式就是一種「資料驅動Web應用程式」(Data-driven Web Applications),網頁實際內容是分開儲存成外部資料,當存取時才動態整合出最新的內容。 • 而資料庫就是Web應用程式最常使用的外部資料來源,換句話說,大部分ASP.NET建立的資料驅動Web應用程式,就是一種資料庫驅動Web應用程式(Database-driven Web Application),即稱為網頁資料庫(Web Database)。

  8. 8-2-1 ASP.NET與資料庫-圖例 • 網頁資料庫就是一種結合前端HTML文件或Web Form表單的使用介面,配合後端Web伺服器和資料庫系統的一種應用程式架構,如下圖所示:

  9. 8-2-2 ADO.NET的基礎-說明 • ADO.NET是微軟的資料存取技術,其主要目的是在.NET Framework平台存取資料,ADO.NET可以提供一致的物件模型來存取和編輯資料來源的資料。 • 換句話說,它就是提供一致的資料處理方式,至於資料來源並不限資料庫,幾乎任何資料來源都可以。

  10. 8-2-2 ADO.NET的基礎-物件模型 • ADO.NET的主要類別物件有:Connection、Command、DataReader和DataSet,其物件模型如下圖所示:

  11. 8-2-2 ADO.NET的基礎-物件說明 • Connection物件:可以建立與資料來源間的連接。 • Command物件:對資料來源執行指令,以資料庫來說,就是執行SQL指令敘述。 • DataReader物件:可以從資料來源使用Command物件執行指令,取得唯讀(Read-Only)和只能向前(Forward-Only)的串流資料,每一次只能從資料來源讀取一列資料(即一筆)儲存到記憶體,所以執行效率非常高。 • DataSet和DataTable物件:DataSet物件是由DataTable物件組成的集合物件,DataSet物件代表儲存在記憶體的資料庫,每一個DataTable儲存一個資料表的記錄資料,並且可以設定資料表間的關聯性(Relationship)。 • DataAdapter物件:它是DataSet和Connection物件資料連接間的橋樑,可以將資料表填入DataSet物件。

  12. 8-2-2 ADO.NET的基礎-名稱空間 • ADO.NET類別分屬數個名稱空間,可以用來存取資料庫的資料。換句話說,ASP.NET網頁需要匯入指定的名稱空間,才能使用ADO.NET類別來存取資料庫。主要的名稱空間說明,如下表所示:

  13. 8-2-3 ASP.NET的資料控制項-說明 • 在ASP.NET 1.0/1.1版存取資料庫需要使用ADO.NET元件,以程式碼連接、開啟、操作和顯示資料表的記錄資料。 • 從ASP.NET 2.0版開始,我們可以直接使用資料控制項(Data Controls)建立網頁資料庫,而不用撰寫任一行程式碼。 • 資料控制項依其功能可以分為: • 資料來源控制項 • 資料邊界控制項

  14. 8-2-3 ASP.NET的資料控制項-資料來源控制項(說明) • 資料來源控制項(DataSource Controls)是ASP.NET 2.0版開始支援的控制項,可以使用宣告方式來存取資料來源的資料。例如:宣告資料來源是SQL Server資料庫和指定相關屬性後,就可以存取資料庫的記錄資料。 • 事實上,在資料來源控制項的背後就是ADO.NET元件的DataSet、DataReader、Connection和Command物件,ASP.NET只是改為宣告的控制項標籤,所以,我們不用撰寫任何一行程式碼,只需指定相關屬性值,就可以輕鬆存取資料來源的資料。

  15. 8-2-3 ASP.NET的資料控制項-資料來源控制項(種類) • 在ASP.NET共提供五種資料來源控制項,如下表所示:

  16. 8-2-3 ASP.NET的資料控制項-資料邊界控制項(說明) • 資料邊界控制項(DataBound Controls)也稱為資料顯示與維護控制項,它是使用者和資料來源間的橋樑,可以將資料來源取得的資料呈現給使用者檢視或編輯。簡單的說,這是一種現成的資料顯示和維護介面,可以將資料來源的資料編排成瀏覽程式顯示的網頁內容。 • 換句話說,透過資料邊界控制項,我們就不用自行撰寫HTML標籤、程式碼或建立控制項來編排資料來源取得的資料,現在只需新增資料邊界控制項且指定相關屬性,就可以快速建立漂亮的資料編排效果,而且支援資料編輯功能,可以新增、更新和刪除資料來源的資料。

  17. 8-2-3 ASP.NET的資料控制項-資料邊界控制項(種類) • 表格顯示的控制項:這類控制項可以建立傳統HTML表格的顯示外觀,讓我們以一列一筆記錄的方式來顯示資料表的記錄資料,而且提供有分頁功能,例如:GridView、DataList和ListView控制項。 • 單筆顯示的控制項:此類控制項可以顯示單筆記錄,如同一疊卡片,在每張卡片上顯示一筆記錄,並且提供巡覽功能可以顯示指定卡片,或前一張、後一張卡片的記錄資料,例如:DetailsView和FormView控制項。 • 選擇功能的控制項:即清單控制項的DropDownList和ListBox控制項,它們不只支援簡單資料繫結,也支援從資料來源控制項取得項目資料。 • 樹狀結構的控制項:這類控制項是用來顯示階層架構的資料,特別針對XML文件的資料來源,例如:TreeView和Menu控制項。

  18. 8-2-4 將資料庫加入ASP.NET網站-本機與伺服器資料庫 • 對於ASP.NET網站使用的資料庫來說,SQL Server 2005 Express版可以建立兩種資料庫,其說明如下所示: • 伺服器資料庫(Server Database):伺服器資料庫是屬於伺服器,所以,在伺服器上執行的應用程式都可以存取此資料庫。不過,VWD並不能建立伺服器資料庫,我們只能使用Management Studio Express管理工具來建立。 • 本機資料庫(Local Database):本機資料庫是屬於ASP.NET網站的資料庫,它是建立在名為「\App_Data」子資料夾的資料庫。本書ASP.NET網站就是使用本機資料庫來建立網頁資料庫。

  19. 8-2-4 將資料庫加入ASP.NET網站-加入資料庫 • 我們可以在VWD開啟ASP.NET網站後,直接將資料庫加入ASP.NET網站。例如:將SQL Server資料庫Products.mdf,加入ASP.NET網站的「App_Data」資料夾,如下圖所示: 選加入的資料庫

  20. 8-3 ADO.NET的DataReader物件 • 8-3-1 開啟DataReader物件 • 8-3-2 Command物件的Execute()方法

  21. 8-3 ADO.NET的DataReader物件-說明 • ASP.NET網頁資料庫可以使用ADO.NET元件的DataReader或DataSet物件來取得記錄資料。因為本書在第9章才會詳細說明SQL查詢指令,所以,本章範例都是使用同一個SQL查詢指令,如下所示: SELECT * FROM Books • 上述SQL指令SELECT沒有WHERE子句的任何條件,查詢結果可以取得資料表Books的所有記錄和欄位資料。

  22. 8-3-1 開啟DataReader物件-匯入名稱空間 • DataReader物件是使用類似檔案串流來讀取記錄資料,它只能讀取,不能插入、刪除和更新記錄資料。在ASP.NET網頁首先需要匯入名稱空間,SQL Server與SQL Server Express匯入的名稱空間,如下所示: <%@ Import Namespace="System.Data" %> <%@ Import NameSpace="System.Data.SqlClient" %> • 在匯入名稱空間後,就可以使用ADO.NET物件來存取資料庫的記錄資料。

  23. 8-3-1 開啟DataReader物件-步驟一:建立Connection物件(建立) • 在ASP.NET網頁建立Connection物件,首先宣告SqlConnection物件變數objCon,如下所示: SqlConnection objCon; objCon = new SqlConnection(strDbCon); • 上述程式碼使用new運算子和建構子來建立名為objCon的SqlConnection物件。

  24. 8-3-1 開啟DataReader物件-步驟一:建立Connection物件(連接字串) • strDbCon變數值是SQL Server 2005 Express的連接字串,如下所示: strDbCon = "Data Source=.\\SQLEXPRESS;" + "AttachDbFilename=" + Server.MapPath("App_Data\\Products.mdf") + ";Integrated Security=True;" + "TrustServerCertificate=False;" + "User Instance=True;Context Connection=False";

  25. 8-3-1 開啟DataReader物件-步驟二:開啟資料庫連接 • 在建立Connection物件後,就可以使用Open()方法開啟資料庫連接,如下所示; objCon.Open(); • 上述程式碼使用名為objCon的Connection物件來開啟資料庫連接。

  26. 8-3-1 開啟DataReader物件-步驟三:建立Command物件 • 在建立和開啟Connection物件後,就可以使用SQL指令和Connection物件作為參數來建立Command物件,如下所示: strSQL = "SELECT * FROM Books"; objCmd = new SqlCommand(strSQL, objCon); • 上述程式碼使用new運算子和建構子來建立Command物件,第2個參數是開啟的資料庫連接物件,表示向此資料來源執行第1個參數的SQL指令敘述。

  27. 8-3-1 開啟DataReader物件-步驟四:執行SQL指令敘述查詢資料表 • 接著使用Command物件的ExecuteReader()方法執行SQL查詢指令,如下所示: objDR = objCmd.ExecuteReader(); • 上述程式碼取得DataReader物件objDR,讀者可以想像它是開啟一個資料庫的檔案串流。

  28. 8-3-1 開啟DataReader物件-步驟五:讀取記錄資料 • DataReader物件是一種資料串流,在ASP.NET網頁可以使用objDR.HasRows屬性判斷是否有記錄資料,如果有為true,然後就可以使用while迴圈讀取資料表的記錄資料,如下所示: while (objDR.Read()) { lblOutput.Text += objDR["BookID"] + " - "; lblOutput.Text += objDR["BookTitle"] + " - "; lblOutput.Text += objDR["BookPrice"] + "<br/>"; }

  29. 8-3-1 開啟DataReader物件-步驟六:關閉DataReader和資料庫連接 • 最後可以關閉DataReader串流物件和資料庫連接,如下所示: objDR.Close(); objCon.Close(); • 上述程式碼使用Close()方法關閉DataReader和Connection物件。

  30. 範例 • protected void Page_Load(object sender, EventArgs e) • { • SqlConnection objCon; • SqlCommand objCmd; • SqlDataReader objDR; • string strDbCon, strSQL; • // 資料庫連接字串 • strDbCon = "Data Source=.\\SQLEXPRESS;" + • "AttachDbFilename=" + • Server.MapPath("App_Data\\Products.mdf") + • ";Integrated Security=True;" + • "TrustServerCertificate=False;" + • "User Instance=True;Context Connection=False"; • // 建立Connection物件 • objCon = new SqlConnection(strDbCon); • objCon.Open(); // 開啟資料庫連接 • strSQL = "SELECT * FROM Books"; • // 建立Command物件的SQL指令 • objCmd = new SqlCommand(strSQL, objCon); • // 取得DataReader物件 • objDR = objCmd.ExecuteReader(); • if (objDR.HasRows) • { • lblOutput.Text = "資料表記錄: <hr/>"; • // 顯示資料表的記錄 • while (objDR.Read()) • { • lblOutput.Text += objDR["BookID"] + " - "; • lblOutput.Text += objDR["BookTitle"] + " - "; • lblOutput.Text += objDR["BookPrice"] + "<br/>"; • } • } • else • { • lblOutput.Text = "資料表中沒有記錄資料!"; • } • objDR.Close(); // 關閉DataReader • objCon.Close(); // 關閉資料庫連接 • }

  31. 8-3-1 開啟DataReader物件-範例網站 ASP.NET網站:Ch8-3-1 • 在ASP.NET網頁取得Books資料表的DataReader物件後,以清單方式來顯示資料表的記錄資料,不過,只有顯示書號、書名和書價欄位,如下圖所示:

  32. 8-3-2 Command物件的Execute()方法-指令種類 • 在ADO.NET元件的Command物件提供三種Execute()方法來執行SQL指令敘述,如下表所示:

  33. 8-3-2 Command物件的Execute()方法-ExecuteScalar()方法 • ExecuteReader()方法在第8-3-1節已經說明過,ExecuteNonQuery()方法可以執行SQL語言的資料庫操作,詳見第9-4-3節的說明。在這一節筆者將說明ExecuteScalar()方法,可以取得資料表指定記錄的單一欄位值,如下所示: lblOutput.Text = "查詢結果: " + objCmd.ExecuteScalar(); • 上述程式碼執行Command物件objCmd的SQL指令,如果傳回值不只一個。例如:SQL指令如果是查詢多筆記錄,取得的是第1筆記錄的第1個欄位。

  34. 8-3-2 Command物件的Execute()方法-ExecuteScalar()方法 ASP.NET網站:Ch8-3-2 • 在ASP.NET網頁使用Command物件的ExecuteScalar()方法執行SQL指令敘述,在TextBox控制項輸入SQL指令,按【查詢】鈕,就可以取得單一欄位值,如下圖所示:

  35. 8-4 ADO.NET的DataSet物件 • 8-4-1 DataSet物件的基礎 • 8-4-2 將記錄填入DataSet物件

  36. 8-4-1 DataSet物件的基礎-說明 • DataSet物件是由DataTable物件所組成,DataSet物件相當於是資料庫,DataTable物件就是資料表。 • DataTable物件是以表格來儲存資料表的記錄資料,可以使用列或欄來處理,即使用DataRowCollection和DataColumnCollection集合物件。在集合物件的每一個DataRow物件是一列,也就是一筆記錄,每一個DataColumn物件是一欄。

  37. 8-4-1 DataSet物件的基礎-圖例

  38. 8-4-2 將記錄填入DataSet物件-步驟一:建立與開啟Connection物件 • 首先使用Connection物件建立資料連接物件objCon後,使用Open()方法開啟資料來源,如下所示: objCon = new SqlConnection(strDbCon); objCon.Open();

  39. 8-4-2 將記錄填入DataSet物件-步驟二:建立DataAdapter物件 • DataSet物件是使用DataAdapter物件來取得記錄資料,此物件是DataSet與Connection物件資料來源間的橋樑,可以呼叫方法將記錄資料填入DataSet物件,如下所示: strSQL = "SELECT * FROM Books"; objDataAdapter = new SqlDataAdapter( strSQL, objCon); • 上述程式碼建立DataAdapter物件,第1個參數是SQL查詢指令來取得記錄資料,第2個參數是開啟的Connection物件。

  40. 8-4-2 將記錄填入DataSet物件-步驟三:建立DataSet物件填入記錄資料 • 接著建立DataSet物件,將取得的記錄資料填入DataSet物件,如下所示: DataSet objDataSet = new DataSet(); objDataAdapter.Fill(objDataSet, "Books"); • 上述程式碼建立DataSet物件後,使用DataAdpater物件的Fill()方法將SQL指令的查詢結果填入第1個參數的的DataSet物件。更正確的說,就是新增DataTable物件,第2個參數是DataTable物件的別名。

  41. 8-4-2 將記錄填入DataSet物件-步驟四:顯示DataTable物件的所有記錄 • 使用foreach迴圈取出DataTable物件Rows屬性的每一個DataRow物件,也就是每一筆記錄,如下所示: foreach (DataRow objRow in objDataSet.Tables["Books"].Rows) { lblOutput.Text += objRow["BookID"] + " - "; lblOutput.Text += objRow["BookTitle"] + " - "; lblOutput.Text += objRow["BookAuthor"] + " - "; lblOutput.Text += objRow["BookPrice"] + "<br/>"; }

  42. 8-4-2 將記錄填入DataSet物件-步驟五:關閉資料庫連接 • 最後使用Close()方法關閉資料庫連接,此例的Connection物件為objCon,如下所示: objCon.Close();

  43. 8-4-2 將記錄填入DataSet物件-範例網站 ASP.NET網站:Ch8-4-2 • 在ASP.NET網頁取得Book資料表的DataSet物件後,使用清單方式來顯示資料表的記錄資料,如下圖所示:

  44. 8-5 資料繫結的基礎 • 8-5-1 資料繫結簡介 • 8-5-2 建立ListBox控制項的簡單資料繫結

  45. 8-5-1 資料繫結簡介-說明 • ASP.NET控制項支援資料繫結技術,能夠將不同資料來源的集合物件、陣列、DataReader或DataView(可以視為從DataSet物件建立的檢視表)等資料整合到ASP.NET控制項。 • 換句話說,資料來源的資料會自動填入控制項,並且使用預設方式顯示資料,當然,我們可以設定控制項屬性來變更其顯示外觀。在ASP.NET使用的資料繫結技術分為兩種:簡單資料繫結和宣告式的資料繫結。

  46. 8-5-1 資料繫結簡介-簡單資料繫結 • 在ASP.NET網頁使用簡單資料繫結(Simple Databinding)的控制項擁有DataSource屬性,可以使用實作IEnumerable介面的集合物件作為資料來源,然後呼叫DataBind()方法來建立資料繫結。 • 例如:清單控制項的ListBox、RadioButtonList、CheckBoxList和DropDownList等都支援簡單資料繫結。

  47. 8-5-1 資料繫結簡介-宣告式的資料繫結 • 宣告式的資料繫結(Declarative Databinding)是一種比較複雜的資料繫結,它是使用控制項的DataSourceID屬性來建立資料繫結。 • 在ASP.NET網頁需要先建立「資料來源控制項」(DataSource Controls)存取資料來源的資料,然後建立「資料邊界控制項」(DataBound Controls)來顯示和維護資料來源的資料。

  48. 8-5-2 建立ListBox控制項的簡單資料繫結-說明 • 簡單資料繫結可以使用集合物件作為資料來源,其最常的應用是建立List清單控制項的項目。 • 換句話說,我們可以使用資料繫結技術來動態顯示清單的項目。

  49. 8-5-2 建立ListBox控制項的簡單資料繫結-建立 • 首先建立ArrayList物件作為資料來源,如下所示: ArrayList names = new ArrayList(); names.Add("陳會安"); names.Add("江小魚"); names.Add("張無忌"); names.Add("陳允傑"); • 接著指定ListBox控制項的DataSource屬性,如下所示: lstNames.DataSource = names; lstNames.DataBind();

  50. 8-5-2 建立ListBox控制項的簡單資料繫結-範例網站 ASP.NET網站:Ch8-5-2 • 在ASP.NET網頁使用簡單資料繫結技術,以ArrayList物件作為資料來源,建立ListBox控制項的項目清單,如下圖所示:

More Related