Chapter 12

158
著作權所有 © 旗標出版股份有限公司 Chapter 12 T-SQL 語法與 ASP. NET

description

Chapter 12. T-SQL 語法與 ASP.NET. 本章提要. 12 - 1 T-SQL 語法基礎 12 - 2 資料來源控制項的查詢設定 12 - 3 查詢多個資料表 12 - 4 自訂資料來源的編輯與刪除功能. T-SQL 語法與 ASP.NET. 前一章我們介紹了如何使用資料繫結技術來瀏覽資料庫中的資料 , 本章將進一步說明如何結合 T-SQL 查詢語法時 , 讓網頁能依需要顯示特定的資料;以及更多的資料控制項設計技巧。. 12 - 1 T-SQL 語法基礎. - PowerPoint PPT Presentation

Transcript of Chapter 12

Page 1: Chapter 12

著作權所有 © 旗標出版股份有限公司

Chapter 12

T-SQL 語法與 ASP.NET

Page 2: Chapter 12

2

本章提要 12 - 1 T-SQL 語法基礎 12 - 2 資料來源控制項的查詢設定 12 - 3 查詢多個資料表 12 - 4 自訂資料來源的編輯與刪除功能

Page 3: Chapter 12

3

T-SQL 語法與 ASP.NET 前一章我們介紹了如何使用資料繫結技術

來瀏覽資料庫中的資料 , 本章將進一步說明如何結合 T-SQL 查詢語法時 , 讓網頁能依需要顯示特定的資料;以及更多的資料控制項設計技巧。

Page 4: Chapter 12

4

12 - 1 T-SQL 語法基礎 在關聯式資料庫的世界中 , 用來存取資料庫的

語法是結構化查詢語言 SQL (Structured Query Language) 。

標準組織 ISO / ANSI 早已制定出 SQL 語言標準 , 但各資料庫管理系統廠商在實作其產品所用的 SQL 語言時 , 都是在各自的產品架構下 , 設計出『儘量』符合 SQL 標準的自家語言 , 因此各資料庫管理系統所支援的 SQL 語言都不太一樣 , 例如微軟公司的 SQL Server 所使用的是 Transact-SQL ( 簡稱 T-SQL) 。

Page 5: Chapter 12

5

T-SQL 語法基礎 當我們用資料來源控制項連接資料庫時 ,

就會設定向資料庫取得所需資料的 T-SQL 語法 , 只不過前一章介紹時都是以圖形介面撰擇所要查詢的資料表及欄位、由 VWD 自動替我們產生合適的 T-SQL 查詢敘述 , 而網頁在執行時 , 即是利用此查詢敘述向資料庫進行查詢 , 資料庫則將查詢結果傳回。

Page 6: Chapter 12

6

T-SQL 語法基礎

Page 7: Chapter 12

7

T-SQL 語法基礎 除了單純查詢整個資料表的所有欄位或是

部分欄位外 , 我們也可只查詢符合特定條件的資料 , 這些都可透過適當的 T-SQL 語法來達到 , 像是同時擷取兩個資料表的內容 , 並整合在一起 ... 等。

雖然 VWD 提供了友善的工具幫助我們建立 T-SQL 查詢敘述的內容 , 減少我們需動手自行輸入查詢敘述的必要。

Page 8: Chapter 12

8

T-SQL 語法基礎 但 VWD 畢竟不是萬能 , 有些特別的語法

仍需手動輸入;再者有時候僅是要做小小的修改 , 也不必動用到 VWD 的精靈 , 因此若能熟悉 T-SQL 的基本語法 , 對於設計資料庫相關的網頁時將會更有幫助。

Page 9: Chapter 12

9

學習 T-SQL 語法的練習網頁 為測試及練習稍後的 T-SQL 語法 , 我們

先建立一個練習專用的網頁。 這個網頁包含一個 SqlDataSource 控制項

及 GridView 控制項 , 但並不完全採用前一章的建立方式: SqlDataSource 控制項:只設定連接字串 ,

但不設定查詢語法 , 換言之其 SelectCommand 屬性是空白的 (您也可依前一章的方式設妥控制項後 , 再將此屬性清空 ) :

Page 10: Chapter 12

10

學習 T-SQL 語法的練習網頁

Page 11: Chapter 12

11

學習 T-SQL 語法的練習網頁 GridView 控制項:雖設定繫結上述的 S

qlDataSource 控制項 , 但因資料來源控制項未設定查詢敘述 , 即無法取得資料 , 所以 GridView 控制像也無法取得細節的欄位資訊。

Page 12: Chapter 12

12

學習 T-SQL 語法的練習網頁

Page 13: Chapter 12

13

學習 T-SQL 語法的練習網頁 另外我們再加入一個用來輸入查詢敘述的 T

extBox 欄位及 Button 按鈕:

Page 14: Chapter 12

14

學習 T-SQL 語法的練習網頁 按下按鈕時 , 程式即會將輸入至 TextBox

的字串當成查詢敘述設定給 SqlDataSource 控制項的 SelectCommand 屬性 , 讓查詢結果立即顯示出來:

Page 15: Chapter 12

15

學習 T-SQL 語法的練習網頁

Page 16: Chapter 12

16

學習 T-SQL 語法的練習網頁 在練習時可能會因輸入不合法的 T-SQL 敘

述而引發例外 , 所以我們特別將主要的程式放在 Try / Catch 結構中。

當控制項因 T-SQL 語法錯誤而引發例外時 , 即會輸出相關錯誤內容:

Page 17: Chapter 12

17

學習 T-SQL 語法的練習網頁 第 16 行的程式將 GridView 設為隱藏 ,

只是為避免在發生例外時 , 網頁上不會仍留有前一次練習所留下來的資料。

Page 18: Chapter 12

18

SELECT 語法 SQL 語言的查詢敘述為 SELECT (SQL

語言不分大小寫 ), 前面提過各廠商實作的自家 SQL 語法都不儘相同 , 但在 SELECT 的部份倒是都差不多。

因為本章以使用 SQL Server 資料庫為主 , 所以此處也以 T-SQL 語法為主 , TSQL 的 SELECT 語法如下:

Page 19: Chapter 12

19

SELECT 語法 這個最基本的語法其實在前一章範例已看

過其用法 , 資料表名稱就是來源資料庫中的資料表名稱 , 通常為方便辨識 , 會在名稱前後加上 [...] 方括號。

欄位名稱的部份就是直接列出要查詢的任何欄位名稱 , 要查詢多個欄位名稱時 , 其間需以逗號 (,) 分開 , 而且也可加上方括號 (非必要 ) :

Page 20: Chapter 12

20

SELECT 語法

Page 21: Chapter 12

21

SELECT 語法 若要查詢資料表中的所有欄位 , 則可用 *

或 ALL 來 代表:

Page 22: Chapter 12

22

SELECT 語法 此外 , 欄位名稱前可加上『資料表名稱 . 』的

語法 , 明確表示此欄位是存於哪一個資料表:

當然在本例中 , 資料來源就只有 [書籍 ] 資料表 , 因此這樣的寫法看起來是多餘的。但當我們在 SELECT 敘述中同時查詢多個資料表時 , 這樣的寫法就能分清楚各欄位是出自哪一個資料表 , 在本章稍後我們就會看到這樣的應用。

Page 23: Chapter 12

23

別名

指定欄位名稱可使用別名 (Alias), 使用別名就是讓查詢所得的資料中 , 欄位名稱換成別名顯示 , 而非該欄位原本在資料表中的名稱。指定別名時的語法如下:

例如下面的例子 , 就是用別名讓欄位名稱都變成英文:

Page 24: Chapter 12

24

別名

Page 25: Chapter 12

25

別名

SELECT 敘述也可一次查詢多個資料表 , 以取得來自不同資料表的相關資料欄位 , 在本章稍後會進一步說明此種用法。

Page 26: Chapter 12

26

自訂欄位 列在 SELECT 後面的欄位也可以是資料表

中沒有的欄位 , 我們可用『欄位名稱 = 運算式』的方式 , 動態產生此自訂欄位的資料。

例如在 [書籍 ] 資料表中有個『單價』欄位 , 而我們可將它乘上折數後產生折扣價的自訂欄位:

Page 27: Chapter 12

27

自訂欄位 執行結果如下:

Page 28: Chapter 12

28

T-SQL 的函數 T-SQL 和一般程式語言一樣 , 內建了許多常用的資料處理、計算、統計函數 (Function), 這些函式都能應用在查詢敘述中 , 以便對資料做進一步的處理 , 再將結果傳回。

例如 COUNT() 是個統計資料共有幾筆的函數 , 而以下的查詢敘述 , 即可查詢『書籍』資料表中有幾本書籍:

Page 29: Chapter 12

29

T-SQL 的函數

對各 T-SQL 函數的功能、用法有興趣者 , 請參考 T-SQL 相關書籍。

Page 30: Chapter 12

30

WHERE 子句 在基本的 SELECT 查詢後面可加上多種子句 (Clause) 來限制查詢的範圍 , 其中最常見的子句之一就是 WHERE 子句 , 其功用是設定查詢的條件 , 語法如下:

Page 31: Chapter 12

31

WHERE 子句 條件的表示方式就和 Visual Basic 在 If 、

While 之類的敘述中所用的條件運算式相似 , 可用各種比較運算子 (> 、 = 、 < 等 , 後詳 ) 來限制查詢的條件。

例如要查詢『單價』為 299 元的書籍之名稱 , 則條件即為『單價 = 299 』 , 所以查詢敘述可寫成:

Page 32: Chapter 12

32

WHERE 子句

Page 33: Chapter 12

33

比較與邏輯運算子 使用 WHERE 子句時 , 通常要運用 T-SQ

L 的比較與邏輯運算子來建立各種條件。T-SQL 的比較運算子有下列九種 , 其用法很直覺 , 就不個別說明:

Page 34: Chapter 12

34

比較與邏輯運算子 T-SQL 的邏輯運算子則多達十種 , 以下簡

單介紹其中較常見的數種: AND 、 OR 、 NOT BETWEEN LIKE

Page 35: Chapter 12

35

AND 、 OR 、 NOT 也就是『且』、『或』、『否』的意思 ,

利用這 3 個運算子 , 可組合出複雜的條件 , 例如:

Page 36: Chapter 12

36

BETWEEN

和字面的意思一樣 , 用以設定某個範圍的條件 , 兩個範圍值間要用 AND 連接 , 例如:

Page 37: Chapter 12

37

BETWEEN

上例的 WHERE 條件也可寫成『單價 > =

200 AND 單價 < = 499 』 , 意思相同。

Page 38: Chapter 12

38

LIKE

可用以指定要查詢的欄位中所含的『部份』內容 , 其語法為『 LIKE '比對字串 ' 』 , 比對字串中可使用以下特殊字元: % :代表零或多個任意字元 , 例如 'SQL%'

即表示以 'SQL' 開頭的任何字串;而 '%SQL%' 則表示任何包含有 'SQL' ( 不論位置 ) 的字串。

Page 39: Chapter 12

39

LIKE

Page 40: Chapter 12

40

LIKE

_ :代表一個任意字元 , 例如 ‘ S_ _ ’ 表示任何以 ‘ S’ 開頭、長度為 3 個字 (開頭的 S 再加兩個任意字元 ) 的字串 ( 中英元字元都算一個字 ) 。

Page 41: Chapter 12

41

LIKE

Page 42: Chapter 12

42

LIKE

[ ] :方括號中可放任何字元或範圍 , 代表符合方括號所列的任何字元 , 例如 ‘ [ABC]%’ 表示任何以 A 或 B 或 C 開頭的字串。

方括號若加入 ^ 符號 , 則表示相反的意思 , 例如 '[^ABC]%' 表示任何不是以 A 、B 、 C 開頭的字串。

Page 43: Chapter 12

43

LIKE

Page 44: Chapter 12

44

ORDER BY 子句 ORDER BY 子句是用以設定傳回資料的排列順序 , 雖然 GridView 可啟用排序功能 , 讓瀏覽者可選擇排序方式 , 但 DetailsView 和 FormView 則無此功能。

或者您想使用 GridView 顯示資料 , 但只使用固定的排序方式 , 此時都可用 ORDER BY 子句指定要依哪一個欄位排序 , 而且還可用 ASC (升冪 , 由小到大 , 預設值 ) 或 DESC (降冪 , 由大到小 ) 關鍵字指定排列方式:

Page 45: Chapter 12

45

ORDER BY 子句

Page 46: Chapter 12

46

ORDER BY 子句 在 ORDER BY 子句中可指定多個排列依據 ( 用逗號分隔 ), 表示當第 1 個排序條件所得的結果中有順序相同的記錄時 , 可再依另一個條件排序:

Page 47: Chapter 12

47

ORDER BY 子句

Page 48: Chapter 12

48

12 - 2 資料來源控制項的查詢設定 SELECT 查詢語法的變化 , 有部份是可直

接在資料來源控制項的設定畫面中 , 由 VWD 替我們自行產生 , 但有時則需自行輸入。

以下我們先複習一下在資料來源控制項中的設定 , 之後再介紹如何使用 VWD 提供的查詢產生器建立複雜的查詢敘述。

Page 49: Chapter 12

49

資料來源控制項的 ORDER BY 設定 在設定資料來源控制項的資料來源時 , 即

可選擇 ORDER BY 子句的資料排序方式。請先建立一個新的網頁 (Ch12-02.aspx), 在網頁中加入 SqlDataSource 控制項後依如下方式設定:

Page 50: Chapter 12

50

資料來源控制項的 ORDER BY 設定

Page 51: Chapter 12

51

資料來源控制項的 O

RD

ER BY

設定

Page 52: Chapter 12

52

資料來源控制項的 O

RD

ER BY

設定

Page 53: Chapter 12

53

資料來源控制項的 ORDER BY 設定 如上所示 , 只要透過圖形介面的操作 , 即

可快速建立 ORDER BY 子句 , 讓查詢結果自動依指定的方式排序。

在網頁中加入與之繫結的 GridView 並瀏覽網頁即可看到結果:

Page 54: Chapter 12

54

資料來源控制項的 ORDER BY 設定

Page 55: Chapter 12

55

資料來源控制項的 ORDER BY 設定 此外我們也可以模仿 Ch12-01.aspx 的技

巧 , 透過其它控制項設定 ORDER BY 的排序方式 , 也就是在程式中修改 SqlDataSource 控制項的 SelectCommand 屬性 , 在其中加上必要的 ORDER BY 子句即可 , 讀者可自行測試之。

Page 56: Chapter 12

56

資料來源控制項的 WHERE 設定 和 ORDER BY 子句類似 , 在設定資料來

源時 , 即可設定查詢時的 WHERE 子句內容。

而且 WHERE 子句的設定具有較多的變化 , 例如可選擇以 Cookie 的值、 Session 變數值、其它控制項的屬性值、查詢字串 (QueryString) 的值等不同參數 , 當成 WHERE 的條件。

Page 57: Chapter 12

57

資料來源控制項的 WHERE 設定 例如我們可應用前面介紹的 LIKE 語法 ,

設計一個可用關鍵字搜尋書籍名稱的網頁。 請新增一個網頁 ( 以下範例為 Ch12-03.as

px), 網頁中當然要放入一個用來輸入書名關鍵字的 TextBox 控制項:

Page 58: Chapter 12

58

資料來源控制項的 WHERE 設定

Page 59: Chapter 12

59

資料來源控制項的 WHERE 設定 接著加入查詢書籍資料的 SqlDataSource 控

制項 , 並依如下方式設定:

Page 60: Chapter 12

60

資料來源控制項的 WHERE 設定

Page 61: Chapter 12

61

資料來源控制項的 WHERE 設定

Page 62: Chapter 12

62

資料來源控制項的 WHERE 設定

Page 63: Chapter 12

63

資料來源控制項的 W

HER

E

設定

Page 64: Chapter 12

64

資料來源控制項的 WHERE 設定 其中主要的設定就在於 SqlDataSource 控

制項的 SELECT 語法。 以上設定就是讓 SELECT 敘述加上『 WH

ERE ([書籍名稱 ] LIKE ‘%’ + @ 書籍名稱 + ‘%’) 』字句 , 至於 @ 書籍名稱這個參數的設定 , 切換到原始檔模式後 , 即可在 <asp:SqlDataSource> 標籤中找到:

Page 65: Chapter 12

65

資料來源控制項的 WHERE 設定

Page 66: Chapter 12

66

資料來源控制項的 WHERE 設定 第 36 行的 <asp:ControlParameter> 標籤即是用來設定參數值取自於控制項的 SELECT 參數 , 此標籤中指了參數名稱為 "書籍名稱 " 、參數值來源的控制項為 "TextBox1" 、參數值來源是該控制項的 Text 屬性、參數值資料型別為字串 (String) 。

設好資料來源控制項後 , 再加入 GridView 控制項 , 並與資料來源控制項繫結。

Page 67: Chapter 12

67

資料來源控制項的 WHERE 設定 設定完成並存檔後 , 即可瀏覽網頁。 由於在前述的步驟中未設定參數預設值 ,

所以初次瀏覽網頁時 , 會看不到任何資料:

Page 68: Chapter 12

68

資料來源控制項的 WHERE 設定 2 按下 Enter 鍵

Page 69: Chapter 12

69

GridView 搭配 DetailsView 雖然 GridView 預設沒有插入新記錄的功

能 , 不過我們可以讓它搭配有插入功能的 DetailsView 使用:網頁中同時加入這兩個控制項 , 當瀏覽者選擇 GridView 中某筆記錄時 , 即於 DetailsView 顯示該筆記錄的全部欄位 , 因此只要開啟 DetailsView 插入新記錄的功能 , 瀏覽者即可加入一筆新記錄。

要做到此功能 , 需在網頁中加入如下的控制項:

Page 70: Chapter 12

70

GridView 搭配 DetailsView SqlDataSource 和與之繫結的 GridView,

可列出資料表中每一筆記錄 , 且這個 GridView 必須具有選擇記錄的功能。

加入另一個 SqlDataSource, 但必須設定其查詢資料庫時 , 只選出已在 GridView 中選取的記錄。

加入與第二個 SqlDataSource 繫結的 DetailsView, 並啟用後者的新增記錄功能。

Page 71: Chapter 12

71

GridView 搭配 DetailsView 請先建立一空白網頁 Ch12-04.aspx, 我們

先加入查詢所有書籍的 SqlDataSource 控制項 , 並將 ID 設為 “ AllBooks” ;然後再加入與之繫結的 GridView 控制項 , 並啟用 GridView 的選取功能:

Page 72: Chapter 12

72

GridView 搭配 DetailsView

Page 73: Chapter 12

73

GridView 搭配 DetailsView

Page 74: Chapter 12

74

GridView 搭配 DetailsView

Page 75: Chapter 12

75

GridView 搭配 DetailsView

Page 76: Chapter 12

76

GridView 搭配 DetailsView

Page 77: Chapter 12

77

GridView 搭配 DetailsView

Page 78: Chapter 12

78

GridView 搭配 DetailsView

Page 79: Chapter 12

79

GridView 搭配 DetailsView

Page 80: Chapter 12

80

GridV

iew

搭配 D

etailsV

iew

Page 81: Chapter 12

81

GridView 搭配 DetailsView

Page 82: Chapter 12

82

GridView 搭配 DetailsView

Page 83: Chapter 12

83

GridView 搭配 DetailsView 在前面的步驟中 , 主要是設定當我們在 Gri

dView 中所選擇一筆記錄時 , 會使 “ OnlyOneBook” 控制項也只會由資料表查詢對應記錄的全部欄位 , 以便讓 DetailsView 控制項顯示該筆記錄的全部欄位。

瀏覽網頁的效果如下:

Page 84: Chapter 12

84

GridView 搭配 DetailsView

Page 85: Chapter 12

85

GridView 搭配 DetailsView

Page 86: Chapter 12

86

12 - 3 查詢多個資料表

參考其它資料表的查詢 查詢多個資料表

Page 87: Chapter 12

87

參考其它資料表的查詢 在關聯式資料庫中 , 在做過正規化後 , 經常會讓我們想知道的資料分散在多個資料表中。

例如在範例 [書籍 ] 資料表中有記錄書籍分類的『類別編號』欄位 , 但該欄位只記錄編號 , 實際書籍分類的名稱 , 則另存於 [書籍類別 ] 資料表的『類別名稱』欄位。

Page 88: Chapter 12

88

參考其它資料表的查詢 前一節介紹過用 GridView-DetailsView 搭配顯示書籍資料的用法 , 不過當時兩個控制項所用的資料來源 , 都是查詢同一個資料表 , 只是 SELECT 敘述的寫法不同。

在此我們則改變一下 , 讓兩個資料來源控制項分別查詢 [書籍 ] 和 [書籍類別 ] 資料表 , 讓瀏覽者選擇某個書籍類別時 , 網頁即會列出屬於該類別的所有書籍。

Page 89: Chapter 12

89

參考其它資料表的查詢

Page 90: Chapter 12

90

參考其它資料表的查詢 如圖所示 , 顯示所有書籍類別的是用 Drop

DownList 控制項 , 它也是可用於資料繫結的控制項之一。

請先建立一空白網頁 (光碟範例 Ch12-05.aspx), 我們先在網頁中加入一個 SqlDataSource 控制項 , 並將其查詢敘述設為 "SELECT * FROM [書籍分類 ]", 然後加入 DropDownList 控制項 , 並依如下方式設定:

Page 91: Chapter 12

91

參考其它資料表的查詢

Page 92: Chapter 12

92

參考其它資料表的查詢

Page 93: Chapter 12

93

參考其它資料表的查詢 接著再加入第 2 個 SqlDataSource 控制

項 , 除了以我們熟悉的方式設為查詢 [書籍 ] 資料表的內容外 , 並做如下的 WHERE 設定:

Page 94: Chapter 12

94

參考其它資料表的查詢

Page 95: Chapter 12

95

參考其它資料表的查詢 最後加入與上述資料來源繫結的 GridView

控制項 ( 也可改用其它資料控制項 ) 並存檔。

瀏覽網頁時 , 預設會出現符合 DropDownList 控制項中第一項『入門』類的書籍 , 選擇其它類型時 , 就會即時反應出現:

Page 96: Chapter 12

96

參考其它資料表的查詢

Page 97: Chapter 12

97

查詢多個資料表 上一個例子是由 DropDownList 控制項顯

示 [書籍分類 ] 資料表的內容 , 再於資料來源控制項依其選擇的值來設定查詢 [書籍 ] 資料表時的篩選條件。

但在查詢資料的應用中 , 也常見同時需從多個資料表取出資料 , 並同時顯示出來:例如顯示書籍資料時 , 『書籍分類』就不是只顯示編號 , 而會列出類別名稱。

Page 98: Chapter 12

98

查詢多個資料表

Page 99: Chapter 12

99

查詢多個資料表 要達到此目的 , 只需在資料來源控制項中

下達可正確查詢兩個資料表的 SELECT 敘述即可 , 若對 SELECT 語法不夠熟悉 , 也可透過 VWD 的查詢產生器替您產生必要的查詢敘述。

請先建立一空白網頁 (Ch12-06.aspx), 先加入 SqlDataSource 控制項並設妥連接字串 , 再依如下方式設定:

Page 100: Chapter 12

100

查詢多個資料表

Page 101: Chapter 12

101

查詢多個資料表

Page 102: Chapter 12

102

查詢多個資料表

Page 103: Chapter 12

103

查詢多個資料表

Page 104: Chapter 12

104

查詢多個資料表

Page 105: Chapter 12

105

查詢多個資料表

Page 106: Chapter 12

106

查詢多個資料表

Page 107: Chapter 12

107

查詢多個資料表 建好資料來源後 , 在網頁中加入與之繫結

的資料控制項 , 例如使用 GridView :

Page 108: Chapter 12

108

查詢多個資料表 若想修改類別名稱欄位的表頭文字 , 可切

換到原始檔模式 , 到 <asp:GridView> 標籤之內修改:

Page 109: Chapter 12

109

查詢多個資料表

Page 110: Chapter 12

110

查詢多個資料表 存檔後瀏覽時 , 即可看到網頁中顯示的書籍資料 , 不再只是列出難解的『類別編號』 , 而會列出類別名稱:

Page 111: Chapter 12

111

12 - 4 自訂資料來源的編輯與刪除功能 使用自訂查詢的方式由多個資料表選出欄

位時 , 就無法像前一章一樣 , 在 SqlDataSource 控制項的設定精靈中 , 單單以滑鼠勾選的方式即可讓 VWD 替我們產生編輯、刪除、新增記錄的 T-SQL 敘述。

因此若要讓前一個範例也具有編輯資料等功能 , 就必須自行替資料來源控制項編寫相關的 UPDATE / DELETE / INSERT 等敘述的內容。

Page 112: Chapter 12

112

自訂資料來源的編輯與刪除功能 以下只介紹 GridView 的編輯與刪除功能

所要用到的 UPDATE 和 DELETE 語法 , INSERT 敘述的用法可參考前一章 VWD 自行產生的程式碼 , 或本公司『 SQL Server 2005 設計實務』一書。

Page 113: Chapter 12

113

UPDATE 敘述 以 UPDATE 更新資料表資料的語法如下:

例如要將書籍資料表中編號為 1 的書名改成 “計算機概論” 、單價改成 500, 可寫成:

Page 114: Chapter 12

114

DELETE 敘述 用 DELETE 敘述刪除資料表中的記錄時 ,

只需用 WHERE 子句指明要刪除的是哪一筆或哪些記錄即可:

如果沒有加 WHERE 子句指定條件 , 則會刪除資料表中所有記錄 ( 但不會刪除資料表 ) 。

Page 115: Chapter 12

115

指定資料來源控制項的 UPDATE 及 DELETE 敘述 認識 UPDATE 和 DELETE 的用法後 ,

我們就可讓前述的資料來源控制項新增相關命令。

雖然我們的例子是同時顯示 [書籍 ] 和 [書籍類別 ] 資料表的資料 , 但後者只是為了讓『書籍類別』欄位看起來較有意義而使用的;在更新及刪除記錄時 , 都只需針對 [書籍 ] 資料表中的記錄做更新及刪除 , 不需更動 [書籍類別 ] 資料表。

Page 116: Chapter 12

116

指定資料來源控制項的 UPDATE 及 DELETE 敘述 請先建立網頁 (Ch12-07.aspx), 並如前一範例的方式加入資料來源控制項 , 且設定查詢 [書籍 ] 、 [書籍類別 ] 資料表:

Page 117: Chapter 12

117

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 118: Chapter 12

118

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 119: Chapter 12

119

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 120: Chapter 12

120

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 121: Chapter 12

121

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 122: Chapter 12

122

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 123: Chapter 12

123

指定資料來源控制項的 UPDATE 及 DELETE 敘述 在介紹 UPDATE 語法時可看到 , 需以

『欄位名稱 = 欄位值』的形式來設定新的欄位值。

但對我們的 ASP.NET 網頁而言 , 我們當然無法預知瀏覽者會輸入的值 , 因此需用變數 (參數 ) 的形式來設定 , T-SQL 語法中變數名稱均是以 @ 為開頭 , 所以在查詢產生器中間窗格輸入參數名稱時 , 請在名稱前加上 @ 。

Page 124: Chapter 12

124

指定資料來源控制項的 UPDATE 及 DELETE 敘述 當瀏覽者在 GridView 的編輯模式下輸入新資料 , 並確認變更時 , GridView 各編輯欄位中的資料就會透過資料繫結傳送給 SqlDataSource 控制項 , 讓後者可使用這些新資料進行更新:

Page 125: Chapter 12

125

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 126: Chapter 12

126

指定資料來源控制項的 UPDATE 及 DELETE 敘述 但由上圖我們也發現一個問題 , 資料來源中的類別名稱欄位是取自 [書籍類別 ] 資料表的字串 , 而非 [書籍 ] 資料表存放的整數型別類別編號。

而 GridView 因與資料來源控制項繫結 , 所以顯示及傳送回的資料也都是類別名稱字串 , 如此一來將會使得 GridView 傳回的參數值 , 無法用來更新書籍名稱中的類別編號 , 因此我們需在 UPDATE 敘述中使用子查詢的技巧取得整數的『書籍編號』以便進行更新。

Page 127: Chapter 12

127

指定資料來源控制項的 UPDATE 及 DELETE 敘述 『子查詢』即是指查詢敘述內的另一個查

詢敘述。 在本例中 , 我們要做的就是將 GridView

傳回的類別名稱字串資料以子查詢的方式『換成』類別編號 , 所以在子查詢中要用 SELECT 敘述查詢在 [書籍類別 ] 資料表中 , 類別名稱字串所對應的類別編號:

Page 128: Chapter 12

128

指定資料來源控制項的 UPDATE 及 DELETE 敘述 將這個查詢敘述前後加上括號 , 再加到 UP

DATE 敘述中『類別編號 = 』後面 , 就成為取得正確類別編號的子查詢了:

Page 129: Chapter 12

129

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 130: Chapter 12

130

指定資料來源控制項的 UPDATE 及 DELETE 敘述 DELETE 敘述和 UPDATE 敘述一樣 , 只

需對 [書籍 ] 資料表做刪除即可 , 所以可在 DELETE 頁次中輸入要刪除 [書籍 ] 資料表敘述的記錄:

Page 131: Chapter 12

131

指定資料來源控制項的 UPDATE 及 DELETE 敘述

Page 132: Chapter 12

132

資料控制項的設定 完成前述的設定後 , 即可啟用 GridView

控制項的編輯、刪除選項 , 讓網頁可對資料庫做相關操作:

Page 133: Chapter 12

133

資料控制項的設定

Page 134: Chapter 12

134

資料控制項的設定

Page 135: Chapter 12

135

資料控制項的設定 手動加入查詢參數時 , VWD 不會替我們設

定其資料型別 , 所以我們要輸入如上可對應到資料表中各欄位型別的資料型別。

對大部份的資料型別 , ASP.NET 會自行轉換型別並可正常執行 , 但對部份資料型別 , 若不設定 , 更新敘述將無法正常執行。

存檔後用瀏覽器開啟網頁 , 即可進行編輯或刪除:

Page 136: Chapter 12

136

資料控制項的設定

Page 137: Chapter 12

137

資料控制項的設定 我們可用前面的範例 Ch12-01.aspx 查詢

[書籍 ] 資料表 , 驗證更新的結果:

Page 138: Chapter 12

138

在編輯欄位以 DropDownList 列出可選用的項目 雖然我們已將前一個範例設計成可在 Grid

View 編輯模式中輸入書籍類別字串 , 更新至資料庫時則寫入類別編號 , 讓使用者不需硬記每個類別所對應的編號。

但使用者要能記住所有的書籍類別名稱 , 其實也很不方便 , 因此若能在 GridView 控制項的編輯模式下提示目前可選用的類別名稱 , 將可大幅提昇友善程度 , 並避免使用者輸入錯誤。

Page 139: Chapter 12

139

在編輯欄位以 DropDownList 列出可選用的項目 要達到上述功能 , 作法之一就是使用 Drop

DownList 控制項在編輯模式下列出 [書籍類別 ] 資料表中現有的類別名稱 , 供使用者選擇 , 而不必再自行輸入:

Page 140: Chapter 12

140

在編輯欄位以 DropDownList 列出可選用的項目 所以我們必須將 GridView 中對應的欄位轉換成可自訂內容的 TemplateField, 才能加入所需的 DropDownList 控制項。

請在設計模式做如下設定 (光碟範例檔為 Ch12-08.aspx) :

Page 141: Chapter 12

141

在編輯欄位以 DropDownList 列出可選用的項目

Page 142: Chapter 12

142

在編輯欄位以 DropDownList 列出可選用的項目

Page 143: Chapter 12

143

在編輯欄位以 DropDownList 列出可選用的項目

Page 144: Chapter 12

144

在編輯欄位以 DropDownList 列出可選用的項目

Page 145: Chapter 12

145

在編輯欄位以 DropDownList 列出可選用的項目

Page 146: Chapter 12

146

在編輯欄位以 DropDownList 列出可選用的項目

Page 147: Chapter 12

147

在編輯欄位以 DropDownList 列出可選用的項目

Page 148: Chapter 12

148

在編輯欄位以 DropDownList 列出可選用的項目 接下來就是兩個控制項的設定:

1. 將 SqlDataSource2 控制項設為選取 [書籍類別 ] 資料表中的『類別名稱』欄位 (SELECT 類別名稱 from [書籍類別 ]) 。

2. 將 DropDownList1 控制項做如下的設定:

Page 149: Chapter 12

149

在編輯欄位以 DropDownList 列出可選用的項目

Page 150: Chapter 12

150

在編輯欄位以 DropDownList 列出可選用的項目

Page 151: Chapter 12

151

在編輯欄位以 DropDownList 列出可選用的項目 以上只是設定 DropDownList1 控制項要顯

示什麼資料 , 以及選擇項目時要傳回什麼資料。

我們還需設定讓它與 SqlDataSource1 的繫結關係 , 如此 DropDownList1 中選取的項目才會傳送到 SqlDataSource1 控制項 , 成為更新資料時的參數:

Page 152: Chapter 12

152

在編輯欄位以 DropDownList 列出可選用的項目

Page 153: Chapter 12

153

在編輯欄位以 DropDownList 列出可選用的項目

Page 154: Chapter 12

154

在編輯欄位以 DropDownList 列出可選用的項目 完成上述設定後 , 當瀏覽者在 GridView

的編輯模式下選好書籍類別名稱 , 並按確定時 , 透過資料繫結 , 此類別名稱將會送到資料來源控制項當成 Update 的參數之一。

而在前一個範例中我們也將 Update 敘述修改成以子查詢取得對應的類別編號 , 以便能更新到 [書籍 ] 資料表。

所以這部份的設定都可沿用前一個範例的設定 , 全部設定妥當並存檔 , 網頁即可正常運作了。

Page 155: Chapter 12

155

在編輯欄位以 DropDownList 列出可選用的項目

Page 156: Chapter 12

156

在編輯欄位以 DropDownList 列出可選用的項目

Page 157: Chapter 12

157

在編輯欄位以 DropDownList 列出可選用的項目

Page 158: Chapter 12

158

在編輯欄位以 DropDownList 列出可選用的項目 在各資料控制項的編輯 / 新增模式下 , 都

可利用相同的技巧 , 讓網頁提供更友善的操作方式 , 同時降低輸入錯誤的機率。