數據源控件與數據綁定控件交互並隱藏複雜的數據綁定過程。這些工具為數據綁定控件提供數據,並支持插入,刪除,排序和更新等操作的執行。
每個數據源控件包裝一個特定的數據提供程式 - 關係資料庫,XML文檔或自定義類,並幫助我們:
- 管理連接
- 選擇數據
- 管理分頁,緩存等表示方面
- 操縱數據
在ASP.NET中有許多數據源控件可用於從SQL Server,ODBC或OLE DB伺服器,XML檔和業務對象訪問數據。
根據數據的類型,這些控件可以分為兩大類:
- 分層數據源控件
- 基於表的數據源控件
用於分層數據的數據源控件是:
- XMLDataSource - 它允許綁定到具有或不具有模式資訊的XML檔和字串。
- SiteMapDataSource - 它允許綁定到提供站點地圖資訊的提供者。
用於表格數據的數據源控件是:
編號 | 數據源控件 | 描述 |
---|---|---|
1 | SqlDataSource |
它表示與返回SQL數據的ADO.NET數據提供者的連接,包括可通過OLEDB 和ODBC 訪問的數據源。 |
2 | ObjectDataSource |
它允許綁定到返回數據的自定義.Net業務對象。 |
3 | LinqdataSource |
它允許綁定到Linq-to-SQL 查詢的結果(僅由ASP.NET 3.5支持)。 |
4 | AccessDataSource |
它表示與Microsoft Access 資料庫的連接。 |
數據源視圖
數據源視圖是DataSourceView
類的對象。它代表不同數據操作(如排序,過濾等)的數據定制視圖。
DataSourceView
類用作所有數據源視圖類的基類,這些類定義了數據源控件的功能。
下表提供了DataSourceView
類的屬性:
編號 | 屬性 | 描述 |
---|---|---|
1 | CanDelete |
指示是否允許在基礎數據源上進行刪除。 |
2 | CanInsert |
指示是否允許在基礎數據源上插入。 |
3 | CanPage |
指示是否允許在基礎數據源上進行分頁。 |
4 | CanRetrieveTotalRowCount |
指示總行數資訊是否可用。 |
5 | CanSort |
指示是否可以對數據進行排序。 |
6 | CanUpdate |
指示是否允許在基礎數據源上進行更新。 |
7 | Events |
獲取數據源視圖的事件處理程式委託的列表。 |
8 | Name |
視圖的名稱。 |
下表提供了DataSourceView
類的方法:
編號 | 方法 | 描述 |
---|---|---|
1 | CanExecute |
確定是否可以執行指定的命令。 |
2 | ExecuteCommand |
執行特定的命令。 |
3 | ExecuteDelete |
對DataSourceView 對象所表示的數據列表執行刪除操作。 |
4 | ExecuteInsert |
對DataSourceView 對象表示的數據列表執行插入操作。 |
5 | ExecuteSelect |
獲取底層數據存儲的數據列表。 |
6 | ExecuteUpdate |
對DataSourceView 對象表示的數據列表執行更新操作。 |
7 | Delete |
對與視圖關聯的數據執行刪除操作。 |
8 | Insert |
對與視圖關聯的數據執行插入操作。 |
9 | Select |
返回查詢的數據。 |
10 | Update |
對與視圖關聯的數據執行更新操作。 |
11 | OnDataSourceViewChanged |
引發DataSourceViewChanged 事件。 |
12 | RaiseUnsupportedCapabilitiesError |
由RaiseUnsupportedCapabilitiesError 方法調用,以將ExecuteSelect 操作請求的功能與視圖支持的功能進行比較。 |
SqlDataSource控件
SqlDataSource
控件表示與關係資料庫(如SQL Server或Oracle資料庫)的連接,或可通過OLEDB
或開放式資料庫連接(ODBC)訪問的數據。連接數據是通過兩個重要的屬性ConnectionString
和ProviderName
來完成的。
以下代碼片段提供了該控件的基本語法:
<asp:SqlDataSource runat="server" ID="MySqlSource"
ProviderName='<%$ ConnectionStrings:LocalNWind.ProviderName %>'
ConnectionString='<%$ ConnectionStrings:LocalNWind %>'
SelectionCommand= "SELECT * FROM EMPLOYEES" />
<asp:GridView ID="GridView1" runat="server" DataSourceID="MySqlSource" />
在底層數據上配置各種數據操作取決於數據源控件的各種屬性(屬性組)。
下表提供了SqlDataSource
控件的相關屬性集,它提供了控件的編程介面:
編號 | 屬性集/組 | |
---|---|---|
1 | DeleteCommand ,DeleteParameters ,DeleteCommandType |
獲取或設置用於刪除基礎數據中的行的SQL語句,參數和類型。 |
2 | FilterExpression ,FilterParameters |
獲取或設置數據過濾字串和參數。 |
3 | InsertCommand ,InsertParameters ,InsertCommandType |
獲取或設置用於在基礎資料庫中插入行的SQL語句,參數和類型。 |
4 | SelectCommand ,SelectParameters ,SelectCommandType |
獲取或設置從底層資料庫檢索行的SQL語句,參數和類型。 |
5 | SortParameterName |
獲取或設置命令的存儲過程將用於排序數據的輸入參數的名稱。 |
5 | UpdateCommand ,UpdateParameters ,UpdateCommandType |
獲取或設置用於更新基礎數據存儲中的行的SQL語句,參數和類型。 |
以下代碼片段顯示了為數據操作啟用的數據源控件:
<asp:SqlDataSource runat="server" ID= "MySqlSource"
ProviderName='<%$ ConnectionStrings:LocalNWind.ProviderName %>'
ConnectionString=' <%$ ConnectionStrings:LocalNWind %>'
SelectCommand= "SELECT * FROM EMPLOYEES"
UpdateCommand= "UPDATE EMPLOYEES SET LASTNAME=@lame"
DeleteCommand= "DELETE FROM EMPLOYEES WHERE EMPLOYEEID=@eid"
FilterExpression= "EMPLOYEEID > 10">
.....
.....
</asp:SqlDataSource>
ObjectDataSource控件
ObjectDataSource
控件允許用戶定義的類將其方法的輸出關聯到數據綁定控件。該類的編程介面與SqlDataSource
控件幾乎相同。
以下是綁定業務對象的兩個重要方面:
- 可綁定的類應該有一個默認的構造函數,它應該是無狀態的,並且可以映射選擇,更新,插入和刪除語義的方法。
- 對象一次只能更新一個專案,批處理操作不支持。
讓我們直接看一個例子來處理這個控件。 Student
類是與對象數據源一起使用的類。 這個類有三個屬性:學生ID,姓名和城市。 它有一個默認的構造函數和一個GetStudents
方法來檢索數據。
Student
類代碼如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
/// <summary>
/// Student 的摘要說明
/// </summary>
public class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
public string City { get; set; }
public Student()
{ }
public DataSet GetStudents()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("Students");
dt.Columns.Add("學生編號", typeof(System.Int32));
dt.Columns.Add("姓名", typeof(System.String));
dt.Columns.Add("城市", typeof(System.String));
dt.Rows.Add(new object[] { 1001, "何馬", "海口" });
dt.Rows.Add(new object[] { 1002, "李小靜", "上海" });
ds.Tables.Add(dt);
return ds;
}
}
執行以下步驟將對象與對象數據源綁定並檢索數據:
- 創建一個新的網站,名稱為:DataSourceDemo。如下圖 -
- 通過右鍵單擊解決方案資源管理器中的專案名稱,添加一個類(名稱為:
Students.cs
),並將上面的代碼放入其中。 - 構建解決方案,以便應用程式可以使用該類的引用。
- 將
ObjectDataSource
控件放置在Web窗體中。如下圖所示 - - 通過點擊上圖中的 【配置數據源…】 鏈接來選擇對象來配置數據源。參考下圖 -
- 為數據的不同操作選擇一種數據方法。在這個例子中,只有一個方法。如下圖所示 -
- 在窗體頁面上放置數據綁定控件(如:
GridView
),並選擇對象數據源作為其基礎數據源。 - 經過上面步驟後,設計視圖應該如下所示:
檔 Default.aspx 中的代碼如下所示 -
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>數據源示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetStudents" TypeName="Student"></asp:ObjectDataSource>
<br />
<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1">
</asp:GridView>
</div>
</form>
</body>
</html>
運行該專案,它從Student
類中檢索硬編碼的元組,並顯示其中的數據如下 -
AccessDataSource控件
AccessDataSource
控件表示到Access資料庫的連接。它基於SqlDataSource
控件,並提供更簡單的編程介面。以下代碼片段提供了數據源的基本語法:
<asp:AccessDataSource ID="AccessDataSource1 runat="server"
DataFile="~/App_Data/ASPDotNetStepByStep.mdb" SelectCommand="SELECT * FROM [DotNetReferences]">
</asp:AccessDataSource>
AccessDataSource
控件以只讀模式打開資料庫。但是,它也可以用於執行插入,更新或刪除操作。這是使用ADO.NET命令和參數集合完成的。
從ASP.NET應用程式中更新Access資料庫是有問題的,因為Access
資料庫是普通檔,ASP.NET應用程式的默認帳戶可能沒有寫入資料庫檔的許可權。