Chapter 12 T-SQL 語法與 ASP.NET.

Slides:



Advertisements
Similar presentations
模块五 动态网页技术 任务五 查询记录 任务一 表单设计制作 任务二 简单动态的 ASP 页面制作任务三 页面与数据库的集成任务四 添加记录 任务六 电商系统融入网站.
Advertisements

第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
第八单元 数据库MySQL应用基础 MySQL数据库应用基础 MySQ数据库操作使用 Mysql管理工具 第25章 数据库的增加/删除操作
第6章 数据库管理软件Access 年秋.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
SQL的简单查询.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
Chap 11 SQL基本查詢指令.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
第8章 设计数据库应用网站 本章讲述的主要内容 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL查询基础
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
文科计算机小公共课规划教材 Access 程序设计.
第一讲 数据查询优化.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
计算机应用基础 上海大学计算中心.
转正述职报告 乐恩公司 史航
第3章 数据查询与SQL命令.
資料庫管理 資管二 賴柏融.
Chapter 7 網頁應用程式與狀態管理.
第五讲 利用视图进行查询优化.
關聯式資料庫.
Chapter 4 基本伺服器控制項.
Chapter 5 進階伺服器控制項.
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
課程名稱:資料庫系統 授課老師:李春雄 博士
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
Transact-SQL 語言設計教學.
班級:博、碩子一甲 授課老師:鐘國家 助教:陳國政
第3章 MySQL教學範本 主從式資料庫系統 - CH3.
实验 2:MS Access QBE Query使用
1 创建SqlDataSouce控件 数据源控件(SqlDataSource)
第10章 網頁資料庫的顯示與維護 10-1 再談資料控制項 10-2 GridView控制項 10-3 DetailsView控制項
第7章 SQL Server代理服务 7.1 SQL Server代理服务配置 7.2 定义操作员 7.3 作业管理 7.4 警报管理
教 师:曾晓东 电 话: 数据库技术 教 师:曾晓东 电 话:
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
資料庫管理(Access 2003) 第五章 利用查詢來 統計與分析資料 許欽嘉 老師.
第十二章 SQL語言簡介 講授大綱: 新增資料庫 新增資料表 新增資料 修改資料 刪除資料 查詢資料 透視ASP.NET-第12章
課程名稱:_____________ 指導教授:_____________
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
第10章 網頁資料庫顯示與維護控制項 10-1 資料來源控制項 10-2 Repeater控制項 10-3 DataList控制項
第11章 ListView延迟加载效果 授课老师:高成珍 QQ号: QQ群: 、
第18章 個人入口網站的建立 18-1入口網站的基礎 18-2 建立網站的搜尋引擎 18-3 網頁組件的個人化功能
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
資料庫系統 李翊豪 2017/12/21 Reference
CS, ZJU 4/18/2019 Chapter 7 数据库.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
查询与视图 蔡海洋.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
本讲内容 SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能.
第三章 SQL Server数据管理.
Chapter 17 購物網站 (1) - 產品目錄與購物車.
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
Chapter 18 購物網站 (2) - 訂單與產品管理.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
第4章 数据查询.
数据库应用技术 天津电大 翟迎建.
Presentation transcript:

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 語法基礎 在關聯式資料庫的世界中, 用來存取資料庫的語法是結構化查詢語言 SQL (Structured Query Language) 。 標準組織 ISO / ANSI 早已制定出 SQL 語言標準, 但各資料庫管理系統廠商在實作其產品所用的 SQL 語言時, 都是在各自的產品架構下, 設計出『儘量』符合 SQL 標準的自家語言, 因此各資料庫管理系統所支援的 SQL 語言都不太一樣, 例如微軟公司的 SQL Server 所使用的是 Transact-SQL (簡稱 T-SQL)。

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

T-SQL 語法基礎

T-SQL 語法基礎 除了單純查詢整個資料表的所有欄位或是部分欄位外, 我們也可只查詢符合特定條件的資料, 這些都可透過適當的 T-SQL 語法來達到, 像是同時擷取兩個資料表的內容, 並整合在一起...等。 雖然 VWD 提供了友善的工具幫助我們建立 T-SQL 查詢敘述的內容, 減少我們需動手自行輸入查詢敘述的必要。

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

學習 T-SQL 語法的練習網頁 為測試及練習稍後的 T-SQL 語法, 我們先建立一個練習專用的網頁。 這個網頁包含一個 SqlDataSource 控制項及 GridView 控制項, 但並不完全採用前一章的建立方式: SqlDataSource 控制項:只設定連接字串, 但不設定查詢語法, 換言之其 SelectCommand 屬性是空白的 (您也可依前一章的方式設妥控制項後, 再將此屬性清空):

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

學習 T-SQL 語法的練習網頁 GridView 控制項:雖設定繫結上述的 SqlDataSource 控制項, 但因資料來源控制項未設定查詢敘述, 即無法取得資料, 所以 GridView 控制像也無法取得細節的欄位資訊。

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

學習 T-SQL 語法的練習網頁 另外我們再加入一個用來輸入查詢敘述的 TextBox 欄位及 Button 按鈕:

學習 T-SQL 語法的練習網頁 按下按鈕時, 程式即會將輸入至 TextBox 的字串當成查詢敘述設定給 SqlDataSource 控制項的 SelectCommand 屬性, 讓查詢結果立即顯示出來:

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

學習 T-SQL 語法的練習網頁 在練習時可能會因輸入不合法的 T-SQL 敘述而引發例外, 所以我們特別將主要的程式放在 Try / Catch 結構中。 當控制項因 T-SQL 語法錯誤而引發例外時, 即會輸出相關錯誤內容:

學習 T-SQL 語法的練習網頁 第 16 行的程式將 GridView 設為隱藏, 只是為避免在發生例外時, 網頁上不會仍留有前一次練習所留下來的資料。

SELECT 語法 SQL 語言的查詢敘述為 SELECT (SQL 語言不分大小寫), 前面提過各廠商實作的自家 SQL 語法都不儘相同, 但在 SELECT 的部份倒是都差不多。 因為本章以使用 SQL Server 資料庫為主, 所以此處也以 T-SQL 語法為主, TSQL 的 SELECT 語法如下:

SELECT 語法 這個最基本的語法其實在前一章範例已看過其用法, 資料表名稱就是來源資料庫中的資料表名稱, 通常為方便辨識, 會在名稱前後加上 [...] 方括號。 欄位名稱的部份就是直接列出要查詢的任何欄位名稱, 要查詢多個欄位名稱時, 其間需以逗號 (,) 分開, 而且也可加上方括號 (非必要):

SELECT 語法

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

SELECT 語法 此外, 欄位名稱前可加上『資料表名稱.』的語法, 明確表示此欄位是存於哪一個資料表:

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

別名

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

自訂欄位 列在 SELECT 後面的欄位也可以是資料表中沒有的欄位, 我們可用『欄位名稱 = 運算式』的方式, 動態產生此自訂欄位的資料。 例如在 [書籍] 資料表中有個『單價』欄位, 而我們可將它乘上折數後產生折扣價的自訂欄位:

自訂欄位 執行結果如下:

T-SQL 的函數 T-SQL 和一般程式語言一樣, 內建了許多常用的資料處理、計算、統計函數 (Function), 這些函式都能應用在查詢敘述中, 以便對資料做進一步的處理, 再將結果傳回。 例如 COUNT() 是個統計資料共有幾筆的函數, 而以下的查詢敘述, 即可查詢『書籍』資料表中有幾本書籍:

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

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

WHERE 子句 條件的表示方式就和 Visual Basic 在 If、While 之類的敘述中所用的條件運算式相似, 可用各種比較運算子 (>、=、< 等, 後詳) 來限制查詢的條件。 例如要查詢『單價』為 299 元的書籍之名稱, 則條件即為『單價 = 299』, 所以查詢敘述可寫成:

WHERE 子句

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

比較與邏輯運算子 T-SQL 的邏輯運算子則多達十種, 以下簡單介紹其中較常見的數種: AND、OR、NOT BETWEEN LIKE

AND、OR、NOT 也就是『且』、『或』、『否』的意思, 利用這 3 個運算子, 可組合出複雜的條件, 例如:

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

BETWEEN 上例的 WHERE 條件也可寫成『單價 > = 200 AND 單價 < = 499』, 意思相同。

LIKE 可用以指定要查詢的欄位中所含的『部份』內容, 其語法為『LIKE '比對字串'』, 比對字串中可使用以下特殊字元: %:代表零或多個任意字元, 例如 'SQL%' 即表示以 'SQL' 開頭的任何字串;而 '%SQL%' 則表示任何包含有 'SQL' (不論位置) 的字串。

LIKE

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

LIKE

LIKE [ ]:方括號中可放任何字元或範圍, 代表符合方括號所列的任何字元, 例如 ‘[ABC]%’ 表示任何以 A 或 B 或 C 開頭的字串。 方括號若加入 ^ 符號, 則表示相反的意思, 例如 '[^ABC]%' 表示任何不是以 A、B、C 開頭的字串。

LIKE

ORDER BY 子句 ORDER BY 子句是用以設定傳回資料的排列順序, 雖然 GridView 可啟用排序功能, 讓瀏覽者可選擇排序方式, 但 DetailsView 和 FormView 則無此功能。 或者您想使用 GridView 顯示資料, 但只使用固定的排序方式, 此時都可用 ORDER BY 子句指定要依哪一個欄位排序, 而且還可用 ASC (升冪, 由小到大, 預設值) 或 DESC (降冪, 由大到小) 關鍵字指定排列方式:

ORDER BY 子句

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

ORDER BY 子句

12 - 2 資料來源控制項的查詢設定 SELECT 查詢語法的變化, 有部份是可直接在資料來源控制項的設定畫面中, 由 VWD 替我們自行產生, 但有時則需自行輸入。 以下我們先複習一下在資料來源控制項中的設定, 之後再介紹如何使用 VWD 提供的查詢產生器建立複雜的查詢敘述。

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

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

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

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

資料來源控制項的 ORDER BY 設定 如上所示, 只要透過圖形介面的操作, 即可快速建立 ORDER BY 子句, 讓查詢結果自動依指定的方式排序。 在網頁中加入與之繫結的 GridView 並瀏覽網頁即可看到結果:

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

資料來源控制項的 ORDER BY 設定 此外我們也可以模仿 Ch12-01.aspx 的技巧, 透過其它控制項設定 ORDER BY 的排序方式, 也就是在程式中修改 SqlDataSource 控制項的 SelectCommand 屬性, 在其中加上必要的 ORDER BY 子句即可, 讀者可自行測試之。

資料來源控制項的 WHERE 設定 和 ORDER BY 子句類似, 在設定資料來源時, 即可設定查詢時的 WHERE 子句內容。 而且 WHERE 子句的設定具有較多的變化, 例如可選擇以 Cookie 的值、Session 變數值、其它控制項的屬性值、查詢字串 (QueryString) 的值等不同參數, 當成 WHERE 的條件。

資料來源控制項的 WHERE 設定 例如我們可應用前面介紹的 LIKE 語法, 設計一個可用關鍵字搜尋書籍名稱的網頁。 請新增一個網頁 (以下範例為 Ch12-03.aspx), 網頁中當然要放入一個用來輸入書名關鍵字的 TextBox 控制項:

資料來源控制項的 WHERE 設定

資料來源控制項的 WHERE 設定 接著加入查詢書籍資料的 SqlDataSource 控制項, 並依 如下 方式 設定:

資料來源控制項的 WHERE 設定

資料來源控制項的 WHERE 設定

資料來源控制項的 WHERE 設定

資料來源控制項的 WHERE 設定

資料來源控制項的 WHERE 設定 其中主要的設定就在於 SqlDataSource 控制項的 SELECT 語法。 以上設定就是讓 SELECT 敘述加上『WHERE ([書籍名稱] LIKE ‘%’ + @ 書籍名稱 + ‘%’)』字句, 至於 @ 書籍名稱這個參數的設定, 切換到原始檔模式後, 即可在 <asp:SqlDataSource> 標籤中找到:

資料來源控制項的 WHERE 設定

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

資料來源控制項的 WHERE 設定 設定完成並存檔後, 即可瀏覽網頁。 由於在前述的步驟中未設定參數預設值, 所以初次瀏覽網頁時, 會看不到任何資料:

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

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

GridView 搭配 DetailsView SqlDataSource 和與之繫結的 GridView, 可列出資料表中每一筆記錄, 且這個 GridView 必須具有選擇記錄的功能。 加入另一個 SqlDataSource, 但必須設定其查詢資料庫時, 只選出已在 GridView 中選取的記錄。 加入與第二個 SqlDataSource 繫結的 DetailsView, 並啟用後者的新增記錄功能。

GridView 搭配 DetailsView 請先建立一空白網頁 Ch12-04.aspx, 我們先加入查詢所有書籍的 SqlDataSource 控制項, 並將 ID 設為 “AllBooks”;然後再加入與之繫結的 GridView 控制項, 並啟用 GridView 的選取功能:

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView

GridView 搭配 DetailsView 在前面的步驟中, 主要是設定當我們在 GridView 中所選擇一筆記錄時, 會使 “OnlyOneBook” 控制項也只會由資料表查詢對應記錄的全部欄位, 以便讓 DetailsView 控制項顯示該筆記錄的全部欄位。 瀏覽網頁的效果如下:

GridView 搭配 DetailsView

GridView 搭配 DetailsView

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

參考其它資料表的查詢 在關聯式資料庫中, 在做過正規化後, 經常會讓我們想知道的資料分散在多個資料表中。 例如在範例 [書籍] 資料表中有記錄書籍分類的『類別編號』欄位, 但該欄位只記錄編號, 實際書籍分類的名稱, 則另存於 [書籍類別] 資料表的『類別名稱』欄位。

參考其它資料表的查詢 前一節介紹過用 GridView-DetailsView 搭配顯示書籍資料的用法, 不過當時兩個控制項所用的資料來源, 都是查詢同一個資料表, 只是 SELECT 敘述的寫法不同。 在此我們則改變一下, 讓兩個資料來源控制項分別查詢 [書籍] 和 [書籍類別] 資料表, 讓瀏覽者選擇某個書籍類別時, 網頁即會列出屬於該類別的所有書籍。

參考其它資料表的查詢

參考其它資料表的查詢 如圖所示, 顯示所有書籍類別的是用 DropDownList 控制項, 它也是可用於資料繫結的控制項之一。 請先建立一空白網頁 (光碟範例 Ch12-05.aspx), 我們先在網頁中加入一個 SqlDataSource 控制項, 並將其查詢敘述設為 "SELECT * FROM [書籍分類]", 然後加入 DropDownList 控制項, 並依如下方式設定:

參考其它資料表的查詢

參考其它資料表的查詢

參考其它資料表的查詢 接著再加入第 2 個 SqlDataSource 控制項, 除了以我們熟悉的方式設為查詢 [書籍] 資料表的內容外, 並做如下的 WHERE 設定:

參考其它資料表的查詢

參考其它資料表的查詢 最後加入與上述資料來源繫結的 GridView 控制項 (也可改用其它資料控制項) 並存檔。 瀏覽網頁時, 預設會出現符合 DropDownList 控制項中第一項『入門』類的書籍, 選擇其它類型時, 就會即時反應出現:

參考其它資料表的查詢

查詢多個資料表 上一個例子是由 DropDownList 控制項顯示 [書籍分類] 資料表的內容, 再於資料來源控制項依其選擇的值來設定查詢 [書籍] 資料表時的篩選條件。 但在查詢資料的應用中, 也常見同時需從多個資料表取出資料, 並同時顯示出來:例如顯示書籍資料時, 『書籍分類』就不是只顯示編號, 而會列出類別名稱。

查詢多個資料表

查詢多個資料表 要達到此目的, 只需在資料來源控制項中下達可正確查詢兩個資料表的 SELECT 敘述即可, 若對 SELECT 語法不夠熟悉, 也可透過 VWD 的查詢產生器替您產生必要的查詢敘述。 請先建立一空白網頁 (Ch12-06.aspx), 先加入 SqlDataSource 控制項並設妥連接字串, 再依如下方式設定:

查詢多個資料表

查詢多個資料表

查詢多個資料表

查詢多個資料表

查詢多個資料表

查詢多個資料表

查詢多個資料表

查詢多個資料表 建好資料來源後, 在網頁中加入與之繫結的資料控制項, 例如使用 GridView:

查詢多個資料表 若想修改類別名稱欄位的表頭文字, 可切換到原始檔模式, 到 <asp:GridView> 標籤之內修改:

查詢多個資料表

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

12 - 4 自訂資料來源的編輯與刪除 功能 使用自訂查詢的方式由多個資料表選出欄位時, 就無法像前一章一樣, 在 SqlDataSource 控制項的設定精靈中, 單單以滑鼠勾選的方式即可讓 VWD 替我們產生編輯、刪除、新增記錄的 T-SQL 敘述。 因此若要讓前一個範例也具有編輯資料等功能, 就必須自行替資料來源控制項編寫相關的 UPDATE / DELETE / INSERT 等敘述的內容。

自訂資料來源的編輯與刪除功能 以下只介紹 GridView 的編輯與刪除功能所要用到的 UPDATE 和 DELETE 語法, INSERT 敘述的用法可參考前一章 VWD 自行產生的程式碼, 或本公司『SQL Server 2005 設計實務』一書。

UPDATE 敘述 以 UPDATE 更新資料表資料的語法如下: 例如要將書籍資料表中編號為 1 的書名改成 “計算機概論” 、單價改成 500, 可寫成:

DELETE 敘述 用 DELETE 敘述刪除資料表中的記錄時, 只需用 WHERE 子句指明要刪除的是哪一筆或哪些記錄即可:

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

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

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

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

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

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

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

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

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

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

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

指定資料來源控制項的 UPDATE 及 DELETE 敘述 但由上圖我們也發現一個問題, 資料來源中的類別名稱欄位是取自 [書籍類別] 資料表的字串, 而非 [書籍] 資料表存放的整數型別類別編號。 而 GridView 因與資料來源控制項繫結, 所以顯示及傳送回的資料也都是類別名稱字串, 如此一來將會使得 GridView 傳回的參數值, 無法用來更新書籍名稱中的類別編號, 因此我們需在 UPDATE 敘述中使用子查詢的技巧取得整數的『書籍編號』以便進行更新。

指定資料來源控制項的 UPDATE 及 DELETE 敘述 『子查詢』即是指查詢敘述內的另一個查詢敘述。 在本例中, 我們要做的就是將 GridView 傳回的類別名稱字串資料以子查詢的方式『換成』類別編號, 所以在子查詢中要用 SELECT 敘述查詢在 [書籍類別] 資料表中, 類別名稱字串所對應的類別編號:

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

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

指定資料來源控制項的 UPDATE 及 DELETE 敘述 DELETE 敘述和 UPDATE 敘述一樣, 只需對 [書籍] 資料表做刪除即可, 所以可在DELETE 頁次中輸入要刪除 [書籍] 資料表敘述的記錄:

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

資料控制項的設定 完成前述的設定後, 即可啟用 GridView 控制項的編輯、刪除選項, 讓網頁可對資料庫做相關操作:

資料控制項的設定

資料控制項的設定

資料控制項的設定 手動加入查詢參數時, VWD 不會替我們設定其資料型別, 所以我們要輸入如上可對應到資料表中各欄位型別的資料型別。 對大部份的資料型別, ASP.NET 會自行轉換型別並可正常執行, 但對部份資料型別, 若不設定, 更新敘述將無法正常執行。 存檔後用瀏覽器開啟網頁, 即可進行編輯或刪除:

資料控制項的設定

資料控制項的設定 我們可用前面的範例 Ch12-01.aspx 查詢 [書籍] 資料表, 驗證更新的結果:

在編輯欄位以 DropDownList 列出可選用的項目 雖然我們已將前一個範例設計成可在 GridView 編輯模式中輸入書籍類別字串, 更新至資料庫時則寫入類別編號, 讓使用者不需硬記每個類別所對應的編號。 但使用者要能記住所有的書籍類別名稱, 其實也很不方便, 因此若能在 GridView 控制項的編輯模式下提示目前可選用的類別名稱, 將可大幅提昇友善程度, 並避免使用者輸入錯誤。

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

在編輯欄位以 DropDownList 列出可選用的項目 所以我們必須將 GridView 中對應的欄位轉換成可自訂內容的 TemplateField, 才能加入所需的 DropDownList 控制項。 請在設計模式做如下設定 (光碟範例檔為 Ch12-08.aspx):

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

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

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

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

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

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

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

在編輯欄位以 DropDownList 列出可選用的項目 接下來就是兩個控制項的設定: 1. 將 SqlDataSource2 控制項設為選取 [書籍類別] 資料表中的『類別名稱』欄位 (SELECT 類別名稱 from [書籍類別])。 2. 將 DropDownList1 控制項做如下的設定:

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

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

在編輯欄位以 DropDownList 列出可選用的項目 我們還需設定讓它與 SqlDataSource1 的繫結關係, 如此 DropDownList1 中選取的項目才會傳送到 SqlDataSource1 控制項, 成為更新資料時的參數:

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

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

在編輯欄位以 DropDownList 列出可選用的項目 完成上述設定後, 當瀏覽者在 GridView 的編輯模式下選好書籍類別名稱, 並按確定時, 透過資料繫結, 此類別名稱將會送到資料來源控制項當成 Update 的參數之一。 而在前一個範例中我們也將 Update 敘述修改成以子查詢取得對應的類別編號, 以便能更新到 [書籍] 資料表。 所以這部份的設定都可沿用前一個範例的設定, 全部設定妥當並存檔,網頁即可正常運作了。

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

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

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

在編輯欄位以 DropDownList 列出可選用的項目 在各資料控制項的編輯 / 新增模式下, 都可利用相同的技巧, 讓網頁提供更友善的操作方式, 同時降低輸入錯誤的機率。