數(shù)據(jù)源控件與數(shù)據(jù)綁定控件交互并隱藏復(fù)雜的數(shù)據(jù)綁定過(guò)程。這些工具為數(shù)據(jù)綁定控件提供數(shù)據(jù),并支持插入,刪除,排序和更新等操作的執(zhí)行。
每個(gè)數(shù)據(jù)源控件包裝一個(gè)特定的數(shù)據(jù)提供程序 - 關(guān)系數(shù)據(jù)庫(kù),XML文檔或自定義類(lèi),并幫助我們:
在ASP.NET中有許多數(shù)據(jù)源控件可用于從SQL Server,ODBC或OLE DB服務(wù)器,XML文件和業(yè)務(wù)對(duì)象訪問(wèn)數(shù)據(jù)。
根據(jù)數(shù)據(jù)的類(lèi)型,這些控件可以分為兩大類(lèi):
用于分層數(shù)據(jù)的數(shù)據(jù)源控件是:
用于表格數(shù)據(jù)的數(shù)據(jù)源控件是:
| 編號(hào) | 數(shù)據(jù)源控件 | 描述 |
|---|---|---|
| 1 | SqlDataSource |
它表示與返回SQL數(shù)據(jù)的ADO.NET數(shù)據(jù)提供者的連接,包括可通過(guò)OLEDB和ODBC訪問(wèn)的數(shù)據(jù)源。 |
| 2 | ObjectDataSource |
它允許綁定到返回?cái)?shù)據(jù)的自定義.Net業(yè)務(wù)對(duì)象。 |
| 3 | LinqdataSource |
它允許綁定到Linq-to-SQL查詢(xún)的結(jié)果(僅由ASP.NET 3.5支持)。 |
| 4 | AccessDataSource |
它表示與Microsoft Access 數(shù)據(jù)庫(kù)的連接。 |
數(shù)據(jù)源視圖是DataSourceView類(lèi)的對(duì)象。它代表不同數(shù)據(jù)操作(如排序,過(guò)濾等)的數(shù)據(jù)定制視圖。
DataSourceView類(lèi)用作所有數(shù)據(jù)源視圖類(lèi)的基類(lèi),這些類(lèi)定義了數(shù)據(jù)源控件的功能。
下表提供了DataSourceView類(lèi)的屬性:
| 編號(hào) | 屬性 | 描述 |
|---|---|---|
| 1 | CanDelete |
指示是否允許在基礎(chǔ)數(shù)據(jù)源上進(jìn)行刪除。 |
| 2 | CanInsert |
指示是否允許在基礎(chǔ)數(shù)據(jù)源上插入。 |
| 3 | CanPage |
指示是否允許在基礎(chǔ)數(shù)據(jù)源上進(jìn)行分頁(yè)。 |
| 4 | CanRetrieveTotalRowCount |
指示總行數(shù)信息是否可用。 |
| 5 | CanSort |
指示是否可以對(duì)數(shù)據(jù)進(jìn)行排序。 |
| 6 | CanUpdate |
指示是否允許在基礎(chǔ)數(shù)據(jù)源上進(jìn)行更新。 |
| 7 | Events |
獲取數(shù)據(jù)源視圖的事件處理程序委托的列表。 |
| 8 | Name |
視圖的名稱(chēng)。 |
下表提供了DataSourceView類(lèi)的方法:
| 編號(hào) | 方法 | 描述 |
|---|---|---|
| 1 | CanExecute |
確定是否可以執(zhí)行指定的命令。 |
| 2 | ExecuteCommand |
執(zhí)行特定的命令。 |
| 3 | ExecuteDelete |
對(duì)DataSourceView對(duì)象所表示的數(shù)據(jù)列表執(zhí)行刪除操作。 |
| 4 | ExecuteInsert |
對(duì)DataSourceView對(duì)象表示的數(shù)據(jù)列表執(zhí)行插入操作。 |
| 5 | ExecuteSelect |
獲取底層數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)列表。 |
| 6 | ExecuteUpdate |
對(duì)DataSourceView對(duì)象表示的數(shù)據(jù)列表執(zhí)行更新操作。 |
| 7 | Delete |
對(duì)與視圖關(guān)聯(lián)的數(shù)據(jù)執(zhí)行刪除操作。 |
| 8 | Insert |
對(duì)與視圖關(guān)聯(lián)的數(shù)據(jù)執(zhí)行插入操作。 |
| 9 | Select |
返回查詢(xún)的數(shù)據(jù)。 |
| 10 | Update |
對(duì)與視圖關(guān)聯(lián)的數(shù)據(jù)執(zhí)行更新操作。 |
| 11 | OnDataSourceViewChanged |
引發(fā)DataSourceViewChanged事件。 |
| 12 | RaiseUnsupportedCapabilitiesError |
由RaiseUnsupportedCapabilitiesError方法調(diào)用,以將ExecuteSelect操作請(qǐng)求的功能與視圖支持的功能進(jìn)行比較。 |
SqlDataSource控件表示與關(guān)系數(shù)據(jù)庫(kù)(如SQL Server或Oracle數(shù)據(jù)庫(kù))的連接,或可通過(guò)OLEDB或開(kāi)放式數(shù)據(jù)庫(kù)連接(ODBC)訪問(wèn)的數(shù)據(jù)。連接數(shù)據(jù)是通過(guò)兩個(gè)重要的屬性ConnectionString和ProviderName來(lái)完成的。
以下代碼片段提供了該控件的基本語(yǔ)法:
<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" />
在底層數(shù)據(jù)上配置各種數(shù)據(jù)操作取決于數(shù)據(jù)源控件的各種屬性(屬性組)。
下表提供了SqlDataSource控件的相關(guān)屬性集,它提供了控件的編程接口:
| 編號(hào) | 屬性集/組 | |
|---|---|---|
| 1 | DeleteCommand,DeleteParameters,DeleteCommandType |
獲取或設(shè)置用于刪除基礎(chǔ)數(shù)據(jù)中的行的SQL語(yǔ)句,參數(shù)和類(lèi)型。 |
| 2 | FilterExpression,FilterParameters |
獲取或設(shè)置數(shù)據(jù)過(guò)濾字符串和參數(shù)。 |
| 3 | InsertCommand,InsertParameters,InsertCommandType |
獲取或設(shè)置用于在基礎(chǔ)數(shù)據(jù)庫(kù)中插入行的SQL語(yǔ)句,參數(shù)和類(lèi)型。 |
| 4 | SelectCommand,SelectParameters,SelectCommandType |
獲取或設(shè)置從底層數(shù)據(jù)庫(kù)檢索行的SQL語(yǔ)句,參數(shù)和類(lèi)型。 |
| 5 | SortParameterName |
獲取或設(shè)置命令的存儲(chǔ)過(guò)程將用于排序數(shù)據(jù)的輸入?yún)?shù)的名稱(chēng)。 |
| 5 | UpdateCommand,UpdateParameters,UpdateCommandType |
獲取或設(shè)置用于更新基礎(chǔ)數(shù)據(jù)存儲(chǔ)中的行的SQL語(yǔ)句,參數(shù)和類(lèi)型。 |
以下代碼片段顯示了為數(shù)據(jù)操作啟用的數(shù)據(jù)源控件:
<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控件允許用戶定義的類(lèi)將其方法的輸出關(guān)聯(lián)到數(shù)據(jù)綁定控件。該類(lèi)的編程接口與SqlDataSource控件幾乎相同。
以下是綁定業(yè)務(wù)對(duì)象的兩個(gè)重要方面:
讓我們直接看一個(gè)例子來(lái)處理這個(gè)控件。 Student類(lèi)是與對(duì)象數(shù)據(jù)源一起使用的類(lèi)。 這個(gè)類(lèi)有三個(gè)屬性:學(xué)生ID,姓名和城市。 它有一個(gè)默認(rèn)的構(gòu)造函數(shù)和一個(gè)GetStudents方法來(lái)檢索數(shù)據(jù)。
Student類(lèi)代碼如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
/// <summary>
/// Student 的摘要說(shuō)明
/// </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("學(xué)生編號(hào)", 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;
}
}
執(zhí)行以下步驟將對(duì)象與對(duì)象數(shù)據(jù)源綁定并檢索數(shù)據(jù):

Students.cs),并將上面的代碼放入其中。ObjectDataSource控件放置在Web窗體中。如下圖所示 -


GridView),并選擇對(duì)象數(shù)據(jù)源作為其基礎(chǔ)數(shù)據(jù)源。

文件 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>數(shù)據(jù)源示例</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>
運(yùn)行該項(xiàng)目,它從Student類(lèi)中檢索硬編碼的元組,并顯示其中的數(shù)據(jù)如下 -

AccessDataSource控件表示到Access數(shù)據(jù)庫(kù)的連接。它基于SqlDataSource控件,并提供更簡(jiǎn)單的編程接口。以下代碼片段提供了數(shù)據(jù)源的基本語(yǔ)法:
<asp:AccessDataSource ID="AccessDataSource1 runat="server"
DataFile="~/App_Data/ASPDotNetStepByStep.mdb" SelectCommand="SELECT * FROM [DotNetReferences]">
</asp:AccessDataSource>
AccessDataSource控件以只讀模式打開(kāi)數(shù)據(jù)庫(kù)。但是,它也可以用于執(zhí)行插入,更新或刪除操作。這是使用ADO.NET命令和參數(shù)集合完成的。
從ASP.NET應(yīng)用程序中更新Access數(shù)據(jù)庫(kù)是有問(wèn)題的,因?yàn)?code>Access數(shù)據(jù)庫(kù)是普通文件,ASP.NET應(yīng)用程序的默認(rèn)帳戶可能沒(méi)有寫(xiě)入數(shù)據(jù)庫(kù)文件的權(quán)限。