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

57
8ADO.NET元件與 元件與 元件與 元件與 資料繫結 資料繫結 資料繫結 資料繫結

Upload: others

Post on 10-Jun-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

2

� 資料庫的基礎

� ASP.NET網頁資料庫

� ADO.NET的DataReader物件

� ADO.NET的DataSet物件

� 資料繫結的基礎

� SqlDataSource資料來源控制項

大綱大綱大綱大綱

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

3

資料庫的基礎資料庫的基礎資料庫的基礎資料庫的基礎

� 資料庫系統

� 關聯式資料庫

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

4

資料庫系統資料庫系統資料庫系統資料庫系統

� 我們所泛稱的資料庫只是資料庫系統(Database System)的一部分,資料庫系統是由資料庫(Database)和資料庫管理系統(Database Management System,DBMS)所組成,如右圖所示:

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

5

關聯式資料庫關聯式資料庫關聯式資料庫關聯式資料庫

� 關聯式資料庫(Relational Database)是由一個或多個資料表所組成,在多個資料表間使用欄位的資料值來建立連接,以便實作資料表間的關聯性。

� 在關聯式資料庫是使用二維表格的資料表來儲存記錄資料,在各資料表間使用欄位值建立關聯性,透過關聯性來存取其他資料表的資料,如右圖所示:

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

6

關聯式資料庫組成關聯式資料庫組成關聯式資料庫組成關聯式資料庫組成

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

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

7

ASP.NET網頁資料庫網頁資料庫網頁資料庫網頁資料庫

� ASP.NET與資料庫

� ADO.NET的基礎

� ASP.NET的資料控制項

� 將資料庫加入ASP.NET網站

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

8

ASP.NET與資料庫與資料庫與資料庫與資料庫

� ASP.NET技術的Web應用程式就是一種資料驅動Web應用程式(Data-driven Web Applications),網頁實際內容是分開儲存成外部資料,當存取時才動態整合出最新的內容。

� 資料庫就是Web應用程式最常使用的外部資料來源,大部分ASP.NET建立的資料驅動Web應用程式,就是一種資料庫驅動Web應用程式(Database-driven Web Application),也稱為網頁資料庫(Web Database)。

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

9

ASP.NET與資料庫圖例與資料庫圖例與資料庫圖例與資料庫圖例

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

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

10

ADO.NET的基礎的基礎的基礎的基礎

� ADO.NET是微軟的資料存取技術,其主要目的是在.NET Framework平台存取資料,ADO.NET可以提供一致的物件模型來存取和編輯資料來源的資料。

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

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

11

ADO.NET物件模型物件模型物件模型物件模型

� ADO.NET的主要類別物件有:Connection、Command、DataReader和DataSet,其物件模型如下圖所示:

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

12

ADO.NET物件物件物件物件

物件物件物件物件 說明說明說明說明

Connection 建立與資料來源間的連接

Command 對資料來源執行指令,以資料庫來說,就是執行 SQL

指令敘述

DataReader 針對資料來源使用 Command物件執行指令,可以取得

唯讀(Read-Only)和只能向前(Forward-Only)的串

流資料,每一次只能從資料來源讀取一列資料(即一

筆)儲存到記憶體,所以執行效率非常的高

DataSet和 DataTable DataSet物件是由 DataTable物件組成的集合物件,

DataSet物件代表儲存在記憶體的資料庫,每一個

DataTable儲存一個資料表的記錄資料,而且可以設定

資料表間的關聯性(Relationship)

DataAdapter DataSet和 Connection物件資料連接間的橋樑,可以將

記錄資料填入 DataSet物件

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

13

命名空間命名空間命名空間命名空間

� ADO.NET類別分屬數個命名空間,可以用來存取資料庫的資料。換句話說,ASP.NET網頁需要匯入指定的命名空間,才能使用ADO.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 14: 第8章 ADO.NET 元件與 資料繫結

14

ASP.NET的資料控制項的資料控制項的資料控制項的資料控制項

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

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

� 資料控制項依其功能可以分為:

� 資料來源控制項

� 資料邊界控制項

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

15

資料來源控制項資料來源控制項資料來源控制項資料來源控制項

� 資料來源控制項(DataSource Controls)可以使用宣告方式來存取資料來源的資料。例如:宣告資料來源是SQL Server資料庫和指定相關屬性後,就可以存取資料庫的記錄資料。

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

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

16

資料來源控制項種類資料來源控制項種類資料來源控制項種類資料來源控制項種類

資料來源控制項資料來源控制項資料來源控制項資料來源控制項 說明說明說明說明

SqlDataSource 存取關聯式資料庫的資料來源。可以是 SQL Server,

Access和 Oracle等,如果使用 SQL Server,控制項自

動使用 SqlClient類別來最佳化資料庫存取

AccessDataSource 存取微軟 Access資料庫,屬於 SqlDataSource控制項

的特別版本

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

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

ObjectDataSource 存取類別物件的資料來源,可以在多層架構存取中間

層的資料來源,請參閱第 16章

LinqDataSource 使用 LINQ(Language-Integrated Query)從資料物件

存取和修改資料,請參閱第 16章

EntityDataSource 存取實體資料模型(EDM)的資料來源,請參閱第 16

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

17

資料邊界控制項資料邊界控制項資料邊界控制項資料邊界控制項

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

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

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

18

資料邊界控制項種類資料邊界控制項種類資料邊界控制項種類資料邊界控制項種類

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

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

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

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

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

19

本機與伺服器資料庫本機與伺服器資料庫本機與伺服器資料庫本機與伺服器資料庫

� 對於ASP.NET網站使用的資料庫來說,SQL Server 2008 Express版可以建立兩種資料庫,其說明如下所示:� 伺服器資料庫(Server Database):伺服器資料庫是屬於伺服器,所以,在伺服器上執行的應用程式都可以存取此資料庫。不過,VWD並不能建立伺服器資料庫,我們只能自行安裝和使用SQL Server Management Studio Express管理工具來建立。

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

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

20

加入資料庫加入資料庫加入資料庫加入資料庫

� 我們可以在VWD開啟ASP.NET網站後,直接將資料庫加入ASP.NET網站。例如:將SQL Server資料庫School.mdf,加入ASP.NET網站的「App_Data」資料夾,如下圖所示:

選加入的資料庫選加入的資料庫選加入的資料庫選加入的資料庫

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

21

ADO.NET的的的的DataReader物件物件物件物件

� 開啟DataReader物件

� Command物件的Execute()方法

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

22

ADO.NET的的的的DataReader物件物件物件物件

� 在ASP.NET程式碼可以使用ADO.NET元件的DataReader或DataSet物件取得記錄資料。因為本書在第9章才會詳細說明SQL查詢指令,所以,本章範例都是使用同一個SQL查詢指令,如下所示:

SELECT * FROM Students

� 上述SQL指令SELECT沒有WHERE子句的任何條件,查詢結果可以取得資料表Students的所有記錄和欄位資料。

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

23

匯入命名空間匯入命名空間匯入命名空間匯入命名空間

� DataReader物件是使用類似檔案串流來讀取記錄資料,它只能讀取,不能插入、刪除和更新記錄資料。在ASP.NET網頁首先需要匯入命名空間,SQL Server與SQL Server Express匯入的命名空間,如下所示:

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

<%@ Import NameSpace="System.Data.SqlClient" %>

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

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

24

建立建立建立建立Connection物件物件物件物件

� 在ASP.NET網頁建立Connection物件,如下所示:strDbCon = "Data Source=.\SQLEXPRESS;" &

"AttachDbFilename=" &

Server.MapPath("App_Data\School.mdf") &

";Integrated Security=True;" &

"TrustServerCertificate=False;" &

"User Instance=True;Context Connection=False"

Dim objCon As SqlConnection

objCon = New SqlConnection(strDbCon)

� strDbCon變數值是SQL Server 2008 Express的連接字串。

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

25

開啟資料庫連接開啟資料庫連接開啟資料庫連接開啟資料庫連接

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

objCon.Open()

� 上述程式碼使用名為objCon的Connection物件開啟資料庫連接。

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

26

建立建立建立建立Command物件物件物件物件

� 在建立和開啟Connection物件後,就可以使用SQL指令和Connection物件作為參數來建立Command物件,如下所示:strSQL = "SELECT * FROM Students"

objCmd = New SqlCommand(strSQL, objCon)

� 程式碼使用New運算子和建構子來建立Command物件,第2個參數是開啟的資料庫連接物件,表示向此資料來源執行第1個參數的SQL指令敘述。

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

27

執行執行執行執行SQL指令敘述查詢資料表指令敘述查詢資料表指令敘述查詢資料表指令敘述查詢資料表

� 接著使用Command物件的ExecuteReader()方法執行SQL查詢指令,如下所示:

objDR = objCmd.ExecuteReader()

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

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

28

讀取記錄資料讀取記錄資料讀取記錄資料讀取記錄資料

� DataReader物件是一種資料串流,在ASP.NET網頁可以使用objDR.HasRows屬性判斷是否有記錄資料,如果有就為True,然後可以使用Do While迴圈讀取資料表的記錄資料,如下所示:Do While objDR.Read()

lblOutput.Text &= objDR("sid") & " - "

lblOutput.Text &= objDR("name") & " - "

lblOutput.Text &= objDR("tel") & "<br/>"

Loop

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

29

關閉關閉關閉關閉DataReader和資料庫連接和資料庫連接和資料庫連接和資料庫連接

� 在完成後就可以關閉DataReader串流物件和資料庫連接,如下所示:

objDR.Close()

objCon.Close()

� 上述程式碼使用Close()方法關閉DataReader和Connection物件。

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

30

指令種類指令種類指令種類指令種類

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

Execute()方法方法方法方法 說明說明說明說明

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

作指令 INSERT、DELETE和 UPDATE

ExecuteScalar() 執行 SQL指令從資料表取得 1個欄位資料,如果是資料

表,就是第 1筆記錄的第 1個欄位值

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

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

31

ExecuteScalar()方法方法方法方法

� ExecuteScalar()方法可以取得資料表指定記錄的單一欄位值,如下所示:

lblOutput.Text = "查詢結果: " &

objCmd.ExecuteScalar()

� 上述程式碼執行Command物件objCmd的SQL指令,如果傳回值不只一個。例如:SQL指令如果是查詢多筆記錄,取得的是第1筆記錄的第1個欄位。

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

32

ExecuteScalar()方法方法方法方法

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

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

33

ADO.NET的的的的DataSet物件物件物件物件

� DataSet物件的基礎

� 將記錄填入DataSet物件

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

34

DataSet物件的基礎物件的基礎物件的基礎物件的基礎

� DataSet物件是由DataTable物件所組成,DataSet物件相當於是資料庫,DataTable物件就是資料表。

� DataTable物件是以表格來儲存資料表的記錄資料,可以使用列或欄來處理,即使用DataRowCollection和DataColumnCollection集合物件。在集合物件的每一個DataRow物件是一列,也就是一筆記錄,每一個DataColumn物件是一欄。

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

35

DataSet物件的基礎圖物件的基礎圖物件的基礎圖物件的基礎圖

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

36

建立與開啟建立與開啟建立與開啟建立與開啟Connection物件物件物件物件

� 首先使用Connection物件建立資料連接物件objCon後,使用Open()方法開啟資料來源,如下所示:

objCon = New SqlConnection(strDbCon)

objCon.Open()

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

37

建立建立建立建立DataAdapter物件物件物件物件

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

strSQL = "SELECT * FROM Students"

objDataAdapter = New SqlDataAdapter(strSQL, objCon)

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

38

建立建立建立建立DataSet物件填入記錄資料物件填入記錄資料物件填入記錄資料物件填入記錄資料

� 接著建立DataSet物件,將取得的記錄資料填入DataSet物件,如下所示:

Dim objDataSet As DataSet = New DataSet()

objDataAdapter.Fill(objDataSet, "Students")

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

39

顯示顯示顯示顯示DataTable物件的所有記錄物件的所有記錄物件的所有記錄物件的所有記錄

� 使用別名取得指定的DataTable物件後,以For Each迴圈取出DataTable物件Rows屬性的每一個DataRow物件,也就是每一筆記錄,如下所示:

Dim objRow As DataRow

For Each objRow In objDataSet.Tables("Students").Rows

lblOutput.Text &= objRow("sid") & " - "

lblOutput.Text &= objRow("name") & " - "

lblOutput.Text &= objRow("tel") & " - "

lblOutput.Text &= objRow("birthday") & "<br/>"

Next

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

40

關閉資料庫連接關閉資料庫連接關閉資料庫連接關閉資料庫連接

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

objCon.Close()

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

41

資料繫結的基礎資料繫結的基礎資料繫結的基礎資料繫結的基礎

� 資料繫結簡介

� 建立ListBox控制項的簡單資料繫結

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

42

資料繫結簡介資料繫結簡介資料繫結簡介資料繫結簡介

� ASP.NET控制項支援資料繫結技術,能夠將不同資料來源的集合物件、陣列、DataReader或DataView(可以視為從DataSet物件建立的檢視表)等資料整合到ASP.NET控制項。

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

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

43

簡單資料繫結簡單資料繫結簡單資料繫結簡單資料繫結

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

� 例如:清單控制項的ListBox、RadioButtonList、CheckBoxList和DropDownList等都支援簡單資料繫結。

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

44

宣告式的資料繫結宣告式的資料繫結宣告式的資料繫結宣告式的資料繫結

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

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

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

45

建立建立建立建立ListBox控制項的簡單資料繫結控制項的簡單資料繫結控制項的簡單資料繫結控制項的簡單資料繫結

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

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

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

46

建立建立建立建立ListBox控制項的簡單資料繫結控制項的簡單資料繫結控制項的簡單資料繫結控制項的簡單資料繫結

� 首先建立ArrayList物件作為資料來源,如下所示:

Dim names As ArrayList = New ArrayList()

names.Add("陳會安")

names.Add("江小魚")

names.Add("張無忌")

names.Add("陳允傑")

� 接著指定ListBox控制項的DataSource屬性,如下所示:

lstNames.DataSource = names

lstNames.DataBind()

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

47

SqlDataSource資料來源控制項資料來源控制項資料來源控制項資料來源控制項

� 建立SqlDataSource控制項

� 資料來源控制項的標籤內容

� 傳回沒有重複的欄位值

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

48

建立建立建立建立SqlDataSourceSqlDataSourceSqlDataSourceSqlDataSource控制項控制項控制項控制項

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

SqlDataSourceSqlDataSourceSqlDataSourceSqlDataSource控制項控制項控制項控制項

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

49

新增新增新增新增SqlDataSource控制項控制項控制項控制項

步驟一:新增SqlDataSource控制項

� 在VWD的「工具箱」視窗提供資料來源控制項,我們可以在【設計】標籤直接拖拉來新增資料來源控制項,如下圖所示:

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

50

設定資料來源設定資料來源設定資料來源設定資料來源

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

將連接字串儲存在組態檔將連接字串儲存在組態檔將連接字串儲存在組態檔將連接字串儲存在組態檔

選選選選School.mdfSchool.mdfSchool.mdfSchool.mdf資料連接資料連接資料連接資料連接

建立建立建立建立SQLSQLSQLSQL指令指令指令指令

測試測試測試測試SQLSQLSQLSQL指令指令指令指令

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

51

選擇控制項使用的資料來源控制項

步驟二:選擇控制項使用的資料來源控制項

� 在新增資料來源控制項和設定好資料來源後,我們就可以在ListBox控制項選擇使用的資料來源,如下圖所示:

在在在在【【【【選取資料來選取資料來選取資料來選取資料來

源源源源】】】】欄選欄選欄選欄選

【【【【SqlDataSource1SqlDataSource1SqlDataSource1SqlDataSource1】,】,】,】,ListBoxListBoxListBoxListBox控制項控制項控制項控制項

顯示顯示顯示顯示【【【【namenamenamename】】】】欄欄欄欄位位位位,,,,選取欄位值是選取欄位值是選取欄位值是選取欄位值是

【【【【sidsidsidsid】】】】欄位欄位欄位欄位

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

52

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

步驟三:新增事件處理程序來顯示使用者的選擇� 在新增ListBox控制項後,我們就可以建立Button1控制項的事件處理程序,如下所示:

Protected Sub Button1_Click(ByVal sender As Object, _

ByVal e As System.EventArgs)

If lstNames.SelectedIndex > -1 Then

lblOutput.Text = "選擇的學號: " &

lstNames.SelectedItem.Value

End If

End Sub

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

53

SqlDataSource控制項標籤內容控制項標籤內容控制項標籤內容控制項標籤內容

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

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

SelectCommand="SELECT * FROM [Students]">

</asp:SqlDataSource>

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

54

SqlDataSource控制項標籤屬性說明控制項標籤屬性說明控制項標籤屬性說明控制項標籤屬性說明

� ProviderName屬性值是定義在web.config組態檔的參數,如下所示:

<%$ ConnectionStrings:ConnectionString %>

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

屬性屬性屬性屬性 說明說明說明說明

ProviderName 提供者名稱是 System.Data.OleDb 或

System.Data.SqlClient(預設值)

ConnectionString 資料庫連接字串

SelectCommand SQL 的 SELECT 查詢指令

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

55

web.config組態檔組態檔組態檔組態檔

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

<connectionStrings>

<add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\School.mdf;Integrated Security=True;UserInstance=True"

providerName="System.Data.SqlClient" />

</connectionStrings>

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

56

傳回沒有重複的欄位值傳回沒有重複的欄位值傳回沒有重複的欄位值傳回沒有重複的欄位值

� 當我們使用資料繫結將資料庫欄位填入DropDownList控制項時,可能會遇到重複值欄位的問題,如下圖所示:

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

57

傳回沒有重複的欄位值傳回沒有重複的欄位值傳回沒有重複的欄位值傳回沒有重複的欄位值

� 選資料來源控制項,在「SqlDataSource工作」功能表選【設定資料來源】超連結,請重複按【下一步】鈕,直到到達設定SQL陳述式的步驟。

勾選勾選勾選勾選【【【【只傳回不重只傳回不重只傳回不重只傳回不重

複的資料列複的資料列複的資料列複的資料列】】】】

按按按按【【【【ORDER BYORDER BYORDER BYORDER BY】】】】

鈕新增排序條件鈕新增排序條件鈕新增排序條件鈕新增排序條件