1.58k likes | 1.71k Views
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 語法基礎.
E N D
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 語法來達到, 像是同時擷取兩個資料表的內容, 並整合在一起...等。 • 雖然 VWD 提供了友善的工具幫助我們建立 T-SQL 查詢敘述的內容, 減少我們需動手自行輸入查詢敘述的必要。
T-SQL 語法基礎 • 但 VWD 畢竟不是萬能, 有些特別的語法仍需手動輸入;再者有時候僅是要做小小的修改, 也不必動用到 VWD 的精靈, 因此若能熟悉 T-SQL 的基本語法, 對於設計資料庫相關的網頁時將會更有幫助。
學習 T-SQL 語法的練習網頁 • 為測試及練習稍後的 T-SQL 語法, 我們先建立一個練習專用的網頁。 • 這個網頁包含一個 SqlDataSource 控制項及 GridView 控制項, 但並不完全採用前一章的建立方式: • SqlDataSource 控制項:只設定連接字串, 但不設定查詢語法, 換言之其 SelectCommand 屬性是空白的 (您也可依前一章的方式設妥控制項後, 再將此屬性清空):
學習 T-SQL 語法的練習網頁 • GridView 控制項:雖設定繫結上述的 SqlDataSource 控制項, 但因資料來源控制項未設定查詢敘述, 即無法取得資料, 所以 GridView 控制像也無法取得細節的欄位資訊。
學習 T-SQL 語法的練習網頁 • 另外我們再加入一個用來輸入查詢敘述的 TextBox 欄位及 Button 按鈕:
學習 T-SQL 語法的練習網頁 • 按下按鈕時, 程式即會將輸入至 TextBox 的字串當成查詢敘述設定給 SqlDataSource 控制項的 SelectCommand 屬性, 讓查詢結果立即顯示出來:
學習 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 語法 • 若要查詢資料表中的所有欄位, 則可用 * 或 ALL 來 代表:
SELECT 語法 • 此外, 欄位名稱前可加上『資料表名稱.』的語法, 明確表示此欄位是存於哪一個資料表: • 當然在本例中, 資料來源就只有 [書籍] 資料表, 因此這樣的寫法看起來是多餘的。但當我們在 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 子句時, 通常要運用 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 • _:代表一個任意字元, 例如 ‘S_ _ ’ 表示任何以 ‘S’ 開頭、長度為 3 個字 (開頭的 S 再加兩個任意字元) 的字串 (中英元字元都算一個字)。
LIKE • [ ]:方括號中可放任何字元或範圍, 代表符合方括號所列的任何字元, 例如 ‘[ABC]%’ 表示任何以 A 或 B 或 C 開頭的字串。 方括號若加入 ^ 符號, 則表示相反的意思, 例如 '[^ABC]%' 表示任何不是以 A、B、C 開頭的字串。
ORDER BY 子句 • ORDER BY 子句是用以設定傳回資料的排列順序, 雖然 GridView 可啟用排序功能, 讓瀏覽者可選擇排序方式, 但 DetailsView 和 FormView 則無此功能。 • 或者您想使用 GridView 顯示資料, 但只使用固定的排序方式, 此時都可用 ORDER BY 子句指定要依哪一個欄位排序, 而且還可用 ASC (升冪, 由小到大, 預設值) 或 DESC (降冪, 由大到小) 關鍵字指定排列方式:
ORDER BY 子句 • 在 ORDER BY 子句中可指定多個排列依據 (用逗號分隔), 表示當第 1 個排序條件所得的結果中有順序相同的記錄時, 可再依另一個條件排序:
12 - 2 資料來源控制項的查詢設定 • SELECT 查詢語法的變化, 有部份是可直接在資料來源控制項的設定畫面中, 由 VWD 替我們自行產生, 但有時則需自行輸入。 • 以下我們先複習一下在資料來源控制項中的設定, 之後再介紹如何使用 VWD 提供的查詢產生器建立複雜的查詢敘述。
資料來源控制項的 ORDER BY 設定 • 在設定資料來源控制項的資料來源時, 即可選擇 ORDER BY 子句的資料排序方式。請先建立一個新的網頁 (Ch12-02.aspx), 在網頁中加入 SqlDataSource 控制項後依如下方式設定: