一個data sourse 控制項與資料綁定的控制項相互作用,並隱藏了複雜的資料的聯編過程。這些是提供資料給data bound 控制項的工具,並且支援如插入,刪除和更新操作的執行。
每一個data sourse 控制項包裹了一個特殊的資料提供者相關的資料庫,XML 文件,或是自訂類,並且幫助:
管理連線
選擇數據
管理像分頁,快取等的展示方面
操控數據
有許多可在ASP.NET 中取得的data sourse 控件,為從SQL 伺服器,ODBC 或OLE DB 伺服器,從XML 文件,和從業務物件取得資料。
基於資料類型,這些控制項能被分為兩個種類:
分層的data sourse 控件
基於表格的data sourse 控件
用於分層資料的data sourse 控制項是:
XMLDataSource - 它允許使用或不使用模式資訊綁定XML 檔案和字串。
SiteMapDataSource - 它允許綁定一個提供網站地圖資訊的提供者。
用作表格資料的data source 控制項是:
Data source 控制項 | 描述 |
---|---|
SqlDataSource | 它表示到傳回SQL 資料的ADO.NET data provider 的連接,包括透過OLEDB 和QDBC 可取得的data sources。 |
ObjectDataSource | 它允許綁定一個傳回資料的自訂的.Net business 對象 |
LinqdataSource | 它允許綁定Linq-t0-SQL 查詢的結果。 (僅由ASP.NET 3.5 支援) |
AccessDataSource | 它表示到Microsoft Access 資料庫的連線。 |
Data source 視圖是DataSourceView 類別的對象,它代表一個自訂的為不同資料操作如排序,過濾等而設計的資料視圖。
DataSourceView 類別是作為所有data source 視圖類別的基本類別而使用,它定義了data source 控制項的效能。
以下表格提供了DataSourceView 類別的屬性:
屬性 | 描述 |
---|---|
CanDelete | 表示是否允許刪除潛在的data source。 |
CanInsert | 表示是否允許插入潛在的data source。 |
CanPage | 表示是否允許給予潛在的data source 分頁。 |
CanRetrieveTotalRowCount | 表示總的行資訊能否取得。 |
CanSort | 表示資料是否能排序。 |
CanUpdate | 表示是否允許在潛在的data source 上更新。 |
Events | 取得data source 視圖代表的事件句柄的清單。 |
Name | 視圖的名字。 |
以下的表格提供了DataSourceView 類別的方法:
方法 | 描述 |
---|---|
CanExecute | 確定指定的命令是否能執行。 |
ExecuteCommand | 執行指定的命令。 |
ExecuteDelete | 在DataSourceView 物件所表示的資料清單上執行一個刪除操作。 |
ExecuteInsert | 在DataSourceView 物件所表示的資料清單上執行一個插入操作。 |
ExecuteSelect | 從潛在的資料儲存中取得資料清單。 |
ExecuteUpdate | 在DataSourceView 物件所表示的資料清單上執行一個更新操作。 |
Delete | 在和視圖所聯絡的資料上執行一個刪除操作。 |
Insert | 在和視圖所聯絡的資料上執行一個插入操作。 |
Select | 傳回被查詢的資料。 |
Update | 在和視圖所聯繫的資料上執行一個更新操作。 |
OnDataSourceViewChanged | 提出DataSourceViewChanged 事件。 |
RaiseUnsupportedCapabilitiesError | 由RaiseUnsupportedCapabilitiesError 方法呼叫來將ExecuteSelect 操作所需的能力和視圖所支援的能力進行比較。 |
SqlDataSource 控制項代表到相關資料庫例如SQL Server 或Oracle資料庫,或透過OLEDB 或Open Database Connectivity(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" />
在潛在的資料上配置不同的資料操作依賴data source 控制項的不同屬性(屬性集)。
以下的表格提供了相關的SqlDataSource 控制項的屬性集,它提供了控制項的程式介面:
屬性群組 | 描述 |
---|---|
DeleteCommand,DeleteParameters,DeleteCommandType | 取得或設定SQL 語句,參數和在潛在資料中刪除行的類型。 |
FilterExpression,FilterParameters | 取得並設定資料過濾字串和參數。 |
InsertCommand,InsertParameters,InsertCommandType | 取得或設定SQL 語句,參數和在潛在資料中插入行的類型。 |
SelectCommand,SelectParameters,SelectCommandType | 取得或設定SQL 語句,參數和在潛在資料中檢索行的類型。 |
SortParameterName | 取得或設定一個輸入參數的名字,它將被命令儲存的過程用來為資料排序。 |
UpdateCommand,UpdateParameters,UpdateCommandType | 取得或設定SQL 語句,參數和在潛在資料中更新行的類型。 |
以下的程式碼片段展示了能被用來做資料操作的data source 控制項:
<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 控制項可讓user-defined 類別能讓它們方法的輸出和data bound 控制項連結。這個類別的程式介面幾乎和SqlDataSource 控制項相同。
以下是綁定客戶物件的兩個重要面向:
可綁定的類別應該擁有一個預設的建構函數,它應該是無狀態的,並且擁有能夠映射到選擇,更新,插入,和刪除語義的方法。
物件必須一次更新一個項目,批次操作是不支援的。
讓我們直接到一個範例中來使用這個控制項。 student 類別是用來和一個data source 物件一起使用的類別。這個類別有三個屬性:a student id,name,和city。它有一個預設的建構子和一個檢索資料的GetStudents 方法。
student 類別:
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("StudentID", typeof(System.Int32)); dt.Columns.Add("StudentName", typeof(System.String)); dt.Columns.Add("StudentCity", typeof(System.String)); dt.Rows.Add(new object[] { 1, "MH Kabir", "Calcutta" }); dt.Rows.Add(new object[] { 2, "Ayan J. Sarkar", "Calcutta" }); ds.Tables.Add(dt); return ds; }}
採取以下的步驟來將對線綁定到一個data source 物件和檢索資料:
建立一個新的網頁。
透過右鍵點選Solution Explorer 的專案來為它新增一個類別(Student.cs),新增一個類別模板,將上面的程式碼放在裡面。
建立方法使得應用程式可以使用類別的參考。
在網頁表單中放置一個data source 控制項物件。
透過選擇物件來配置data source。
給不同的資料操作選擇資料方法。在這個例子中,只有一個方法。
在頁面上放置一個data bound 控制項例如grid view 並且選擇data source 物件作為潛在的data source。
在這個階段,設計視圖應該像以下這樣:
運行項目,它檢索了students 類別中的硬編碼的元祖。
AccessDataSource 控制項代表了到Access 資料庫的連線。它基於SqlDataSource 控制項並提供了更簡單的程式介面。以下的程式碼片段提供了data source 的基本語法:
<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 應用程式帳戶可能有寫入資料庫檔案的權限。