第 8 章 ado.net元件與資料繫結

64
8 8 ADO.NET ADO.NET 第第第第第 第第第第第 第第 第第

Upload: barth

Post on 05-Jan-2016

57 views

Category:

Documents


7 download

DESCRIPTION

第 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 資料庫系統. - PowerPoint PPT Presentation

TRANSCRIPT

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

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

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

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

8-1 8-1 資料庫的基礎資料庫的基礎 8-2 ASP.NET8-2 ASP.NET 網頁資料庫網頁資料庫 8-3 ADO.NET8-3 ADO.NET的的 DataReaderDataReader 物件物件 8-4 ADO.NET8-4 ADO.NET的的 DataSetDataSet 物件物件 8-5 8-5 資料繫結的基礎資料繫結的基礎 8-6 SqlDataSource8-6 SqlDataSource 資料來源控制項資料來源控制項

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

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

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

8-1-1 8-1-1 資料庫系統資料庫系統 我們所泛稱的資料庫我們所泛稱的資料庫

只是「資料庫系統」只是「資料庫系統」(( Database Database SystemSystem )的一部分,)的一部分,資料庫系統是由資料資料庫系統是由資料庫(庫( DatabaseDatabase )和)和「資料庫管理系統」「資料庫管理系統」(( Database Database Management Management SystemSystem,, DBMSDBMS ))所組成,如右圖所示:所組成,如右圖所示:

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

8-1-2 8-1-2 關聯式資料庫關聯式資料庫 關聯式資料庫是使用「資料表」(關聯式資料庫是使用「資料表」( TablesTables )的二)的二

維表格來儲存資料,每一個資料表使用「欄位」維表格來儲存資料,每一個資料表使用「欄位」(( FieldsFields )分類成很多群組,每一個群組是一筆)分類成很多群組,每一個群組是一筆「記錄」(「記錄」( RecordsRecords ),例如:通訊錄資料表,),例如:通訊錄資料表,如下表所示:如下表所示:

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

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

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

8-2-1 ASP.NET8-2-1 ASP.NET 與資料庫與資料庫 -- 說明說明 ASP.NETASP.NET 技術的技術的 WebWeb 應用程式就是一種應用程式就是一種

「資料驅動「資料驅動 WebWeb 應用程式」(應用程式」( Data-driven Data-driven Web ApplicationsWeb Applications ),網頁實際內容是分),網頁實際內容是分開儲存成外部資料,當存取時才動態整合開儲存成外部資料,當存取時才動態整合出最新的內容。出最新的內容。

而資料庫就是而資料庫就是 WebWeb 應用程式最常使用的外應用程式最常使用的外部資料來源,換句話說,大部分部資料來源,換句話說,大部分 ASP.NETASP.NET建立的資料驅動建立的資料驅動 WebWeb 應用程式,就是一種應用程式,就是一種資料庫驅動資料庫驅動 WebWeb 應用程式(應用程式( Database-Database-driven Web Applicationdriven Web Application ),即稱為網頁資),即稱為網頁資料庫(料庫( Web DatabaseWeb Database )。)。

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

8-2-1 ASP.NET8-2-1 ASP.NET 與資料庫與資料庫 -- 圖例圖例 網頁資料庫就是一種結合前端網頁資料庫就是一種結合前端 HTMLHTML 文件或文件或 Web Web

FormForm 表單的使用介面,配合後端表單的使用介面,配合後端 WebWeb 伺服器和伺服器和資料庫系統的一種應用程式架構,如下圖所示:資料庫系統的一種應用程式架構,如下圖所示:

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

8-2-2 ADO.NET8-2-2 ADO.NET 的基礎的基礎 -- 說明說明 ADO.NETADO.NET 是微軟的資料存取技術,其主要是微軟的資料存取技術,其主要

目的是在目的是在 .NET Framework.NET Framework 平台存取資料,平台存取資料,ADO.NETADO.NET 可以提供一致的物件模型來存取可以提供一致的物件模型來存取和編輯資料來源的資料。和編輯資料來源的資料。

換句話說,它就是提供一致的資料處理方換句話說,它就是提供一致的資料處理方式,至於資料來源並不限資料庫,幾乎任式,至於資料來源並不限資料庫,幾乎任何資料來源都可以。何資料來源都可以。

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

8-2-2 ADO.NET8-2-2 ADO.NET 的基礎的基礎 -- 物件模物件模型型

ADO.NETADO.NET 的主要類別物件有:的主要類別物件有:ConnectionConnection、、 CommandCommand、、 DataReaderDataReader和和DataSetDataSet ,其物件模型如下圖所示:,其物件模型如下圖所示:

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

8-2-2 ADO.NET8-2-2 ADO.NET 的基礎的基礎 -- 物件說物件說明明

ConnectionConnection 物件:可以建立與資料來源間的連接。物件:可以建立與資料來源間的連接。 CommandCommand 物件:對資料來源執行指令,以資料庫來說,物件:對資料來源執行指令,以資料庫來說,

就是執行就是執行 SQLSQL 指令敘述。指令敘述。 DataReaderDataReader 物件:可以從資料來源使用物件:可以從資料來源使用 CommandCommand 物件物件

執行指令,取得唯讀(執行指令,取得唯讀( Read-OnlyRead-Only )和只能向前)和只能向前(( Forward-OnlyForward-Only )的串流資料,每一次只能從資料來源)的串流資料,每一次只能從資料來源讀取一列資料(即一筆)儲存到記憶體,所以執行效率非讀取一列資料(即一筆)儲存到記憶體,所以執行效率非常高。常高。

DataSetDataSet和和 DataTableDataTable 物件:物件: DataSetDataSet 物件是由物件是由DataTableDataTable 物件組成的集合物件,物件組成的集合物件, DataSetDataSet 物件代表儲存物件代表儲存在記憶體的資料庫,每一個在記憶體的資料庫,每一個 DataTableDataTable 儲存一個資料表的儲存一個資料表的記錄資料,並且可以設定資料表間的關聯性記錄資料,並且可以設定資料表間的關聯性(( RelationshipRelationship )。)。

DataAdapterDataAdapter 物件:它是物件:它是 DataSetDataSet和和 ConnectionConnection 物件資物件資料連接間的橋樑,可以將資料表填入料連接間的橋樑,可以將資料表填入 DataSetDataSet 物件。物件。

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

8-2-2 ADO.NET8-2-2 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 13: 第 8 章  ADO.NET元件與資料繫結

8-2-3 ASP.NET8-2-3 ASP.NET 的資料控制項的資料控制項 --說明說明

在在 ASP.NET 1.0/1.1ASP.NET 1.0/1.1 版存取資料庫需要使版存取資料庫需要使用用 ADO.NETADO.NET 元件,以程式碼連接、開啟、元件,以程式碼連接、開啟、操作和顯示資料表的記錄資料。操作和顯示資料表的記錄資料。

從從 ASP.NET 2.0ASP.NET 2.0 版開始,我們可以直接使版開始,我們可以直接使用資料控制項(用資料控制項( Data ControlsData Controls )建立網頁)建立網頁資料庫,而不用撰寫任一行程式碼。資料庫,而不用撰寫任一行程式碼。

資料控制項依其功能可以分為:資料控制項依其功能可以分為: 資料來源控制項資料來源控制項 資料邊界控制項資料邊界控制項

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

8-2-3 ASP.NET8-2-3 ASP.NET的資料控制項的資料控制項 -- 資資料來源控制項料來源控制項 (( 說明說明 ))

資料來源控制項(資料來源控制項( DataSource ControlsDataSource Controls )是)是ASP.NET 2.0ASP.NET 2.0 版開始支援的控制項,可以使用宣版開始支援的控制項,可以使用宣告方式來存取資料來源的資料。例如:宣告資料告方式來存取資料來源的資料。例如:宣告資料來源是來源是 SQL ServerSQL Server 資料庫和指定相關屬性後,資料庫和指定相關屬性後,就可以存取資料庫的記錄資料。就可以存取資料庫的記錄資料。

事實上,在資料來源控制項的背後就是事實上,在資料來源控制項的背後就是 ADO.NETADO.NET元件的元件的 DataSetDataSet、、 DataReaderDataReader、、 ConnectionConnection和和CommandCommand 物件,物件, ASP.NETASP.NET 只是改為宣告的控制只是改為宣告的控制項標籤,所以,我們不用撰寫任何一行程式碼,項標籤,所以,我們不用撰寫任何一行程式碼,只需指定相關屬性值,就可以輕鬆存取資料來源只需指定相關屬性值,就可以輕鬆存取資料來源的資料。的資料。

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

8-2-3 ASP.NET8-2-3 ASP.NET的資料控制項的資料控制項 -- 資資料來源控制項料來源控制項 (( 種類種類 ))

在在 ASP.NETASP.NET 共提供五種資料來源控制項,共提供五種資料來源控制項,如下表所示:如下表所示:資料來源控制項 說明

SqlDataSource 存取關聯式資料庫的資料來源。可以是 SQL Server,Access和 Oracle等,如果使用 SQL Server,控制項自

動使用 SqlClient類別來最隹化資料庫存取AccessDataSource 存取微軟 Access資料庫,屬於 SqlDataSource控制項

的特別版本ObjectDataSource 存取商業物件的資料來源,可以在多層架構存取中間

層的資料來源XmlDataSource 存取 XML文件的資料來源,請參閱第 12章

SiteMapDataSource 建立網站地圖的唯讀資料來源,請參閱第 12章

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

8-2-3 ASP.NET8-2-3 ASP.NET的資料控制項的資料控制項 -- 資資料邊界控制項料邊界控制項 (( 說明說明 ))

資料邊界控制項(資料邊界控制項( DataBound ControlsDataBound Controls )也稱為)也稱為資料顯示與維護控制項,它是使用者和資料來源資料顯示與維護控制項,它是使用者和資料來源間的橋樑,可以將資料來源取得的資料呈現給使間的橋樑,可以將資料來源取得的資料呈現給使用者檢視或編輯。簡單的說,這是一種現成的資用者檢視或編輯。簡單的說,這是一種現成的資料顯示和維護介面,可以將資料來源的資料編排料顯示和維護介面,可以將資料來源的資料編排成瀏覽程式顯示的網頁內容。成瀏覽程式顯示的網頁內容。

換句話說,透過資料邊界控制項,我們就不用自換句話說,透過資料邊界控制項,我們就不用自行撰寫行撰寫 HTMLHTML 標籤、程式碼或建立控制項來編排標籤、程式碼或建立控制項來編排資料來源取得的資料,現在只需新增資料邊界控資料來源取得的資料,現在只需新增資料邊界控制項且指定相關屬性,就可以快速建立漂亮的資制項且指定相關屬性,就可以快速建立漂亮的資料編排效果,而且支援資料編輯功能,可以新增、料編排效果,而且支援資料編輯功能,可以新增、更新和刪除資料來源的資料。更新和刪除資料來源的資料。

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

8-2-3 ASP.NET8-2-3 ASP.NET的資料控制項的資料控制項 -- 資資料邊界控制項料邊界控制項 (( 種類種類 ))

表格顯示的控制項:這類控制項可以建立傳統表格顯示的控制項:這類控制項可以建立傳統 HTMLHTML 表格表格的顯示外觀,讓我們以一列一筆記錄的方式來顯示資料表的顯示外觀,讓我們以一列一筆記錄的方式來顯示資料表的記錄資料,而且提供有分頁功能,例如:的記錄資料,而且提供有分頁功能,例如:GridViewGridView、、 DataListDataList和和 ListViewListView 控制項。控制項。

單筆顯示的控制項:此類控制項可以顯示單筆記錄,如同單筆顯示的控制項:此類控制項可以顯示單筆記錄,如同一疊卡片,在每張卡片上顯示一筆記錄,並且提供巡覽功一疊卡片,在每張卡片上顯示一筆記錄,並且提供巡覽功能可以顯示指定卡片,或前一張、後一張卡片的記錄資料,能可以顯示指定卡片,或前一張、後一張卡片的記錄資料,例如:例如: DetailsViewDetailsView和和 FormViewFormView 控制項。控制項。

選擇功能的控制項:即清單控制項的選擇功能的控制項:即清單控制項的 DropDownListDropDownList和和ListBoxListBox 控制項,它們不只支援簡單資料繫結,也支援從控制項,它們不只支援簡單資料繫結,也支援從資料來源控制項取得項目資料。資料來源控制項取得項目資料。

樹狀結構的控制項:這類控制項是用來顯示階層架構的資樹狀結構的控制項:這類控制項是用來顯示階層架構的資料,特別針對料,特別針對 XMLXML 文件的資料來源,例如:文件的資料來源,例如: TreeViewTreeView和和MenuMenu 控制項。控制項。

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

8-2-4 8-2-4 將資料庫加入將資料庫加入 ASP.NETASP.NET 網網站站 --本機與伺服器資料庫本機與伺服器資料庫

對於對於 ASP.NETASP.NET 網站使用的資料庫來說,網站使用的資料庫來說, SQL SQL Server 2005 ExpressServer 2005 Express 版可以建立兩種資料庫,其版可以建立兩種資料庫,其說明如下所示:說明如下所示: 伺服器資料庫(伺服器資料庫( Server DatabaseServer Database ):伺服器資料庫):伺服器資料庫

是屬於伺服器,所以,在伺服器上執行的應用程式都是屬於伺服器,所以,在伺服器上執行的應用程式都可以存取此資料庫。不過,可以存取此資料庫。不過, VWDVWD 並不能建立伺服器資並不能建立伺服器資料庫,我們只能使用料庫,我們只能使用 Management Studio ExpressManagement Studio Express 管管理工具來建立。理工具來建立。

本機資料庫(本機資料庫( Local DatabaseLocal Database ):本機資料庫是屬於):本機資料庫是屬於ASP.NETASP.NET 網站的資料庫,它是建立在名為「網站的資料庫,它是建立在名為「 \\App_DataApp_Data 」子資料夾的資料庫。本書」子資料夾的資料庫。本書 ASP.NETASP.NET 網站網站就是使用本機資料庫來建立網頁資料庫。就是使用本機資料庫來建立網頁資料庫。

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

8-2-4 8-2-4 將資料庫加入將資料庫加入 ASP.NETASP.NET 網網站站 -- 加入資料庫加入資料庫

我們可以在我們可以在 VWDVWD 開啟開啟 ASP.NETASP.NET 網站後,直接將網站後,直接將資料庫加入資料庫加入 ASP.NETASP.NET 網站。例如:將網站。例如:將 SQL SQL ServerServer 資料庫資料庫 Products.mdfProducts.mdf ,加入,加入 ASP.NETASP.NET 網網站的「站的「 App_DataApp_Data 」資料夾,如下圖所示:」資料夾,如下圖所示:

選加入的資料庫

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

8-3 ADO.NET8-3 ADO.NET的的 DataReaderDataReader 物件物件 8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 8-3-2 Command8-3-2 Command 物件的物件的 Execute()Execute() 方法方法

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

8-3 ADO.NET8-3 ADO.NET的的 DataReaderDataReader 物件物件 --說明說明

ASP.NETASP.NET 網頁資料庫可以使用網頁資料庫可以使用 ADO.NETADO.NET元件的元件的 DataReaderDataReader或或 DataSetDataSet 物件來取物件來取得記錄資料。因為本書在第得記錄資料。因為本書在第 99 章才會詳細章才會詳細說明說明 SQLSQL 查詢指令,所以,本章範例都是查詢指令,所以,本章範例都是使用同一個使用同一個 SQLSQL 查詢指令,如下所示:查詢指令,如下所示:SELECT * FROM BooksSELECT * FROM Books

上述上述 SQLSQL 指令指令 SELECTSELECT 沒有沒有 WHEREWHERE 子子句的任何條件,查詢結果可以取得資料表句的任何條件,查詢結果可以取得資料表BooksBooks 的所有記錄和欄位資料。的所有記錄和欄位資料。

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 -- 匯入匯入名稱空間名稱空間

DataReaderDataReader 物件是使用類似檔案串流來讀取記錄物件是使用類似檔案串流來讀取記錄資料,它只能讀取,不能插入、刪除和更新記錄資料,它只能讀取,不能插入、刪除和更新記錄資料。在資料。在 ASP.NETASP.NET 網頁首先需要匯入名稱空間,網頁首先需要匯入名稱空間,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" %>

在匯入名稱空間後,就可以使用在匯入名稱空間後,就可以使用 ADO.NETADO.NET 物件物件來存取資料庫的記錄資料。來存取資料庫的記錄資料。

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 --步驟一:建立步驟一:建立 ConnectionConnection 物件物件 (( 建建

立立 ))在在 ASP.NETASP.NET 網頁建立網頁建立 ConnectionConnection 物件,物件,首先宣告首先宣告 SqlConnectionSqlConnection 物件變數物件變數 objConobjCon ,,如下所示:如下所示:SqlConnection objCon;SqlConnection objCon;

objCon = new SqlConnection(strDbCon); objCon = new SqlConnection(strDbCon); 上述程式碼使用上述程式碼使用 newnew 運算子和建構子來建運算子和建構子來建

立名為立名為 objConobjCon的的 SqlConnectionSqlConnection 物件。物件。

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 --步驟一:建立步驟一:建立 ConnectionConnection 物件物件 (( 連接字連接字

串串 )) strDbConstrDbCon 變數值是變數值是 SQL Server 2005 SQL Server 2005

ExpressExpress 的連接字串,如下所示:的連接字串,如下所示:strDbCon = "Data Source=.\\SQLEXPRESS;" + strDbCon = "Data Source=.\\SQLEXPRESS;" + "AttachDbFilename=" + "AttachDbFilename=" + Server.MapPath("App_Data\\Products.mdf") + Server.MapPath("App_Data\\Products.mdf") + ";Integrated Security=True;" + ";Integrated Security=True;" + "TrustServerCertificate=False;" + "TrustServerCertificate=False;" + "User Instance=True;Context "User Instance=True;Context

Connection=False";Connection=False";

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 --步驟二:開啟資料庫連接步驟二:開啟資料庫連接

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

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

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 --步驟三:建立步驟三:建立 CommandCommand 物件物件

在建立和開啟在建立和開啟 ConnectionConnection 物件後,就可以物件後,就可以使用使用 SQLSQL 指令和指令和 ConnectionConnection 物件作為參物件作為參數來建立數來建立 CommandCommand 物件,如下所示:物件,如下所示:strSQL = "SELECT * FROM Books";strSQL = "SELECT * FROM Books";objCmd = new SqlCommand(strSQL, objCon);objCmd = new SqlCommand(strSQL, objCon);

上述程式碼使用上述程式碼使用 newnew 運算子和建構子來建運算子和建構子來建立立 CommandCommand 物件,第物件,第 22 個參數是開啟的個參數是開啟的資料庫連接物件,表示向此資料來源執行資料庫連接物件,表示向此資料來源執行第第 11 個參數的個參數的 SQLSQL 指令敘述。指令敘述。

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 --步驟四:執行步驟四:執行 SQLSQL 指令敘述查詢資料表指令敘述查詢資料表 接著使用接著使用 CommandCommand 物件的物件的

ExecuteReader()ExecuteReader() 方法執行方法執行 SQLSQL 查詢指令,查詢指令,如下所示:如下所示:objDR = objCmd.ExecuteReader();objDR = objCmd.ExecuteReader();

上述程式碼取得上述程式碼取得 DataReaderDataReader 物件物件 objDRobjDR ,,讀者可以想像它是開啟一個資料庫的檔案讀者可以想像它是開啟一個資料庫的檔案串流。串流。

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 --步驟五:讀取記錄資料步驟五:讀取記錄資料

DataReaderDataReader 物件是一種資料串流,在物件是一種資料串流,在 ASP.NETASP.NET網頁可以使用網頁可以使用 objDR.HasRowsobjDR.HasRows 屬性判斷是否有屬性判斷是否有記錄資料,如果有為記錄資料,如果有為 truetrue ,然後就可以使用,然後就可以使用whilewhile迴圈讀取資料表的記錄資料,如下所示:迴圈讀取資料表的記錄資料,如下所示:while (objDR.Read())while (objDR.Read()){{ lblOutput.Text += objDR["BookID"] + " - ";lblOutput.Text += objDR["BookID"] + " - "; lblOutput.Text += objDR["BookTitle"] + " - ";lblOutput.Text += objDR["BookTitle"] + " - "; lblOutput.Text += objDR["BookPrice"] + lblOutput.Text += objDR["BookPrice"] +

"<br/>";"<br/>";}}

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 --步驟六:關閉步驟六:關閉 DataReaderDataReader 和資料庫連和資料庫連

接接 最後可以關閉最後可以關閉 DataReaderDataReader 串流物件和資料串流物件和資料

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

objCon.Close();objCon.Close(); 上述程式碼使用上述程式碼使用 Close()Close() 方法關閉方法關閉

DataReaderDataReader和和 ConnectionConnection 物件。物件。

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

範例範例 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;" + strDbCon = "Data Source=.\\SQLEXPRESS;" + "AttachDbFilename=" + "AttachDbFilename=" + Server.MapPath("App_Data\\Products.mdf") + Server.MapPath("App_Data\\Products.mdf") + ";Integrated Security=True;" + ";Integrated Security=True;" + "TrustServerCertificate=False;" + "TrustServerCertificate=False;" + "User Instance=True;Context Connection=False";"User Instance=True;Context Connection=False"; // // 建立建立 ConnectionConnection 物件物件 objCon = new SqlConnection(strDbCon);objCon = new SqlConnection(strDbCon); objCon.Open(); // objCon.Open(); // 開啟資料庫連接開啟資料庫連接 strSQL = "SELECT * FROM Books";strSQL = "SELECT * FROM Books"; // // 建立建立 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) {{ lblOutput.Text = "lblOutput.Text = " 資料表記錄資料表記錄 : <hr/>";: <hr/>"; // // 顯示資料表的記錄顯示資料表的記錄 while (objDR.Read())while (objDR.Read()) {{ lblOutput.Text += objDR["BookID"] + " - ";lblOutput.Text += objDR["BookID"] + " - "; lblOutput.Text += objDR["BookTitle"] + " - ";lblOutput.Text += objDR["BookTitle"] + " - "; lblOutput.Text += objDR["BookPrice"] + "<br/>";lblOutput.Text += objDR["BookPrice"] + "<br/>"; }} }} elseelse {{ lblOutput.Text = "lblOutput.Text = " 資料表中沒有記錄資料資料表中沒有記錄資料 !";!"; }} objDR.Close(); // objDR.Close(); // 關閉關閉 DataReaderDataReader objCon.Close(); // objCon.Close(); // 關閉資料庫連接關閉資料庫連接 }}

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

8-3-1 8-3-1 開啟開啟 DataReaderDataReader 物件物件 --範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch8-3-1Ch8-3-1 在在 ASP.NETASP.NET 網頁取得網頁取得 BooksBooks 資料表的資料表的

DataReaderDataReader 物件後,以清單方式來顯示資料表的物件後,以清單方式來顯示資料表的記錄資料,不過,只有顯示書號、書名和書價欄記錄資料,不過,只有顯示書號、書名和書價欄位,如下圖所示:位,如下圖所示:

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

8-3-2 Command8-3-2 Command 物件的物件的 Execute()Execute()方法方法 -- 指令種類指令種類

在在 ADO.NETADO.NET 元件的元件的 CommandCommand 物件提供物件提供三種三種 Execute()Execute() 方法來執行方法來執行 SQLSQL 指令敘述,指令敘述,如下表所示:如下表所示:

Execute()方法 說明ExecuteNonQuery() 執行 SQL指令但不傳回任何資料,通常是執行資料庫操

作指令 INSERT、DELETE和 UPDATE

ExecuteScalar() 執行 SQL指令從資料表取得 1個欄位資料,如果是資料表,就是第 1筆記錄的第 1個欄位值

ExecuteReader() 執行 SQL指令傳回 DataReader物件

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

8-3-2 Command8-3-2 Command 物件的物件的 Execute()Execute()方法方法 -ExecuteScalar()-ExecuteScalar() 方法方法

ExecuteReader()ExecuteReader() 方法在第方法在第 8-3-18-3-1節已經說明節已經說明過,過, ExecuteNonQuery()ExecuteNonQuery() 方法可以執行方法可以執行 SQLSQL語語言的資料庫操作,詳見第言的資料庫操作,詳見第 9-4-39-4-3節的說明。在這節的說明。在這一節筆者將說明一節筆者將說明 ExecuteScalar()ExecuteScalar() 方法,可以取得方法,可以取得資料表指定記錄的單一欄位值,如下所示:資料表指定記錄的單一欄位值,如下所示:lblOutput.Text = "lblOutput.Text = " 查詢結果查詢結果 : " + : " +

objCmd.ExecuteScalar();objCmd.ExecuteScalar(); 上述程式碼執行上述程式碼執行 CommandCommand 物件物件 objCmdobjCmd的的 SQLSQL

指令,如果傳回值不只一個。例如:指令,如果傳回值不只一個。例如: SQLSQL 指令如指令如果是查詢多筆記錄,取得的是第果是查詢多筆記錄,取得的是第 11 筆記錄的第筆記錄的第 11個欄位。個欄位。

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

8-3-2 Command8-3-2 Command 物件的物件的 Execute()Execute()方法方法 -ExecuteScalar()-ExecuteScalar() 方法方法

ASP.NETASP.NET 網站:網站: Ch8-3-2Ch8-3-2 在在 ASP.NETASP.NET 網頁使用網頁使用 CommandCommand 物件的物件的

ExecuteScalar()ExecuteScalar() 方法執行方法執行 SQLSQL 指令敘述,在指令敘述,在TextBoxTextBox 控制項輸入控制項輸入 SQLSQL 指令,按指令,按【【查詢查詢】】鈕,鈕,就可以取得單一欄位值,如下圖所示:就可以取得單一欄位值,如下圖所示:

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

8-4 ADO.NET8-4 ADO.NET的的 DataSetDataSet 物件物件 8-4-1 DataSet8-4-1 DataSet 物件的基礎物件的基礎 8-4-2 8-4-2 將記錄填入將記錄填入 DataSetDataSet 物件物件

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

8-4-1 DataSet8-4-1 DataSet 物件的基礎物件的基礎 -- 說明說明 DataSetDataSet 物件是由物件是由 DataTableDataTable 物件所組物件所組

成,成, DataSetDataSet 物件相當於是資料物件相當於是資料庫,庫, DataTableDataTable 物件就是資料表。物件就是資料表。

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

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

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

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

8-4-2 8-4-2 將記錄填入將記錄填入 DataSetDataSet 物件物件 --步驟一:建立與開啟步驟一:建立與開啟 ConnectionConnection 物件物件

首先使用首先使用 ConnectionConnection 物件建立資料連接物物件建立資料連接物件件 objConobjCon 後,使用後,使用 Open()Open() 方法開啟資料方法開啟資料來源,如下所示:來源,如下所示:objCon = new SqlConnection(strDbCon);objCon = new SqlConnection(strDbCon);

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

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

8-4-2 8-4-2 將記錄填入將記錄填入 DataSetDataSet 物件物件 --步驟二:建立步驟二:建立 DataAdapterDataAdapter 物件物件

DataSetDataSet 物件是使用物件是使用 DataAdapterDataAdapter 物件來取得記物件來取得記錄資料,此物件是錄資料,此物件是 DataSetDataSet與與 ConnectionConnection 物件資物件資料來源間的橋樑,可以呼叫方法將記錄資料填入料來源間的橋樑,可以呼叫方法將記錄資料填入DataSetDataSet 物件,如下所示:物件,如下所示:strSQL = "SELECT * FROM Books";strSQL = "SELECT * FROM Books";

objDataAdapter = new SqlDataAdapter(objDataAdapter = new SqlDataAdapter(

strSQL, objCon);strSQL, objCon); 上述程式碼建立上述程式碼建立 DataAdapterDataAdapter 物件,第物件,第 11 個參數個參數是是 SQLSQL查詢指令來取得記錄資料,第查詢指令來取得記錄資料,第 22 個參數是個參數是開啟的開啟的 ConnectionConnection 物件。物件。

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

8-4-2 8-4-2 將記錄填入將記錄填入 DataSetDataSet 物件物件 --步驟三:建立步驟三:建立 DataSetDataSet 物件填入記錄資料物件填入記錄資料

接著建立接著建立 DataSetDataSet 物件,將取得的記錄資料物件,將取得的記錄資料填入填入 DataSetDataSet 物件,如下所示:物件,如下所示:DataSet objDataSet = new DataSet();DataSet objDataSet = new DataSet();

objDataAdapter.Fill(objDataSet, "Books");objDataAdapter.Fill(objDataSet, "Books"); 上述程式碼建立上述程式碼建立 DataSetDataSet 物件後,使用物件後,使用

DataAdpaterDataAdpater 物件的物件的 Fill()Fill() 方法將方法將 SQLSQL 指令指令的查詢結果填入第的查詢結果填入第 11 個參數的的個參數的的 DataSetDataSet 物物件。更正確的說,就是新增件。更正確的說,就是新增 DataTableDataTable 物件,物件,第第 22 個參數是個參數是 DataTableDataTable 物件的別名。物件的別名。

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

8-4-2 8-4-2 將記錄填入將記錄填入 DataSetDataSet 物件物件 --步驟四:顯示步驟四:顯示 DataTableDataTable 物件的所有記錄物件的所有記錄

使用使用 foreachforeach 迴圈取出迴圈取出 DataTableDataTable 物件物件 RowsRows 屬屬性的每一個性的每一個 DataRowDataRow 物件,也就是每一筆記錄,物件,也就是每一筆記錄,如下所示:如下所示:

foreach (DataRow objRow in foreach (DataRow objRow in objDataSet.Tables["Books"].Rows)objDataSet.Tables["Books"].Rows){{ lblOutput.Text += objRow["BookID"] + " - ";lblOutput.Text += objRow["BookID"] + " - "; lblOutput.Text += objRow["BookTitle"] + " - ";lblOutput.Text += objRow["BookTitle"] + " - "; lblOutput.Text += objRow["BookAuthor"] + " - ";lblOutput.Text += objRow["BookAuthor"] + " - "; lblOutput.Text += objRow["BookPrice"] + lblOutput.Text += objRow["BookPrice"] +

"<br/>";"<br/>";}}

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

8-4-2 8-4-2 將記錄填入將記錄填入 DataSetDataSet 物件物件 --步驟五:關閉資料庫連接步驟五:關閉資料庫連接

最後使用最後使用 Close()Close() 方法關閉資料庫連接,此方法關閉資料庫連接,此例的例的 ConnectionConnection 物件為物件為 objConobjCon ,如下所,如下所示:示:objCon.Close();objCon.Close();

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

8-4-2 8-4-2 將記錄填入將記錄填入 DataSetDataSet 物件物件 --範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch8-4-2Ch8-4-2 在在 ASP.NETASP.NET 網頁取得網頁取得 BookBook 資料表的資料表的 DataSetDataSet 物物

件後,使用清單方式來顯示資料表的記錄資料,件後,使用清單方式來顯示資料表的記錄資料,如下圖所示:如下圖所示:

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

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

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

8-5-1 8-5-1 資料繫結簡介資料繫結簡介 -- 說明說明 ASP.NETASP.NET 控制項支援資料繫結技術,能夠將不同控制項支援資料繫結技術,能夠將不同

資料來源的集合物件、陣列、資料來源的集合物件、陣列、 DataReaderDataReader或或DataViewDataView (可以視為從(可以視為從 DataSetDataSet 物件建立的檢視物件建立的檢視表)等資料整合到表)等資料整合到 ASP.NETASP.NET 控制項。控制項。

換句話說,資料來源的資料會自動填入控制項,換句話說,資料來源的資料會自動填入控制項,並且使用預設方式顯示資料,當然,我們可以設並且使用預設方式顯示資料,當然,我們可以設定控制項屬性來變更其顯示外觀。在定控制項屬性來變更其顯示外觀。在 ASP.NETASP.NET使用的資料繫結技術分為兩種:簡單資料繫結和使用的資料繫結技術分為兩種:簡單資料繫結和宣告式的資料繫結。宣告式的資料繫結。

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

8-5-1 8-5-1 資料繫結簡介資料繫結簡介 --簡單資料繫結簡單資料繫結

在在 ASP.NETASP.NET 網頁使用簡單資料繫結(網頁使用簡單資料繫結( Simple Simple DatabindingDatabinding )的控制項擁有)的控制項擁有 DataSourceDataSource 屬性,屬性,可以使用實作可以使用實作 IEnumerableIEnumerable 介面的集合物件作為介面的集合物件作為資料來源,然後呼叫資料來源,然後呼叫 DataBind()DataBind() 方法來建立資料方法來建立資料繫結。繫結。

例如:清單控制項的例如:清單控制項的 ListBoxListBox、、 RadioButtonListRadioButtonList、、CheckBoxListCheckBoxList和和 DropDownListDropDownList 等都支援簡單資等都支援簡單資料繫結。料繫結。

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

8-5-1 8-5-1 資料繫結簡介資料繫結簡介 --宣告式的資料繫結宣告式的資料繫結

宣告式的資料繫結(宣告式的資料繫結( Declarative Declarative DatabindingDatabinding )是一種比較複雜的資料繫結,)是一種比較複雜的資料繫結,它是使用控制項的它是使用控制項的 DataSourceIDDataSourceID 屬性來建屬性來建立資料繫結。立資料繫結。

在在 ASP.NETASP.NET 網頁需要先建立「資料來源控網頁需要先建立「資料來源控制項」(制項」( DataSource ControlsDataSource Controls )存取資料)存取資料來源的資料,然後建立「資料邊界控制來源的資料,然後建立「資料邊界控制項」(項」( DataBound ControlsDataBound Controls )來顯示和維)來顯示和維護資料來源的資料。護資料來源的資料。

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

8-5-2 8-5-2 建立建立 ListBoxListBox 控制項的簡單資控制項的簡單資料繫結料繫結 -- 說明說明

簡單資料繫結可以使用集合物件作為資料簡單資料繫結可以使用集合物件作為資料來源,其最常的應用是建立來源,其最常的應用是建立 ListList 清單控制清單控制項的項目。項的項目。

換句話說,我們可以使用資料繫結技術來換句話說,我們可以使用資料繫結技術來動態顯示清單的項目。動態顯示清單的項目。

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

8-5-2 8-5-2 建立建立 ListBoxListBox 控制項的簡單資控制項的簡單資料繫結料繫結 -- 建立建立

首先建立首先建立 ArrayListArrayList 物件作為資料來源,如下所示:物件作為資料來源,如下所示:ArrayList names = new ArrayList();ArrayList names = new ArrayList();names.Add("names.Add(" 陳會安陳會安 ");");names.Add("names.Add(" 江小魚江小魚 ");");names.Add("names.Add(" 張無忌張無忌 ");");names.Add("names.Add(" 陳允傑陳允傑 ");");

接著指定接著指定 ListBoxListBox 控制項的控制項的 DataSourceDataSource 屬性,如屬性,如下所示:下所示:lstNames.DataSource = names;lstNames.DataSource = names;lstNames.DataBind();lstNames.DataBind();

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

8-5-2 8-5-2 建立建立 ListBoxListBox 控制項的簡單資控制項的簡單資料繫結料繫結 --範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch8-5-2Ch8-5-2 在在 ASP.NETASP.NET 網頁使用簡單資料繫結技術,以網頁使用簡單資料繫結技術,以

ArrayListArrayList 物件作為資料來源,建立物件作為資料來源,建立 ListBoxListBox 控制控制項的項目清單,如下圖所示:項的項目清單,如下圖所示:

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

8-6 SqlDataSource8-6 SqlDataSource 資料來源控制項資料來源控制項 8-6-1 8-6-1 建立建立 SqlDataSourceSqlDataSource 控制項控制項 8-6-2 8-6-2 資料來源控制項的標籤內容資料來源控制項的標籤內容 8-6-3 8-6-3 傳回沒有重複的欄位值傳回沒有重複的欄位值

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

8-6-1 8-6-1 建立建立 SqlDataSourceSqlDataSource 控制項控制項 --說明說明

在在 VWDVWD 建立建立SqlDataSourceSqlDataSource 控制項,控制項,請開啟「工具箱」視窗請開啟「工具箱」視窗且展開且展開【【資料資料】】區段,區段,只需選取只需選取SqlDataSourceSqlDataSource 控制項,控制項,拖拉至拖拉至 Web FormWeb Form 表單表單的編輯區域,就可以建的編輯區域,就可以建立立 SqlDataSourceSqlDataSource 控制控制項。項。

SqlDataSource控制項

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

8-6-1 8-6-1 建立建立 SqlDataSourceSqlDataSource 控制項控制項 --步驟一步驟一 (( 新增新增 ))

步驟一:新增步驟一:新增 SqlDataSourceSqlDataSource 控制項控制項 在在 VWDVWD 的「工具箱」視窗提供資料來源控制項,的「工具箱」視窗提供資料來源控制項,

我們可以在我們可以在【【設計設計】】標籤直接拖拉來新增資料來標籤直接拖拉來新增資料來源控制項,如下圖所示:源控制項,如下圖所示:

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

8-6-1 8-6-1 建立建立 SqlDataSourceSqlDataSource 控制項控制項 --步驟一步驟一 (( 設定資料來源設定資料來源 ))

選資料來源控制項,選資料來源控制項,開啟「開啟「 SqlDataSourceSqlDataSource工工作」功能表,作」功能表,選選【設定資料來源】超連結,可以【設定資料來源】超連結,可以看到設定資料來源的精靈畫面。看到設定資料來源的精靈畫面。

選 Products.mdf資料連接

將連接字串儲存在組態檔

建立 SQL指令測試 SQL指

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

8-6-1 8-6-1 建立建立 SqlDataSourceSqlDataSource 控制項控制項 --步驟二步驟二

步驟二:選擇控制項使用的資料來源控制項步驟二:選擇控制項使用的資料來源控制項 在新增資料來源控制項和設定好資料來源後,我在新增資料來源控制項和設定好資料來源後,我

們就可以在們就可以在 ListBoxListBox 控制項選擇使用的資料來源,控制項選擇使用的資料來源,如下圖所示:如下圖所示: 在【選取資料來

源】欄選【 SqlDataSource1】, ListBo

x控制項顯示【 BookID】欄位,選取欄位值是【 BookTitle】

欄位

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

8-6-1 8-6-1 建立建立 SqlDataSourceSqlDataSource 控制項控制項 --步驟三步驟三

步驟三:新增事件處理程序來顯示使用者的步驟三:新增事件處理程序來顯示使用者的選擇選擇

在新增好在新增好 ListBoxListBox 控制項後,我們就可以建立控制項後,我們就可以建立Button1Button1 控制項的事件處理程序,如下所示:控制項的事件處理程序,如下所示:

protected void Button1_Click(object sender, EventArgs e)protected void Button1_Click(object sender, EventArgs e){{ if (lstNames.SelectedIndex > -1)if (lstNames.SelectedIndex > -1) {{ lblOutput.Text = "lblOutput.Text = " 選擇的書名選擇的書名 : " + : " + lstNames.SelectedItem.Value;lstNames.SelectedItem.Value; }}}}

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

8-6-1 8-6-1 建立建立 SqlDataSourceSqlDataSource 控制項控制項 --範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch8-6-1Ch8-6-1 在在 ASP.NETASP.NET 網頁使用宣告式的資料繫結技術,網頁使用宣告式的資料繫結技術,

建立建立 SqlDataSourceSqlDataSource 控制項來取得控制項來取得 Products.mdfProducts.mdf資料庫的資料,以便建立資料庫的資料,以便建立 ListBoxListBox 控制項的項目控制項的項目清單,如下圖所示:清單,如下圖所示:

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

8-6-2 8-6-2 資料來源控制項的標籤內容資料來源控制項的標籤內容 --SqlDataSourceSqlDataSource 控制項標籤控制項標籤 (( 內容內容 ))

SqlDataSourceSqlDataSource 控制項標籤,如下所示:控制項標籤,如下所示:<asp:SqlDataSource ID="SqlDataSource1" runat="server" <asp:SqlDataSource ID="SqlDataSource1" runat="server"

ConnectionString="<%$ ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ConnectionStrings:ConnectionString %>"

SelectCommand="SELECT [BookID], [BookTitle] FROM SelectCommand="SELECT [BookID], [BookTitle] FROM [Books]">[Books]">

</asp:SqlDataSource></asp:SqlDataSource>

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

8-6-2 8-6-2 資料來源控制項的標籤內容資料來源控制項的標籤內容 --SqlDataSourceSqlDataSource 控制項標籤控制項標籤 (( 屬性說明屬性說明 )) ProviderNameProviderName 屬性值是定義在屬性值是定義在 web.configweb.config 組態組態檔的參數,如下所示:檔的參數,如下所示:<%$ ConnectionStrings:ConnectionString %><%$ ConnectionStrings:ConnectionString %>

參數名稱分成兩部分,前面參數名稱分成兩部分,前面 ConnectionStringsConnectionStrings 指指明取得在明取得在 web.configweb.config 檔案同名標籤定義的參數值,檔案同名標籤定義的參數值,後面是後面是 ConnectionStringConnectionString 參數名稱,可以取得此參數名稱,可以取得此參數名稱的資料庫連接字串。參數名稱的資料庫連接字串。

屬性 說明ProviderName 提供者名稱是 System.Data.OleDb或

System.Data.SqlClient(預設值)ConnectionString 資料庫連接字串SelectCommand SQL的 SELECT查詢指令

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

8-6-2 8-6-2 資料來源控制項的標籤內容資料來源控制項的標籤內容 --web.configweb.config 組態檔組態檔

在在 web.configweb.config 組態檔的組態檔的 <connectionStrings><connectionStrings> 標標籤定義連接字串的參數名稱和值,如下所示:籤定義連接字串的參數名稱和值,如下所示:

<connectionStrings><connectionStrings> <add name="ConnectionString" <add name="ConnectionString"

connectionString="Data Source=.\connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|SQLEXPRESS;AttachDbFilename=|DataDirectory|\Products.mdf;Integrated DataDirectory|\Products.mdf;Integrated Security=True;User Instance=True"Security=True;User Instance=True"

providerName="System.Data.SqlClient" />providerName="System.Data.SqlClient" /></connectionStrings></connectionStrings> 上述上述 <add><add> 標籤新增標籤新增 namename 屬性為屬性為

ConnectionStringConnectionString 的連接字串。的連接字串。

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

8-6-3 8-6-3 傳回沒有重複的欄位值傳回沒有重複的欄位值 -- 說明說明 當我們使用資料繫結將資料庫欄位填入當我們使用資料繫結將資料庫欄位填入

DropDownListDropDownList 控制項時,可能會遇到重複控制項時,可能會遇到重複值欄位的問題,如下圖所示:值欄位的問題,如下圖所示:

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

8-6-3 8-6-3 傳回沒有重複的欄位值傳回沒有重複的欄位值 -- 設定設定 選資料來源控制項,在「選資料來源控制項,在「 SqlDataSourceSqlDataSource 工作」工作」

功能表選功能表選【【設定資料來源設定資料來源】】超連結,請重複按超連結,請重複按【【下一步下一步】】鈕,直到到達設定鈕,直到到達設定 SQLSQL陳述式的步驟。陳述式的步驟。

勾選【只傳回不重複的資料列】

按【ORDER BY】鈕新增排序

條件

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

8-6-3 8-6-3 傳回沒有重複的欄位值傳回沒有重複的欄位值 --範例範例網站網站

ASP.NETASP.NET 網站:網站: Ch8-6-3Ch8-6-3 在在 ASP.NETASP.NET 網頁建立網頁建立 SqlDataSourceSqlDataSource 控制項和控制項和

DropDownListDropDownList 控制項來顯示控制項來顯示 Products.mdfProducts.mdf 資料資料庫的圖書種類,因為有重複值,所以需要修改庫的圖書種類,因為有重複值,所以需要修改SQLSQL 指令,並且指定排序欄位是指令,並且指定排序欄位是 BookCatalogBookCatalog ,,如下圖所示:如下圖所示:

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