返回“ASP.NET 2.0數據教程目錄”
導言
在前一節教程中,我們看到了如何使用SqlDataSource控件直接從 數據庫中獲取數據。通過“配置數據源”向導,我們選擇一個特定的 數據庫,然後就可以:從一個表或視圖中選擇一些列;輸入一個自定義SQL語句; 使用一個存儲過程。不管你是手工輸入SQL語句還是在向導頁中選擇一堆列,反正 最終都是給SqlDataSource控件的SelectCommand屬性賦上一個SELECT語句,在 SqlDataSource的Select()方法被調用的時候,執行的也就是這個語句(不管是通 過編程方式調用還是數據Web控件自動調用,都是這樣)。
前一節教程中 的示例所使用的SELECT語句缺少WHERE子句。在SELECT語句中,WHERE子句可以用 來限制返回的記錄。比如說,我們想顯示成本大於50美刀的產品的名字,相應的 查詢語句應該是這樣的:
1SELECT ProductName
2FROM Products
3WHERE UnitPrice > 50.00
在實際應用中, WHERE子句所使用的值都是取決於某個外部因素的,比如QueryString、Session或 者用戶在頁面上某個控件中的輸入等等。通常,我們通過使用參數來對這些輸入 進行指定。在Microsoft SQL Server中,參數都是@parameterName這樣的形式, 比如:
1SELECT ProductName
2FROM Products
3WHERE UnitPrice > @Price
對於SELECT、INSERT、UPDATE以及DELETE 語句,SqlDataSource都支持其參數化查詢。此外,這些參數不僅可以自動地從各 種各樣的源中獲取(比如QueryString、Session、頁面上的控件等等),還可以 通過編程的方式進行賦值。本教程中,我們將看到如何定義參數化查詢,以及如 何通過聲明或編程的方式指定參數。
注意:在上一節教程中我們對 ObjectDataSource(前面46節中都是將其作為我們的工具的)與SqlDataSource進 行了比較,並注意到他們在概念上還是蠻相似的。這些相似點也擴展到了參數方 面。ObjectDataSource的參數映射到了業務邏輯層中的方法的輸入參數上,而 SqlDataSource的參數則是直接在SQL語句中定義的。它們的Select()、Insert() 、Update()以及Delete()方法都擁有一堆參數,而且這些參數都可以從預定義源 (比如QueryString、Session等等)中獲取或通過編程的方式賦值。
創建 一個參數化查詢
SqlDataSource控件的“配置數據源”向導提 供了三種用以定義獲取數據庫記錄的Command的方式:
從一個已經存在的表或視圖中選擇一些列
輸入一個自定義SQL語句
選擇一個存儲過程
如果是從一個已經存在的表或視圖中選擇一些列,那麼WHERE子句的參數 就必須通過“添加WHERE子句”對話框來進行指定。如果是創建一個自 定義SQL語句,你可以直接向WHERE子句中添加參數(記得要使用這樣的格式, @parameterName)。存儲過程是由一個或多個SQL語句組成的,而且這些語句都是 可以參數化的。SQL語句的參數必須像存儲過程的輸入參數一樣被傳進去。
由於創建一個參數化的查詢取決於SqlDataSource的SelectCommand是如何 被指定的,所以讓我們先來看看所有的這三種方式。首先,打開SqlDataSource文 件夾中的ParameterizedQueries.aspx,從工具箱中拖一個SqlDataSource控件到 設計器中,並將其ID設置為Products25BucksAndUnderDataSource。然後,在它的 智能標簽中點擊“配置數據源”鏈接。選擇數據庫(使用 NORTHWINDConnectionString)並點擊“下一步”。