58
13 13 ADO.NET ADO.NET 第第第第第第第 第第第第第第第 13-1 13-1 網網網網網網網網 網網網網網網網網 13-2 13-2 網網網網網網網 網網網網網網網 13-3 ADO.NET 13-3 ADO.NET DataReader DataReader 網網 網網 13-4 ADO.NET 13-4 ADO.NET DataSet DataSet 網網 網網 13-5 DataSet 13-5 DataSet 網網網網網網網網 網網網網網網網網 13-6 ASP.NET 13-6 ASP.NET 網網網網網網網網 網網網網網網網網

第 13 章 ADO.NET建立網頁資料庫

Embed Size (px)

DESCRIPTION

第 13 章 ADO.NET建立網頁資料庫. 13-1 網頁資料庫的基礎 13-2 建立資料庫連接 13-3 ADO.NET 的 DataReader 物件 13-4 ADO.NET 的 DataSet 物件 13-5 DataSet 物件的資料庫操作 13-6 ASP.NET 控制項與資料繫結. 13-1 網頁資料庫的基礎. 13-1-1 資料庫系統 13-1-2 ASP.NET 與資料庫 13-1-3 ADO.NET 的簡介 13-1-4 如何建立 ASP.NET 網頁資料庫. 13-1-1 資料庫系統 - 說明. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 13 章  ADO.NET建立網頁資料庫

第第 1313 章 章 ADO.NETADO.NET建立網建立網頁資料庫頁資料庫

• 13-1 13-1 網頁資料庫的基礎網頁資料庫的基礎• 13-2 13-2 建立資料庫連接建立資料庫連接• 13-3 ADO.NET13-3 ADO.NET的的 DataReaderDataReader 物件物件• 13-4 ADO.NET13-4 ADO.NET的的 DataSetDataSet 物件物件• 13-5 DataSet13-5 DataSet 物件的資料庫操作物件的資料庫操作• 13-6 ASP.NET13-6 ASP.NET 控制項與資料繫結控制項與資料繫結

Page 2: 第 13 章  ADO.NET建立網頁資料庫

13-1 13-1 網頁資料庫的基礎網頁資料庫的基礎

• 13-1-1 13-1-1 資料庫系統資料庫系統• 13-1-2 ASP.NET13-1-2 ASP.NET 與資料庫與資料庫• 13-1-3 ADO.NET13-1-3 ADO.NET 的簡介的簡介• 13-1-4 13-1-4 如何建立如何建立 ASP.NETASP.NET

網頁資料庫網頁資料庫

Page 3: 第 13 章  ADO.NET建立網頁資料庫

13-1-1 13-1-1 資料庫系統資料庫系統 -- 說明說明• 資料庫系統本身就是一套應用程式,目前的主流資料庫系統本身就是一套應用程式,目前的主流

是關聯式資料庫系統,例如:是關聯式資料庫系統,例如:AccessAccess、、MySQLMySQL、、 SQL ServerSQL Server和和 OracleOracle等。資料庫使用者可以使用等。資料庫使用者可以使用 SQLSQL 資料庫語言來儲資料庫語言來儲存和管理所需資料,事實上,只有複雜應用系統,存和管理所需資料,事實上,只有複雜應用系統,程式開發者才會替客戶量身定作所需的資料庫系程式開發者才會替客戶量身定作所需的資料庫系統。統。

• 開發資料庫系統主要是在建立資料庫使用介面和開發資料庫系統主要是在建立資料庫使用介面和決策架構,針對不同使用者需求來存取資料庫的決策架構,針對不同使用者需求來存取資料庫的記錄資料,至於資料庫系統本身,只負責管理和記錄資料,至於資料庫系統本身,只負責管理和存取資料,作為應用系統的資料來源。存取資料,作為應用系統的資料來源。

Page 4: 第 13 章  ADO.NET建立網頁資料庫

13-1-1 13-1-1 資料庫系統資料庫系統 -- 資料庫的組資料庫的組成:資料表、記錄與欄位成:資料表、記錄與欄位 11

• 資料庫主要的目的是儲存資料,資料是儲存在資資料庫主要的目的是儲存資料,資料是儲存在資料庫的「資料表」(料庫的「資料表」( TablesTables ),每一個資料表),每一個資料表使用「欄位」(使用「欄位」( FieldsFields )分類成很多群組,每一)分類成很多群組,每一個群組是一筆「記錄」(個群組是一筆「記錄」( RecordsRecords ),例如:通),例如:通訊錄資料表的記錄,如下表所示:訊錄資料表的記錄,如下表所示:

Page 5: 第 13 章  ADO.NET建立網頁資料庫

13-1-1 13-1-1 資料庫系統資料庫系統 -- 資料庫的組資料庫的組成:資料表、記錄與欄位成:資料表、記錄與欄位 22

• 資料表可以使用「索引」(資料表可以使用「索引」( IndexIndex )將資)將資料系統化的整理,以便在大量資料中快速料系統化的整理,以便在大量資料中快速找到所需的資料或進行排序。例如:在通找到所需的資料或進行排序。例如:在通訊錄資料表使用編號欄位建立主索引鍵,訊錄資料表使用編號欄位建立主索引鍵,或稱為「主鍵」(或稱為「主鍵」( Primary KeyPrimary Key ),如此),如此就可以透過編號來加速資料表記錄的搜尋就可以透過編號來加速資料表記錄的搜尋和排序。和排序。

Page 6: 第 13 章  ADO.NET建立網頁資料庫

13-1-2 ASP.NET13-1-2 ASP.NET 與資料庫與資料庫• WebWeb 舞台的資料庫本質並沒有轉變,其主要的功舞台的資料庫本質並沒有轉變,其主要的功

能仍然是儲存和查詢資料,只是資料庫使用介面能仍然是儲存和查詢資料,只是資料庫使用介面成為成為 HTMLHTML 文件或文件或 WebWeb 表單。表單。

• 網頁資料庫是一種結合前端網頁資料庫是一種結合前端 HTMLHTML 文件或文件或 WebWeb表單的使用介面,配合後端表單的使用介面,配合後端 WebWeb 伺服器和資料伺服器和資料庫系統的一種應用程式架構,如下圖所示:庫系統的一種應用程式架構,如下圖所示:

Page 7: 第 13 章  ADO.NET建立網頁資料庫

13-1-3 ADO.NET13-1-3 ADO.NET 的簡介的簡介• ADO.NETADO.NET 是微軟新一代技術,它是「是微軟新一代技術,它是「 ADOADO 」」(( ActiveX Data ObjectActiveX Data Object )元件的後繼者,目前)元件的後繼者,目前版本是版本是 2.02.0 版。其主要目的是在版。其主要目的是在 .NET .NET FrameworkFramework 平台存取資料,簡單的平台存取資料,簡單的說,說, ASP.NETASP.NET 是使用是使用 ADO.NETADO.NET 來進行資料庫來進行資料庫存取。存取。

• ADO.NETADO.NET 的目的是提供一致的物件模型,可以存的目的是提供一致的物件模型,可以存取和編輯資料來源的資料,換句話說,就是提供一取和編輯資料來源的資料,換句話說,就是提供一致的資料處理方式,至於資料來源並不限資料庫,致的資料處理方式,至於資料來源並不限資料庫,幾乎任何資料來源都可以。以幾乎任何資料來源都可以。以 ASP.NETASP.NET 來來說,說, ADO.NETADO.NET 的主要功能是存取資料庫,所以的主要功能是存取資料庫,所以ASP.NETASP.NET 使用使用 ADO.NETADO.NET ,一般來說都是為了,一般來說都是為了建立網頁資料庫。建立網頁資料庫。

Page 8: 第 13 章  ADO.NET建立網頁資料庫

13-1-4 13-1-4 如何建立如何建立 ASP.NETASP.NET 網頁網頁資料庫資料庫

• ASP.NETASP.NET 配合配合 ADO.NETADO.NET 建立網頁資料建立網頁資料庫的步驟,如下所示:庫的步驟,如下所示:– 建立資料庫:建立資料庫:建立建立 SQL Server 2005 SQL Server 2005

ExpressExpress或或 AccessAccess 資料庫。資料庫。– 建立資料庫連接:建立資料庫連接:使用使用 ADO.NETADO.NET的的 OLE OLE

DBDB 提供者來建立資料庫連接。提供者來建立資料庫連接。– 存取資料庫:存取資料庫:使用使用 ADO.NETADO.NET的的

DataReaderDataReader和和 DataSetDataSet 來存取資料庫的記來存取資料庫的記錄資料。錄資料。

– 執行網頁資料庫:執行網頁資料庫:請啟動瀏覽程式執行請啟動瀏覽程式執行ASP.NETASP.NET 程式,以便測試網頁資料庫的執行程式,以便測試網頁資料庫的執行結果。結果。

Page 9: 第 13 章  ADO.NET建立網頁資料庫

13-2 13-2 建立資料庫連接建立資料庫連接• 13-2-1 ADO.NET13-2-1 ADO.NET 的名稱空間的名稱空間• 13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件

Page 10: 第 13 章  ADO.NET建立網頁資料庫

13-2-1 ADO.NET13-2-1 ADO.NET 的名稱空的名稱空間間

• ADO.NETADO.NET 類別分屬數個名稱空間,可以用來存類別分屬數個名稱空間,可以用來存取資料庫的資料。換句話說,取資料庫的資料。換句話說, ASP.NETASP.NET 程式需程式需要匯入指定的名稱空間,才能使用要匯入指定的名稱空間,才能使用 ADO.NETADO.NET 類類別來存取資料庫。主要的名稱空間說明,如下表別來存取資料庫。主要的名稱空間說明,如下表所示:所示:名稱空間 說明System.Data 提供 DataSet、DataTable、DataRow、DataColumn和

DataRelation類別,可以將資料庫的記錄資料儲存到記憶體

System.Data.OleDb OLE DB的.NET提供者,提供 OleDbCommand、OleDbConnection、OleDbDataReader類別來處理 OLE DB

資料來源的資料庫System.Data.SqlClient SQL的.NET提供者,提供 SqlCommand、SqlConnection、

SqlDataReader類別來處理微軟Microsoft SQL Server 7.0

以上版本的資料庫

Page 11: 第 13 章  ADO.NET建立網頁資料庫

13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件 --說明說明

• ConnectionConnection 物件可以建立物件可以建立 ASP.NETASP.NET 程程式與存取資料來源的連結和初始資料庫。式與存取資料來源的連結和初始資料庫。

• ConnectionConnection 物件有兩種:物件有兩種:– OLE DBOLE DB 是使用是使用 OleDbConnectionOleDbConnection 物件。物件。– SQL ServerSQL Server 是使用是使用 SqlConnectionSqlConnection 物件。物件。

Page 12: 第 13 章  ADO.NET建立網頁資料庫

13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件 --匯入名稱空間匯入名稱空間

• 在在 ASP.NETASP.NET 程式需要匯入所需名稱空間,才能程式需要匯入所需名稱空間,才能使用使用 ADO.NETADO.NET 的類別和物件,如下所示:的類別和物件,如下所示:

<%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data" %>

<%@ Import <%@ Import

NameSpace="System.Data.OleDb" %>NameSpace="System.Data.OleDb" %>

• SQL ServerSQL Server與與 SQL Server ExpressSQL Server Express 匯入的匯入的名稱空間,如下所示:名稱空間,如下所示:

<%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data" %>

<%@ Import <%@ Import

NameSpace="System.Data.SqlClient" %>NameSpace="System.Data.SqlClient" %>

Page 13: 第 13 章  ADO.NET建立網頁資料庫

13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件 --步驟一:建立步驟一:建立 ConnectionConnection 物件物件 11

• 在在 ASP.NETASP.NET 程式建立程式建立 ConnectionConnection 物件,就是宣告和物件,就是宣告和建立建立 OleDbConnectionOleDbConnection 物件變數物件變數 objConobjCon ,如下所示:,如下所示:

OleDbConnection objCon = OleDbConnection objCon =

new OleDbConnection(strDbCon);new OleDbConnection(strDbCon);• 程式碼使用程式碼使用 newnew 運算子建立名為運算子建立名為 objConobjCon的的

OleDbConnectionOleDbConnection 物件,物件, strDbConstrDbCon 變數是資料來源變數是資料來源字串,如下所示:字串,如下所示:

string string strDbCon="Provider=Microsoft.Jet.OLEDB.4.0;“strDbCon="Provider=Microsoft.Jet.OLEDB.4.0;“

+ "Data Source=" + + "Data Source=" + Server.MapPath("iPods.mdb");Server.MapPath("iPods.mdb");

Page 14: 第 13 章  ADO.NET建立網頁資料庫

13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件 --步驟一:建立步驟一:建立 ConnectionConnection 物件物件 22

• 連接連接 SQL ServerSQL Server與與 SQL Server ExpressSQL Server Express 資料庫的資料庫的SqlConnectionSqlConnection 物件,如下所示:物件,如下所示:

strDbCon = strDbCon =

"server=localhost;database=iPods;uid=sa;pwd=12"server=localhost;database=iPods;uid=sa;pwd=1234";34";

SqlConnection objCon = new SqlConnection objCon = new SqlConnection(strDbCon);SqlConnection(strDbCon);

• 另一種寫法,如下所示:另一種寫法,如下所示:strDbCon="user id=sa;password=1234; ;" + strDbCon="user id=sa;password=1234; ;" +

"initial catalog=iPods;" + "data "initial catalog=iPods;" + "data source=localhost";source=localhost";

Page 15: 第 13 章  ADO.NET建立網頁資料庫

13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件 --步驟一:建立步驟一:建立 ConnectionConnection 物件物件 33

• 至於至於 SQL Server 2005 ExpressSQL Server 2005 Express 的連接字串,的連接字串,如下所示:如下所示:

strDbCon="Data Source=.\strDbCon="Data Source=.\SQLEXPRESS;AttachDbFilename=" +SQLEXPRESS;AttachDbFilename=" +

Server.MapPath("iPods.mdf") +Server.MapPath("iPods.mdf") + ";Integrated Security=True;" +";Integrated Security=True;" + "TrustServerCertificate=False;" +"TrustServerCertificate=False;" + "User Instance=True;Context "User Instance=True;Context

Connection=False";Connection=False";• 上述連接字串的上述連接字串的 Data SourceData Source 屬性是屬性是 .\.\

SQLEXPRESSSQLEXPRESS,, AttachDbFilenameAttachDbFilename 屬性是資屬性是資料庫名稱,副檔名是料庫名稱,副檔名是 .mdf.mdf 。。

Page 16: 第 13 章  ADO.NET建立網頁資料庫

13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件 --步驟二:開啟資料庫連接步驟二:開啟資料庫連接

• 在建立好在建立好 ConnectionConnection 物件後,就可以使物件後,就可以使用用 Open()Open() 方法開啟資料庫連接,如下所方法開啟資料庫連接,如下所示;示;objCon.Open();objCon.Open();

• 上述程式碼使用名為上述程式碼使用名為 objConobjCon的的ConnectionConnection 物件來開啟資料庫連接。物件來開啟資料庫連接。

Page 17: 第 13 章  ADO.NET建立網頁資料庫

13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件 --步驟三:資料庫操作與查詢步驟三:資料庫操作與查詢

• 在建立好在建立好 ConnectionConnection 資料庫連接物件後,就可以資料庫連接物件後,就可以使用使用 StateState 屬性檢查目前資料庫的連接狀態,如下屬性檢查目前資料庫的連接狀態,如下所示:所示:

if (objCon.State == ConnectionState.Open) {if (objCon.State == ConnectionState.Open) {

Response.Write("<b>Response.Write("<b> 目前為開啟狀態目前為開啟狀態 </b><br/>");</b><br/>");

}}

else {else {

Response.Write("<b>Response.Write("<b> 目前為關閉狀態目前為關閉狀態 </b><br/>");</b><br/>");

}}

Page 18: 第 13 章  ADO.NET建立網頁資料庫

13-2-2 13-2-2 建立建立 ConnectionConnection 物件物件 --步驟四:關閉資料庫連接步驟四:關閉資料庫連接

• 在完成資料庫操作後,請使用在完成資料庫操作後,請使用ConnectionConnection 物件的物件的 Close()Close() 方法關閉資方法關閉資料庫連接。以料庫連接。以 ConnectionConnection 物件物件 objConobjCon為例,如下所示:為例,如下所示:objCon.Close();objCon.Close();

Page 19: 第 13 章  ADO.NET建立網頁資料庫

13-3 ADO.NET13-3 ADO.NET的的DataReaderDataReader 物件物件

• 13-3-1 Command13-3-1 Command與與 DataReaderDataReader 物件物件• 13-3-2 13-3-2 開啟開啟 DataReaderDataReader 物件物件• 13-3-3 13-3-3 取得記錄的欄位名稱與值取得記錄的欄位名稱與值• 13-3-4 13-3-4 使用表格顯示資料表使用表格顯示資料表

Page 20: 第 13 章  ADO.NET建立網頁資料庫

13-3 ADO.NET13-3 ADO.NET的的DataReaderDataReader 物件物件

• ASP.NETASP.NET 網頁資料庫就是使用網頁資料庫就是使用ADO.NETADO.NET的的 DataReaderDataReader或或 DataSetDataSet物件來取得記錄資料,在這一節說明物件來取得記錄資料,在這一節說明CommandCommand 物件執行物件執行 SQLSQL 指令來取得指令來取得DataReaderDataReader 物件的資料表記錄,下一節物件的資料表記錄,下一節說明說明 DataSetDataSet 物件。物件。

• 因為第因為第 1414 章才詳細說明章才詳細說明 SQLSQL 查詢指令,查詢指令,在本章在本章 ASP.NETASP.NET 程式範例都是使用同一程式範例都是使用同一個個 SQLSQL 查詢指令,如下所示:查詢指令,如下所示:SELECT * FROM iPodSELECT * FROM iPod

Page 21: 第 13 章  ADO.NET建立網頁資料庫

13-3-1 Command13-3-1 Command與與DataReaderDataReader 物件物件 -Command-Command

物件物件• CommandCommand 物件可以針對資料來源執行指物件可以針對資料來源執行指令,以資料庫的資料來源而言,就是執行令,以資料庫的資料來源而言,就是執行SQLSQL 指令,我們可以使用指令,我們可以使用 CommandCommand 物物件送出件送出 SQLSQL 指令來新增、刪除、更新和查指令來新增、刪除、更新和查詢資料表的記錄。詢資料表的記錄。

• ASP.NETASP.NET 程式需要先使用程式需要先使用 ConnectionConnection物件建立和開啟資料庫連接後,才能使用物件建立和開啟資料庫連接後,才能使用CommandCommand 物件執行物件執行 SQLSQL 指指令。令。 CommandCommand 物件也分為兩種:物件也分為兩種: OLE OLE DBDB 是使用是使用 OleDbCommandOleDbCommand 物物件,件, SQL ServerSQL Server 是使用是使用 SqlCommandSqlCommand物件。物件。

Page 22: 第 13 章  ADO.NET建立網頁資料庫

13-3-1 Command13-3-1 Command與與DataReaderDataReader 物件物件 --DataReaderDataReader 物件物件

• DataReaderDataReader 物件是執行物件是執行 SQLSQL 指令傳回的指令傳回的記錄資料,這是「唯讀」(記錄資料,這是「唯讀」( Read-OnlyRead-Only ))和「只能向前」(和「只能向前」( Forward-OnlyForward-Only )的串)的串流資料。流資料。 ASP.NETASP.NET 程式可以使用類似讀程式可以使用類似讀取文字檔案串流的方式來取得資料表記錄,取文字檔案串流的方式來取得資料表記錄,每次只會從資料來源讀取一列資料(即一每次只會從資料來源讀取一列資料(即一筆)儲存到記憶體,所以讀取資料的執行筆)儲存到記憶體,所以讀取資料的執行效率非常高。效率非常高。

• DataReaderDataReader 物件也分為兩種:物件也分為兩種: OLE DBOLE DB是使用是使用 OleDbDataReaderOleDbDataReader 物件,物件, SQL SQL ServerServer 是使用是使用 SqlDataReaderSqlDataReader 物件。物件。

Page 23: 第 13 章  ADO.NET建立網頁資料庫

13-3-2 13-3-2 開啟開啟 DataReaderDataReader 物物件件 --

步驟一:開啟步驟一:開啟 ConnectionConnection 物件的資料庫物件的資料庫連接連接• ASP.NETASP.NET 程式建立程式建立 DataReaderDataReader 物件需要物件需要

使用使用 ConnectionConnection 物件開啟資料庫連接,如物件開啟資料庫連接,如下所示:下所示:OleDbConnection objCon = OleDbConnection objCon =

new new OleDbConnection(strDbCon);OleDbConnection(strDbCon);

objCon.Open();objCon.Open();• 上述程式碼建立上述程式碼建立 objConobjCon的的 ConnectionConnection 物物

件後,使用件後,使用 Open()Open() 方法開啟資料庫連接。方法開啟資料庫連接。

Page 24: 第 13 章  ADO.NET建立網頁資料庫

13-3-2 13-3-2 開啟開啟 DataReaderDataReader 物物件件 --

步驟二:建立步驟二:建立 CommandCommand 物件物件• 在建立好在建立好 ConnectionConnection 物件後,就可以使用物件後,就可以使用 SQLSQL

指令和指令和 ConnectionConnection 物件作為參數來建立物件作為參數來建立CommandCommand 物件,如下所示:物件,如下所示:

string strSQL = "SELECT * FROM iPod";string strSQL = "SELECT * FROM iPod";

OleDbCommand objCmd = OleDbCommand objCmd =

new OleDbCommand(strSQL, objCon);new OleDbCommand(strSQL, objCon);• 上述程式碼使用上述程式碼使用 newnew 運算子建立運算子建立 CommandCommand 物物

件,第件,第 22 個參數是開啟的個參數是開啟的 ConnectionConnection 物件,表物件,表示向此資料來源執行第示向此資料來源執行第 11 個參數的個參數的 SQLSQL 指令。指令。

Page 25: 第 13 章  ADO.NET建立網頁資料庫

13-3-2 13-3-2 開啟開啟 DataReaderDataReader 物物件件 --

步驟三:執行步驟三:執行 SQLSQL 指令查詢資料表指令查詢資料表• 接著使用接著使用 CommandCommand 物件的物件的

ExecuteReader()ExecuteReader() 方法執行方法執行 SQLSQL 查詢指令,查詢指令,如下所示:如下所示:

OleDbDataReader objDataReader = OleDbDataReader objDataReader =

objCmd.ExecuteReader();objCmd.ExecuteReader();• 上述程式碼取得上述程式碼取得 DataReaderDataReader 物件物件

objDataReaderobjDataReader ,讀者可以想像它是開啟,讀者可以想像它是開啟一個資料庫的檔案串流。一個資料庫的檔案串流。

Page 26: 第 13 章  ADO.NET建立網頁資料庫

13-3-2 13-3-2 開啟開啟 DataReaderDataReader 物物件件 --

步驟四:檢查狀態或讀取記錄資料步驟四:檢查狀態或讀取記錄資料• DataReaderDataReader 物件是一種資料串流,可以物件是一種資料串流,可以

使用使用 IsClosedIsClosed 屬性檢查屬性檢查 DataReaderDataReader 串串流是否已經開啟,如下所示:流是否已經開啟,如下所示:

if (objDataReader.IsClosed == false) {if (objDataReader.IsClosed == false) { Response.Write("<b>DataReaderResponse.Write("<b>DataReader 物件為開啟狀態物件為開啟狀態

</b><br/>");</b><br/>");}}else {else { Response.Write("<b>DataReaderResponse.Write("<b>DataReader 物件為關閉狀態物件為關閉狀態

</b><br/>");</b><br/>");}}

Page 27: 第 13 章  ADO.NET建立網頁資料庫

13-3-2 13-3-2 開啟開啟 DataReaderDataReader 物物件件 --

步驟五:關閉步驟五:關閉 DataReaderDataReader 和資料庫連接和資料庫連接• 最後可以關閉最後可以關閉 DataReaderDataReader 串流物件和資串流物件和資

料庫連接,如下所示:料庫連接,如下所示:objDataReader.Close();objDataReader.Close();

objCon.Close();objCon.Close();

• 上述程式碼使用上述程式碼使用 Close()Close() 方法關閉方法關閉DataReaderDataReader和和 ConnectionConnection 物件。物件。

Page 28: 第 13 章  ADO.NET建立網頁資料庫

13-3-3 13-3-3 取得記錄的欄位名稱與值取得記錄的欄位名稱與值 --說明說明

• 當當 ASP.NETASP.NET 程式使用程式使用 CommandCommand 物件的物件的ExecuteReader()ExecuteReader() 方法取得方法取得 DataReaderDataReader 物件物件後,我們可以將後,我們可以將 DataReaderDataReader 物件視為一種類似物件視為一種類似檔案的記錄串流,在檔案中的每一列是一筆記錄,檔案的記錄串流,在檔案中的每一列是一筆記錄,一次讀取一筆記錄,如下圖所示:一次讀取一筆記錄,如下圖所示:

Page 29: 第 13 章  ADO.NET建立網頁資料庫

13-3-3 13-3-3 取得記錄的欄位名稱與值取得記錄的欄位名稱與值 --讀取記錄讀取記錄

• 在開啟在開啟 DataReaderDataReader 物件後,記錄指標是物件後,記錄指標是指向第指向第 11 筆記錄之前,程式可以使用筆記錄之前,程式可以使用Read()Read() 方法讀取下一筆記錄,如下所示:方法讀取下一筆記錄,如下所示:objDataReader.Read();objDataReader.Read();

• 上述程式碼執行上述程式碼執行 Read()Read() 方法,換句話說,方法,換句話說,目前記錄指標就會移到下一筆,指向第目前記錄指標就會移到下一筆,指向第 11筆記錄,即筆記錄,即MA146LLMA146LL 。。

Page 30: 第 13 章  ADO.NET建立網頁資料庫

13-3-3 13-3-3 取得記錄的欄位名稱與值取得記錄的欄位名稱與值 --相關方法相關方法

• 現在我們可以使用欄位定義資料的原始順序來取現在我們可以使用欄位定義資料的原始順序來取得欄位值、檢查欄位值是否存在或欄位的資料類得欄位值、檢查欄位值是否存在或欄位的資料類型。其相關方法如下表所示:型。其相關方法如下表所示:方法 說明

IsDBNull(index) 取得參數原始順序的欄位值是否為空值,即沒有欄位值,如果是,傳回 true,否則為 false

GetName(index) 取得參數原始順序的欄位名稱GetValue(index) 取得參數原始順序的欄位值

GetFieldType(index) 取得欄位的資料類型,可以使用 ToString()方法轉換成字串,傳回值是.NET Framework資料類型

Page 31: 第 13 章  ADO.NET建立網頁資料庫

13-3-4 13-3-4 使用表格顯示資料表使用表格顯示資料表 --說明說明

• ASP.NETASP.NET 程式可以使用表格,一列代表一程式可以使用表格,一列代表一筆記錄,每一欄為一個欄位來顯示資料表筆記錄,每一欄為一個欄位來顯示資料表的記錄資料,程式是使用的記錄資料,程式是使用 HTML/XHTMLHTML/XHTML表格標籤來顯示資料表。表格標籤來顯示資料表。

Page 32: 第 13 章  ADO.NET建立網頁資料庫

13-3-4 13-3-4 使用表格顯示資料表使用表格顯示資料表 --讀取讀取

• DataReaderDataReader 物件如同串流物件,物件如同串流物件, ASP.NETASP.NET 程式可以使程式可以使用用whilewhile迴圈來讀取資料表的記錄,如下所示:迴圈來讀取資料表的記錄,如下所示:

while (objDR.Read()) {while (objDR.Read()) { Response.Write("<tr>");Response.Write("<tr>"); Response.Write("<td>"+ objDR["ModelNo"] +"</td>");Response.Write("<td>"+ objDR["ModelNo"] +"</td>"); Response.Write("<td>"+ objDR["Name"] + "</td>");Response.Write("<td>"+ objDR["Name"] + "</td>"); Response.Write("<td>"+ objDR["Storage"] +"</td>");Response.Write("<td>"+ objDR["Storage"] +"</td>"); Response.Write("<td>"+ objDR["Price"] + "</td>");Response.Write("<td>"+ objDR["Price"] + "</td>"); Response.Write("<td>"+ objDR["StockDate"] + "</td>");Response.Write("<td>"+ objDR["StockDate"] + "</td>"); Response.Write("</tr>");Response.Write("</tr>");}}

Page 33: 第 13 章  ADO.NET建立網頁資料庫

13-3-4 13-3-4 使用表格顯示資料表使用表格顯示資料表 -- 取取得欄位得欄位

• DataReaderDataReader 物件是一個集合物件,可以使用物件是一個集合物件,可以使用欄位名稱或欄位順序來取得欄位值,如下所示:欄位名稱或欄位順序來取得欄位值,如下所示:

Response.Write("<td>"+ objDR["Name"] + Response.Write("<td>"+ objDR["Name"] + "</td>");"</td>");

Response.Write("<td>" + objDR[1] + "</td>");Response.Write("<td>" + objDR[1] + "</td>");

• 程式碼的字串程式碼的字串 NameName 是欄位名稱,數值是欄位名稱,數值 11 是是欄位欄位 NameName 的原始順序,取得資料的型態是的原始順序,取得資料的型態是資料庫欄位的資料類型,以此例為資料庫欄位的資料類型,以此例為 stringstring 字字串,如果是串,如果是 PricePrice 欄位就是欄位就是 decimaldecimal 資料型資料型態。態。

Page 34: 第 13 章  ADO.NET建立網頁資料庫

SQL SQL 範例範例• <%@ Page Language="C#" %><%@ Page Language="C#" %>• <%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data" %>• <%@ Import NameSpace="System.Data.SqlClient" %><%@ Import NameSpace="System.Data.SqlClient" %>• <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

• <script runat="server"><script runat="server">

• protected void Page_Load(object sender, EventArgs e)protected void Page_Load(object sender, EventArgs e)• {{• SqlConnection objCon;SqlConnection objCon;• SqlCommand objCmd;SqlCommand objCmd;• SqlDataReader objDR;SqlDataReader objDR;• string strDbCon, strSQL;string strDbCon, strSQL;• // // 資料庫連接字串資料庫連接字串• strDbCon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database.mdf;Integrated Security=True;User Instance=True";strDbCon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database.mdf;Integrated Security=True;User Instance=True";• // // 建立建立 ConnectionConnection 物件物件• objCon = new SqlConnection(strDbCon);objCon = new SqlConnection(strDbCon);• objCon.Open(); // objCon.Open(); // 開啟資料庫連接開啟資料庫連接• strSQL = "SELECT * FROM Table1";strSQL = "SELECT * FROM Table1";• // // 建立建立 CommandCommand 物件的物件的 SQLSQL 指令指令• objCmd = new SqlCommand(strSQL, objCon);objCmd = new SqlCommand(strSQL, objCon);• // // 取得取得 DataReaderDataReader 物件物件• objDR = objCmd.ExecuteReader();objDR = objCmd.ExecuteReader();• if (objDR.HasRows)if (objDR.HasRows)• {{• Label1.Text = "Label1.Text = " 資料表記錄資料表記錄 : <hr/>";: <hr/>";• // // 顯示資料表的記錄顯示資料表的記錄• while (objDR.Read())while (objDR.Read())• {{• Label1.Text += objDR["no"] + " - ";Label1.Text += objDR["no"] + " - ";• Label1.Text += objDR["name"] + "<br/>";Label1.Text += objDR["name"] + "<br/>";• }}• }}• elseelse• {{• Label1.Text = "Label1.Text = " 資料表中沒有記錄資料資料表中沒有記錄資料 !";!";• }}• objDR.Close(); // objDR.Close(); // 關閉關閉 DataReaderDataReader• }}• </script></script>

Page 35: 第 13 章  ADO.NET建立網頁資料庫

13-4 ADO.NET13-4 ADO.NET的的 DataSetDataSet物件物件

• 13-4-1 DataSet13-4-1 DataSet 物件的基礎物件的基礎• 13-4-2 13-4-2 將記錄填入將記錄填入 DataSetDataSet 物件物件

Page 36: 第 13 章  ADO.NET建立網頁資料庫

13-4-1 DataSet13-4-1 DataSet 物件的基礎物件的基礎 --說明說明

• DataSetDataSet 物件是由物件是由 DataTableDataTable 物件組成物件組成的集合物件,每一個的集合物件,每一個 DataTableDataTable 物件是一物件是一個資料表,換句話說,它就是儲存在記憶個資料表,換句話說,它就是儲存在記憶體中的資料庫,體中的資料庫, DataSetDataSet 物件相當於是資物件相當於是資料庫,料庫, DataTableDataTable 物件就是資料表。物件就是資料表。

• DataTableDataTable 物件是以表格來儲存資料表的物件是以表格來儲存資料表的記錄資料,可以使用列或欄來處理,即使記錄資料,可以使用列或欄來處理,即使用用 DataRowCollectionDataRowCollection和和DataColumnCollectionDataColumnCollection 集合物件。在集集合物件。在集合物件的每一個合物件的每一個 DataRowDataRow 物件是一列,物件是一列,也就是一筆記錄,每一個也就是一筆記錄,每一個 DataColumnDataColumn 物物件是一欄。件是一欄。

Page 37: 第 13 章  ADO.NET建立網頁資料庫

13-4-1 DataSet13-4-1 DataSet 物件的基礎物件的基礎 --圖例圖例

Page 38: 第 13 章  ADO.NET建立網頁資料庫

13-4-2 13-4-2 將記錄填入將記錄填入 DataSetDataSet 物物件件 -- 步驟一步驟一

步驟一:建立與開啟步驟一:建立與開啟 ConnectionConnection 物件物件• 首先建立首先建立 ConnectionConnection 物件物件 objConobjCon 後,後,

使用使用 Open()Open() 方法開啟資料來源,如下所方法開啟資料來源,如下所示:示:

OleDbConnection objCon = OleDbConnection objCon =

new OleDbConnection(strDbCon);new OleDbConnection(strDbCon);

objCon.Open();objCon.Open();

Page 39: 第 13 章  ADO.NET建立網頁資料庫

13-4-2 13-4-2 將記錄填入將記錄填入 DataSetDataSet 物物件件 -- 步驟二步驟二

步驟二:建立步驟二:建立 DataAdapterDataAdapter 物件物件• DataSetDataSet 物件是使用物件是使用 DataAdapterDataAdapter 物件來物件來

取得記錄資料,此物件是取得記錄資料,此物件是 DataSetDataSet與與ConnectionConnection 物件資料來源間的橋樑,可以物件資料來源間的橋樑,可以呼叫方法將記錄資料填入呼叫方法將記錄資料填入 DataSetDataSet 物件,如物件,如下所示:下所示:

string strSQL = "SELECT * FROM iPod";string strSQL = "SELECT * FROM iPod";

OleDbDataAdapter objDataAdapter = OleDbDataAdapter objDataAdapter =

new OleDbDataAdapter(strSQL, new OleDbDataAdapter(strSQL, objCon);objCon);

Page 40: 第 13 章  ADO.NET建立網頁資料庫

13-4-2 13-4-2 將記錄填入將記錄填入 DataSetDataSet 物物件件 -- 步驟三步驟三

步驟三:建立步驟三:建立 DataSetDataSet 物件填入記錄資料物件填入記錄資料• 接著建立接著建立 DataSetDataSet 物件,將取得的記錄資物件,將取得的記錄資

料填入料填入 DataSetDataSet 物件,如下所示:物件,如下所示:DataSet objDataSet = new DataSet();DataSet objDataSet = new DataSet();

objDataAdapter.Fill(objDataSet, "iPod");objDataAdapter.Fill(objDataSet, "iPod");

• 上述程式碼建立上述程式碼建立 DataSetDataSet 物件後,使用物件後,使用DataAdpaterDataAdpater 物件的物件的 Fill()Fill() 方法將方法將 SQLSQL指令的查詢結果填入第指令的查詢結果填入第 11 個參數的的個參數的的DataSetDataSet 物件。物件。

Page 41: 第 13 章  ADO.NET建立網頁資料庫

13-4-2 13-4-2 將記錄填入將記錄填入 DataSetDataSet 物物件件 -- 步驟四步驟四 (1)(1)

步驟四:顯示步驟四:顯示 DataTableDataTable 物件的所有記錄物件的所有記錄• 在使用在使用 DataAdapterDataAdapter 物件將資料表記錄物件將資料表記錄填入填入 DataSetDataSet 物件後,就可以使用別名取物件後,就可以使用別名取得指定的得指定的 DataTableDataTable 物件,如下所示:物件,如下所示:objDataSet.Tables["iPod"]objDataSet.Tables["iPod"]

• 上述程式碼可以取得上述程式碼可以取得 DataTableDataTable 物件的資物件的資料表。料表。

Page 42: 第 13 章  ADO.NET建立網頁資料庫

13-4-2 13-4-2 將記錄填入將記錄填入 DataSetDataSet 物物件件 -- 步驟四步驟四 (2)(2)

• 使用使用 foreach/inforeach/in迴圈就可以取出迴圈就可以取出 DataTableDataTable 物件物件RowsRows 屬性的每一個屬性的每一個 DataRowDataRow 物件,也就是每一筆物件,也就是每一筆記錄,如下所示:記錄,如下所示:

foreach (DataRow objRowforeach (DataRow objRow in objDataSet.Tables["iPod"].Rows) {in objDataSet.Tables["iPod"].Rows) { Response.Write("<tr>");Response.Write("<tr>"); Response.Write("<td>" + objRow["ModelNo"] + Response.Write("<td>" + objRow["ModelNo"] +

"</td>");"</td>"); Response.Write("<td>" + objRow["Name"] + Response.Write("<td>" + objRow["Name"] +

"</td>");"</td>"); Response.Write("<td>" + objRow["Price"] + "</td>");Response.Write("<td>" + objRow["Price"] + "</td>"); Response.Write("<td>" + objRow["Storage"] + Response.Write("<td>" + objRow["Storage"] +

"</td>");"</td>"); Response.Write("</tr>");Response.Write("</tr>");}}

Page 43: 第 13 章  ADO.NET建立網頁資料庫

13-4-2 13-4-2 將記錄填入將記錄填入 DataSetDataSet 物物件件 -- 步驟五步驟五

步驟五:關閉資料庫連接步驟五:關閉資料庫連接• 最後使用最後使用 Close()Close() 方法關閉資料庫連接,方法關閉資料庫連接,

此例的此例的 ConnectionConnection 物件為物件為 objConobjCon ,如,如下所示:下所示:objCon.Close();objCon.Close();

Page 44: 第 13 章  ADO.NET建立網頁資料庫

補充補充protected void Button1_Click(object sender, EventArgs e)protected void Button1_Click(object sender, EventArgs e) {{ string strDbCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + string strDbCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +

Server.MapPath("data1.mdb");Server.MapPath("data1.mdb"); string strSQL = "Select * from table1";string strSQL = "Select * from table1"; OleDbConnection con = new OleDbConnection(strDbCon);OleDbConnection con = new OleDbConnection(strDbCon); con.Open();con.Open(); if (con.State == ConnectionState.Open)if (con.State == ConnectionState.Open) {{ Response.Write("Open");Response.Write("Open");

}} OleDbDataAdapter adapter = new OleDbDataAdapter(strSQL,con);OleDbDataAdapter adapter = new OleDbDataAdapter(strSQL,con); DataSet dataset = new DataSet();DataSet dataset = new DataSet(); adapter.Fill(dataset, "test");adapter.Fill(dataset, "test"); DataRow row = dataset.Tables["test"].Rows[0];DataRow row = dataset.Tables["test"].Rows[0]; Response.Write(row[1]);Response.Write(row[1]); Response.Write(" " + dataset.Tables["test"].Rows.Count.ToString() + " " + Response.Write(" " + dataset.Tables["test"].Rows.Count.ToString() + " " +

dataset.Tables["test"].Columns.Count.ToString());dataset.Tables["test"].Columns.Count.ToString());

}}

Page 45: 第 13 章  ADO.NET建立網頁資料庫

13-5 DataSet13-5 DataSet 物件的資料庫物件的資料庫操作操作

• 13-5-1 CommandBuilder13-5-1 CommandBuilder 物件的使用物件的使用• 13-5-2 13-5-2 插入資料表記錄插入資料表記錄• 13-5-3 13-5-3 更新資料表記錄更新資料表記錄• 13-5-4 13-5-4 刪除資料表記錄刪除資料表記錄

• 注意注意 : : 資料庫一定要有主索引才能更新與資料庫一定要有主索引才能更新與刪除資料刪除資料

Page 46: 第 13 章  ADO.NET建立網頁資料庫

13-5-1 CommandBuilder13-5-1 CommandBuilder 物物件的使用件的使用 -1-1

• CommandBuilderCommandBuilder 物件可以配合物件可以配合 DataSetDataSet 物件,物件,當修改當修改 DataSetDataSet 物件的記錄資料後,自動建立資物件的記錄資料後,自動建立資料表更新所需料表更新所需 CommandCommand 物件的物件的 SQLSQL 指令,就指令,就算不知道如何撰寫算不知道如何撰寫 SQLSQL 指令,也一樣可以更新資指令,也一樣可以更新資料表的記錄資料,如下所示:料表的記錄資料,如下所示:

OleDbCommandBuilder objCmdBuilder = OleDbCommandBuilder objCmdBuilder =

new new OleDbCommandBuilder(objDataAdapter);OleDbCommandBuilder(objDataAdapter);

• 上述程式碼的建構子是以上述程式碼的建構子是以 DataAdapterDataAdapter 物件為物件為參數來建立參數來建立 CommandBuilderCommandBuilder 物件,物件, SQL SQL ServerServer 版本是版本是 SqlCommandBuilderSqlCommandBuilder 物件。物件。

Page 47: 第 13 章  ADO.NET建立網頁資料庫

13-5-1 CommandBuilder13-5-1 CommandBuilder 物物件的使用件的使用 -2-2

• 因為因為 DataSetDataSet 物件的資料庫操作是針對儲存在記物件的資料庫操作是針對儲存在記憶體的憶體的 DataTableDataTable 物件,最後仍然需要使用物件,最後仍然需要使用DataAdapterDataAdapter 物件的物件的 Update()Update() 方法才能更新資方法才能更新資料來源的記錄資料,如下所示:料來源的記錄資料,如下所示:

int count = int count = objDataAdapter.Update(objDataSet, objDataAdapter.Update(objDataSet, "iPod");"iPod"); 上述程式碼使用上述程式碼使用 Update()Update() 方法更新方法更新DataSetDataSet 物件,傳回值物件,傳回值 countcount 是更新的記錄數。是更新的記錄數。

Page 48: 第 13 章  ADO.NET建立網頁資料庫

13-5-2 13-5-2 插入資料表記錄插入資料表記錄 -- 新增新增DataRowDataRow 物件物件

• ASP.NETASP.NET 程式在使用程式在使用 DataAdapterDataAdapter 物件將資物件將資料表記錄填入料表記錄填入 DataSetDataSet 物件後,就可以在資料表物件後,就可以在資料表插入一筆新的記錄資料。在插入一筆新的記錄資料。在 DataTableDataTable 物件插入物件插入記錄就是新增記錄就是新增 DataRowDataRow 物件,如下所示:物件,如下所示:

DataRow objDataRow;DataRow objDataRow;

objDataRow = objDataRow = objDataSet.Tables["iPod"].NewRow();objDataSet.Tables["iPod"].NewRow();

• 程式碼在宣告程式碼在宣告 DataRowDataRow 物件變數後,使用物件變數後,使用 iPodiPod別名取得指定的別名取得指定的 DataTableDataTable 物件,然後使用物件,然後使用NewRow()NewRow() 方法新增一列。方法新增一列。

Page 49: 第 13 章  ADO.NET建立網頁資料庫

13-5-2 13-5-2 插入資料表記錄插入資料表記錄 -- 輸入欄輸入欄位值位值

• 接著輸入欄位值,如下所示:接著輸入欄位值,如下所示:objDataRow["ModelNo"] = No.Text;objDataRow["ModelNo"] = No.Text;

objDataRow["Name"] = Name.Text;objDataRow["Name"] = Name.Text;

objDataRow["Storage"] = Storage.Text;objDataRow["Storage"] = Storage.Text;

objDataRow["Price"] = Price.Text;objDataRow["Price"] = Price.Text;

objDataRow["StockDate"] = objDataRow["StockDate"] = StockDate.Text;StockDate.Text;

• 程式碼指定欄位值,參數是欄位名稱,欄程式碼指定欄位值,參數是欄位名稱,欄位值是位值是 WebWeb 控制項控制項 TextBoxTextBox的的 TextText 屬屬性。性。

Page 50: 第 13 章  ADO.NET建立網頁資料庫

13-5-2 13-5-2 插入資料表記錄插入資料表記錄 -- 更新更新DataTableDataTable 物件物件

• 最後就可以將最後就可以將 DataRowDataRow 物件新增到物件新增到DataTableDataTable 物件,如下所示:物件,如下所示:

objDataSet.Tables["iPod"].Rows.Add(objDatobjDataSet.Tables["iPod"].Rows.Add(objDataRow);aRow);

不要忘了後面要加這句不要忘了後面要加這句int count = int count =

objDataAdapter.Update(objDataSet, objDataAdapter.Update(objDataSet, "iPod");"iPod");

Page 51: 第 13 章  ADO.NET建立網頁資料庫

13-5-3 13-5-3 更新資料表記錄更新資料表記錄• DataSetDataSet 物件更新記錄操作和下一節的刪除操作物件更新記錄操作和下一節的刪除操作十分相似,程式是使用十分相似,程式是使用 foreach/inforeach/in迴圈配合更新迴圈配合更新條件來找到欲更新的記錄後,即可更新欄位資料,條件來找到欲更新的記錄後,即可更新欄位資料,如下所示:如下所示:

foreach (DataRow objRow in foreach (DataRow objRow in objDataSet.Tables["iPod"].Rows) {objDataSet.Tables["iPod"].Rows) {

model = (string) objRow["ModelNo"];model = (string) objRow["ModelNo"]; if (model == No.Text) {if (model == No.Text) { objRow["BatteryLife"] = Life.Text;objRow["BatteryLife"] = Life.Text; objRow["StockDate"] = StockDate.Text;objRow["StockDate"] = StockDate.Text; }}}}

Page 52: 第 13 章  ADO.NET建立網頁資料庫

13-5-4 13-5-4 刪除資料表記錄刪除資料表記錄• 同樣方式,同樣方式, ASP.NETASP.NET 程式可以使用程式可以使用

DataSetDataSet 物件來刪除資料表的記錄,如下物件來刪除資料表的記錄,如下所示:所示:

foreach (DataRow objRow in foreach (DataRow objRow in objDataSet.Tables["iPod"].Rows) {objDataSet.Tables["iPod"].Rows) {

model = (string)objRow["ModelNo"];model = (string)objRow["ModelNo"]; if (model == No.Text) {if (model == No.Text) { objRow.Delete();objRow.Delete(); }}}}

Page 53: 第 13 章  ADO.NET建立網頁資料庫

13-6 ASP.NET13-6 ASP.NET 控制項與資料繫控制項與資料繫結結

• 13-6-1 ASP.NET13-6-1 ASP.NET 資料繫結的基礎資料繫結的基礎• 13-6-2 DataGrid13-6-2 DataGrid 控制項的資料繫結控制項的資料繫結• 13-6-3 DataSet13-6-3 DataSet 物件的資料繫結物件的資料繫結

Page 54: 第 13 章  ADO.NET建立網頁資料庫

13-6-1 ASP.NET13-6-1 ASP.NET 資料繫結的基資料繫結的基礎礎 -- 說明說明

• ASP.NETASP.NET的的WebWeb 控制項支援資料繫結技控制項支援資料繫結技術,可以將不同資料來源的集合物件、陣術,可以將不同資料來源的集合物件、陣列、列、 DataReaderDataReader或或 DataViewDataView (詳見第(詳見第13-6-313-6-3 節的說明)物件整合到節的說明)物件整合到 ASP.NETASP.NET的的WebWeb 控制項。控制項。

• 不過,並非每一個不過,並非每一個 WebWeb 控制項都支援資料控制項都支援資料繫結技術,只有擁有繫結技術,只有擁有 DataSourceDataSource 屬性的屬性的WebWeb 控制項才支援資料繫結。控制項才支援資料繫結。

Page 55: 第 13 章  ADO.NET建立網頁資料庫

13-6-1 ASP.NET13-6-1 ASP.NET 資料繫結的基資料繫結的基礎礎 -- 步驟步驟

• 在在 ASP.NETASP.NET 程式的程式的 WebWeb 控制項使用資料控制項使用資料繫結的步驟,如下所示:繫結的步驟,如下所示:– Step 1Step 1 :定義資料來源和取得資料來源的資料:定義資料來源和取得資料來源的資料

物件。物件。– Step 2Step 2 :指定控制項的:指定控制項的 DataSourceDataSource 屬性為屬性為

此資料來源的資料物件,以資料庫來說就是此資料來源的資料物件,以資料庫來說就是DataReaderDataReader或或 DataViewDataView 物件。物件。

– Step 3Step 3 :執行控制項的:執行控制項的 DataBind()DataBind() 方法建立方法建立資料連結。資料連結。

Page 56: 第 13 章  ADO.NET建立網頁資料庫

13-6-2 DataGrid13-6-2 DataGrid 控制項的資料控制項的資料繫結繫結 -- 說明說明

• DataGridDataGrid 控制項是控制項是 ASP.NET 1.0/1.1ASP.NET 1.0/1.1 版版提供的控制項,可以使用表格方式來顯示提供的控制項,可以使用表格方式來顯示資料表的記錄資料,在資料表的記錄資料,在 ASP.NET 2.0ASP.NET 2.0版版DataGridDataGrid 控制項已經被功能更強大的控制項已經被功能更強大的GridViewGridView 控制項所取代,詳細說明請參控制項所取代,詳細說明請參閱第閱第 1515 章。章。

Page 57: 第 13 章  ADO.NET建立網頁資料庫

13-6-2 DataGrid13-6-2 DataGrid 控制項的資料控制項的資料繫結繫結 -- 建立建立

• DataGridDataGrid 控制項只需建立資料繫結,並不控制項只需建立資料繫結,並不需要設定屬性,就可以使用表格方式來顯需要設定屬性,就可以使用表格方式來顯示資料表記錄,如下所示:示資料表記錄,如下所示:

<asp:DataGrid Id="objDataGrid"<asp:DataGrid Id="objDataGrid"

HeaderStyle-BackColor="#CC99FF"HeaderStyle-BackColor="#CC99FF"

Runat="server"/>Runat="server"/>

• DataReaderDataReader 物件資料繫結程式碼,如下:物件資料繫結程式碼,如下:objDataGrid.DataSource = objDataGrid.DataSource =

objCmd.ExecuteReader();objCmd.ExecuteReader();

objDataGrid.DataBind();objDataGrid.DataBind();

Page 58: 第 13 章  ADO.NET建立網頁資料庫

13-6-3 DataSet13-6-3 DataSet 物件的資料物件的資料繫結繫結

• ADO.NETADO.NET的的 DataSetDataSet 物件也可以作為控制項物件也可以作為控制項資料繫結的資料來源,它是使用資料繫結的資料來源,它是使用 DataViewDataView 物件物件作為資料來源,事實上,作為資料來源,事實上, DataViewDataView 物件就是一物件就是一種使用者自訂查詢結果的種使用者自訂查詢結果的 DataTableDataTable 物件,如下物件,如下所示:所示:

objDataAdapter.Fill(objDS, "iPod");objDataAdapter.Fill(objDS, "iPod");

rbt.DataSource = rbt.DataSource = objDS.Tables["iPod"].DefaultView;objDS.Tables["iPod"].DefaultView;

rbt.DataTextField = "Name";rbt.DataTextField = "Name";

rbt.DataBind();rbt.DataBind();