ASP
NET
引入了一系列可以改善數據訪問的新工具
包括幾個數據源和數據綁定控件
新增種類的數據源控件可以消除 ASP
NET
x 中要求的大量重復性代碼
例如
您可以很容易地將 SQL 語句或存儲過程與數據源控件相關聯
並且將它們綁定到數據綁定控件
更令人感到印象深刻的是
通過 ObjectDataSource 控件可以簡化開發和減少代碼
並且仍然可以在 n 層體系結構的不同層中抽象業務和數據訪問邏輯
在
NET 問世以前
用傳統的 ASP 生成數據網格通常需要編寫大量的代碼
以便在遍歷 ADO 記錄集的同時即時生成 HTML 表
ASP
NET
x 通過允許您將基於 XML 的 DataSet 綁定到 ASP
NET DataGrid 控件
從而使該類型的開發變得更加容易
這就減少了生成網格所必需的代碼
但是
傳統的 ASP 和 ASP
NET
x 都要求代碼實現分頁
排序
編輯和行選擇功能
通過 ASP
NET
中的改進功能
可以顯著減少這些代碼的數量
以產生帶有完整分頁
排序和編輯功能並填充了數據的網格
在這一期的 Data Points 中
我將首先演示通過 ASP
NET
並使用 SqlDataSource 和一些新的數據綁定控件開發 Web 應用程序是多麼容易
請注意
我在此使用的是 Beta
版本
大多數企業應用程序都是在多層體系結構之上生成的
該體系結構有一個用於存放業務邏輯的中間層
以及一個使用一個或多個後端數據庫的數據訪問層
我將討論 ObjectDataSource 可以多麼理想地與現有的多層組件集成
通過將 ObjectDataSource 控件鏈接到業務對象
您可以充分利用現有的多層體系結構來生成完善的 Web UI
並且能夠顯著減少代碼
ObjectDataSource 控件還包含一些特殊的屬性
使您可以綁定到 ASP
NET
和 ADO
NET
中新近增強的強類型 DataSet 和數據組件
ASP
NET
中的其他新功能和改進包括新增的雙向綁定表達式
增強的緩存
以及幾個新增的可以數據綁定到新的數據源控件的 ASP
NET
控件
數據綁定控件 要使用數據源控件
必須具有一個用來將它們綁定到的數據綁定控件
在 ASP
NET
中有幾個新的數據綁定控件
包括 GridView
DetailsView 和 FormView 控件
如果您喜歡 ASP
NET
x DataGrid 控件
那麼您也會喜歡 ASP
NET
GridView 控件
GridView 在本質上類似於 DataGrid
因為它可以綁定到新的數據源控件
並且可以用來實現排序
編輯和分頁 — 它們需要的代碼都比 DataGrid 少得多(有關 GridView 的詳細信息
請參閱 Dino Esposito 在 MSDN?Magazine 的
年
月刊中發表的文章)
要將 GridView 綁定到數據源控件
需要將 GridView 的 DataSourceID 屬性設置為數據源控件的 ID
還可以設置 GridView 的其他幾個屬性來增強外觀和用戶交互(我將在稍後的示例中加以演示)
<asp:GridView ID=
gvwOrders
Runat=
server
DataSourceID=
sdsOrdersDataSource
AutoGenerateColumns=
True
>
其他控件(例如
DropDownList)也可以綁定到數據源控件
例如
DropDownList 控件可以綁定到檢索雇員列表的 SqlDataSource 控件
雇員的全名可以顯示在 DropDownList 中
而 EmployeeID 可以作為控件的基礎數據值字段綁定到該控件
以下示例定義了一個 DropDownList
它將顯示可供選擇的客戶名稱的列表
客戶數據被綁定到一個名為 sdsCustomerDataSource 的 SqlDataSource 控件
該控件可獲得客戶的 CompanyName 和 CustomerID 字段的列表
<asp:DropDownList ID=
ddlCustomers
Runat=
server
AutoPostBack=
True
DataSourceID=
sdsCustomersDataSource
DataTextField=
CompanyName
DataValueField=
CustomerID
>
</asp:DropDownList>
在 ASP
NET
中
將控件綁定到數據源控件非常簡單
並且不需要任何處於代碼隱藏中的代碼
但是
如果您願意
仍然可以編寫代碼以顯式綁定到控件
實際上
數據綁定控件的數據源和 DataMember 屬性與 ASP
NET
x 相比已經得到了改進
數據源控件 在 ASP
NET
中有幾個新的數據源控件
例如
SqlDataSource
ObjectDataSource
XmlDataSource
AccessDataSource 和 SiteMapDataSource(如圖
所示)
它們全都可以用來從它們各自類型的數據源中檢索數據
並且可以綁定到各種數據綁定控件
數據源控件減少了為檢索和綁定數據甚至對數據進行排序
分頁或編輯而需要編寫的自定義代碼的數量
每個數據源控件都具有類似的屬性
以便可以與其各自的數據源進行交互
生成 SiteMapDataSource 和 XmlDataSource 是為了檢索分層數據
而生成其他數據源控件是為了檢索帶有列和行的基於集合的數據
專門生成 AccessDataSource 以便從 Access 數據庫中檢索數據
SqlDataSource 聽起來好像只能使用 SQL Server?
但實際情況不是這樣的
它實際上可以用來從任何 OLE DB 或符合 ODBC 的數據源中檢索數據
命令類型和參數 SqlDataSource 控件具有四個命令屬性
您可以設置這些屬性以告訴 SqlDataSource 如何獲得
插入
更新和刪除它的數據
可以將 SelectCommand 屬性設置為 SQL 語句或存儲過程
在任何一種情況下
都可以根據需要傳入參數
InsertCommand
UpdateCommand 和 DeleteCommand 屬性用於告訴 SqlDataSource 使用哪些 SQL 語句(或存儲過程)來修改基礎數據庫中的數據
圖
中的代碼示例顯示了一個 SqlDataSource
它將它的 SelectCommand 和 UpdateCommand 屬性設置為參數化的 SQL 語句
請注意
UpdateParameters 使用 Parameter 元素來指示要用於參數的字段的名稱和數據類型
在將 GridView 綁定到該 SqlDataSource 以後
這些 UpdateParameters 值就被綁定到受影響行的具有相同名稱的列
您自己對此進行試驗的最簡單方式是
在 Visual Studio?
中創建一個 Web 窗體
連接到服務器資源管理器窗口中的本地 SQL Server Northwind 數據庫
然後將一個表拖到該 Web 窗體
這會自動創建一個 SqlDataSource 控件以及一個 GridView
Visual Studio 會自動將 SqlDataSource 控件的 ProviderName 和 ConnectionString 屬性設置為 SQL Server Northwind 數據庫
而且
所有四個命令屬性都將被設置為適當的 SQL 語句
然後
您為編輯該 Web 窗體而必須完成的所有工作就是
使用智能標記來選中
Enable Editing
復選框(參見圖
)
educitycn/img_///gif> 圖 GridView設置 數據源控件還可以使用來自其他控件的參數
例如
數據源控件可以檢索給定客戶的所有訂單
在這種情況下
CustomerID 可以是傳遞給 SqlDataSource 控件的 SelectCommand 屬性的 SQL 語句或存儲過程的參數
還可以從其他控件(例如
DropDownList)檢索 CustomerID
並將其直接傳遞到 SqlDataSource 控件的 SQL SelectCommand 中
您可以將控件的值直接鏈接到 SqlDataSource 控件的任一 SQL 語句(SelectCommand
InsertCommand
UpdateCommand 或 DeleteCommand)的參數
還可以指定究竟要將控件的哪個屬性用於該參數
例如
如果您在上一個示例中不需要 DropDownList 的默認屬性
而是需要它的 DataTextField
則可以將 ControlParameter 的 PropertyName 屬性設置為 DataTextField
除了 ControlParameter 以外
還可以將其他參數類型用於數據源控件
如果您要使用新的 ASP
NET 個性化功能
則可以使用 ProfileParameter 從配置文件對象中檢索參數的值
接下來
還有幾個從標准 Request 對象的集合中檢索它們的數據的參數對象類型
例如
CookieParameter 可以用來從 Cookie 中檢索參數的值
QueryStringParameter 從任意請求字符串變量中獲得它的值
而 FormParameter 從 HTML 窗體的輸入字段中獲得它的值
最後
SessionParameter 可以用來從會話變量中檢索它的值
這些類型的參數為數據源控件提供了多個有關如何設置它們的參數值的選項
SqlDataSource 示例 既然我已經完成了概述
那麼我將對使用 SqlDataSource 和 ObjectDataSource 來檢索和修改數據進行一下對比
SqlDataSource 控件(它使用 ADO
NET
DbProviderFactory 對象)具有將它直接鏈接到 OLE DB 或 ODBC 數據源的屬性
當加載包含鏈接到 SqlDataSource 的數據綁定控件的 ASP
NET 頁時
SqlDataSource 直接與基礎數據庫進行通信
因而
SqlDataSourceData 源控件不與現有的業務對象集成
為了查看 SqlDataSource 是如何操作的
讓我們先觀察一下 Orders_SDS
aspx 頁(參見圖
)
有一個 DropDownList 控件
它綁定到一個從 Northwind 數據庫中檢索客戶列表的 SqlDataSource 源控件
educitycn/img_///gif> 圖 通過 SqlDataSource 檢索客戶 還有另外一個名為 sdsOrdersDataSource 的 SqlDataSource
它用於檢索選定客戶的所有訂單
圖
中的代碼(摘自 Orders_SDS
aspx — 它可在下載中得到)顯示了兩個 SqlDataSource 控
From:http://tw.wingwit.com/Article/program/net/201311/13863.html