數(shù)據(jù)源
一個 data sourse 控件與數(shù)據(jù)綁定的控件相互作用,并隱藏了復雜的數(shù)據(jù)的聯(lián)編過程。這些是提供數(shù)據(jù)給 data bound 控件的工具,并且支持如插入,刪除和更新操作的執(zhí)行。
每一個 data sourse 控件包裹了一個特殊的數(shù)據(jù)提供者相關的數(shù)據(jù)庫,XML 文件,或者是自定義類,并且?guī)椭?/p>
- 管理連接
- 選擇數(shù)據(jù)
- 管理像分頁,緩存等的展示方面
- 操控數(shù)據(jù)
有許多可在 ASP.NET 中獲得的 data sourse 控件,為從 SQL 服務器,ODBC 或者 OLE DB 服務器,從 XML 文件,和從業(yè)務對象中獲得數(shù)據(jù)。
基于數(shù)據(jù)類型,這些控件能被分為兩個種類:
- 分層的 data sourse 控件
- 基于表格的 data sourse 控件
用于分層數(shù)據(jù)的 data sourse 控件是:
- XMLDataSource – 它允許用或者不用模式信息綁定 XML 文件和字符串。
- SiteMapDataSource – 它允許綁定一個提供站點地圖信息的提供者。
用作表格數(shù)據(jù)的 data source 控件是:
SqlDataSource | 它表示到返回 SQL 數(shù)據(jù)的 ADO.NET data provider 的連接,包括通過 OLEDB 和 QDBC 可獲得的 data sources。 |
ObjectDataSource | 它允許綁定一個返回數(shù)據(jù)的自定義的 .Net business 對象 |
LinqdataSource | 它允許綁定 Linq-t0-SQL 查詢的結果。(僅由 ASP.NET 3.5 支持) |
AccessDataSource | 它表示到 Microsoft Access 數(shù)據(jù)庫的連接。 |
Data Source 視圖
Data source 視圖是 DataSourceView 類的對象,它代表一個自定義的為不同數(shù)據(jù)操作如排序,過濾等而設計的數(shù)據(jù)視圖。
DataSourceView 類作為所有 data source 視圖類的基本類而使用,它定義了 data source 控件的性能。
以下表格提供了 DataSourceView 類的屬性:
CanDelete | 表示是否允許刪除潛在的 data source。 |
CanInsert | 表示是否允許插入潛在的 data source。 |
CanPage | 表示是否允許給潛在的 data source 分頁。 |
CanRetrieveTotalRowCount | 表示總的行信息能否獲得。 |
CanSort | 表示數(shù)據(jù)是否能排序。 |
CanUpdate | 表示是否允許在潛在的 data source 上更新。 |
Events | 獲得 data source 視圖代表的事件句柄的列表。 |
Name | 視圖的名字。 |
以下的表格提供了 DataSourceView 類的方法:
CanExecute | 確定指定的命令是否能執(zhí)行。 |
ExecuteCommand | 執(zhí)行指定的命令。 |
ExecuteDelete | 在 DataSourceView 對象所表示的數(shù)據(jù)列表上執(zhí)行一個刪除操作。 |
ExecuteInsert | 在 DataSourceView 對象所表示的數(shù)據(jù)列表上執(zhí)行一個插入操作。 |
ExecuteSelect | 從潛在的數(shù)據(jù)存儲中獲取數(shù)據(jù)列表。 |
ExecuteUpdate | 在 DataSourceView 對象所表示的數(shù)據(jù)列表上執(zhí)行一個更新操作。 |
Delete | 在和視圖所聯(lián)系的數(shù)據(jù)上執(zhí)行一個刪除操作。 |
Insert | 在和視圖所聯(lián)系的數(shù)據(jù)上執(zhí)行一個插入操作。 |
Select | 返回被查詢的數(shù)據(jù)。 |
Update | 在和視圖所聯(lián)系的數(shù)據(jù)上執(zhí)行一個更新操作。 |
OnDataSourceViewChanged | 提出 DataSourceViewChanged 事件。 |
RaiseUnsupportedCapabilitiesError | 由 RaiseUnsupportedCapabilitiesError 方法調(diào)用來將 ExecuteSelect 操作所需要的能力和視圖所支持的能力相比較。 |
SqlDataSource 控件
SqlDataSource 控件代表到相關數(shù)據(jù)庫比如 SQL Server 或者 Oracle數(shù)據(jù)庫,或者通過 OLEDB 或 Open Database Connectivity(ODBC) 的可存取數(shù)據(jù)的連接。數(shù)據(jù)連接通過兩個重要的屬性 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" />在潛在的數(shù)據(jù)上配置不同的數(shù)據(jù)操作依賴于 data source 控件的不同屬性(屬性集)。
以下的表格提供了相關的 SqlDataSource 控件的屬性集,它提供了控件的編程接口:
DeleteCommand, DeleteParameters, DeleteCommandType | 獲取或設置 SQL 語句,參數(shù)和在潛在數(shù)據(jù)中刪除行的類型。 |
FilterExpression, FilterParameters | 獲取并設置數(shù)據(jù)過濾字符串和參數(shù)。 |
InsertCommand, InsertParameters, InsertCommandType | 獲取或設置 SQL 語句,參數(shù)和在潛在數(shù)據(jù)中插入行的類型。 |
SelectCommand, SelectParameters, SelectCommandType | 獲取或設置 SQL 語句,參數(shù)和在潛在數(shù)據(jù)中檢索行的類型。 |
SortParameterName | 獲取或設置一個輸入?yún)?shù)的名字,它將被命令存儲的過程用來給數(shù)據(jù)排序。 |
UpdateCommand, UpdateParameters, UpdateCommandType | 獲取或設置 SQL 語句,參數(shù)和在潛在數(shù)據(jù)中更新行的類型。 |
以下的代碼片段展示了能被用來做數(shù)據(jù)操作的 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 控件
ObjectDataSource 控件使 user-defined 類能讓它們方法的輸出和 data bound 控件相連接。這個類的編程接口幾乎和 SqlDataSource 控件相同。
以下是綁定客戶對象的兩個重要方面:
- 可綁定的類應該擁有一個默認的構造函數(shù),它應該是無狀態(tài)的,并且擁有能夠映射到選擇,更新,插入,和刪除語意的方法。
- 對象必須一次更新一個項目,批處理操作是不支持的。
讓我們直接到一個例子中來使用這個控件。student 類是被用來和一個 data source 對象一起使用的類。這個類有三個屬性:a student id,name,和 city。它有一個默認的構造函數(shù)和一個檢索數(shù)據(jù)的 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, "M. H. Kabir", "Calcutta" }); dt.Rows.Add(new object[] { 2, "Ayan J. Sarkar", "Calcutta" }); ds.Tables.Add(dt); return ds; } }采取以下的步驟來將對線綁定到一個 data source 對象和檢索數(shù)據(jù):
- 創(chuàng)建一個新的網(wǎng)頁。
- 通過右擊 Solution Explorer 的項目來給它添加一個類(Student.cs),添加一個類模板,將上面的代碼放在里面。
- 建立方法使得應用程序可以使用類的引用。
- 在網(wǎng)頁表單中放置一個 data source 控件對象。
- 通過選擇對象來配置 data source。
AccessDataSource 控件打開了只讀模式的數(shù)據(jù)庫。但是,它也能被用來執(zhí)行插入,更新或者刪除操作。這以使用 ADO.NET 命令和參數(shù)集合來完成。
更新對于 ASP.NET 應用程序內(nèi)的 Access 數(shù)據(jù)庫來說是有問題的,這是因為 Access 數(shù)據(jù)庫是一個純文本并且默認的 ASP.NET 應用程序賬戶可能有寫數(shù)據(jù)庫文件的權限。