鍍金池/ 教程/ C#/ 數(shù)據(jù)源
調(diào)試
管理狀態(tài)
Panel 控件
Web 服務(wù)
語(yǔ)言集成查詢
數(shù)據(jù)源
基礎(chǔ)控件
廣告輪轉(zhuǎn)器
服務(wù)器端
服務(wù)器控件
ADO.NET
多線程
HTML 服務(wù)器
生命周期
Ajax 控制
客戶端
異常處理
環(huán)境設(shè)置
部署
個(gè)性化
驗(yàn)證器
多視圖
日歷
文件上傳
ASP.NET - 數(shù)據(jù)綁定
數(shù)據(jù)庫(kù)存取
實(shí)例
自定義控件
簡(jiǎn)介
配置
數(shù)據(jù)緩存
安全性
指令
事件處理

數(shù)據(jù)源

一個(gè) data sourse 控件與數(shù)據(jù)綁定的控件相互作用,并隱藏了復(fù)雜的數(shù)據(jù)的聯(lián)編過程。這些是提供數(shù)據(jù)給 data bound 控件的工具,并且支持如插入,刪除和更新操作的執(zhí)行。

每一個(gè) data sourse 控件包裹了一個(gè)特殊的數(shù)據(jù)提供者相關(guān)的數(shù)據(jù)庫(kù),XML 文件,或者是自定義類,并且?guī)椭?/p>

  • 管理連接
  • 選擇數(shù)據(jù)
  • 管理像分頁(yè),緩存等的展示方面
  • 操控?cái)?shù)據(jù)

有許多可在 ASP.NET 中獲得的 data sourse 控件,為從 SQL 服務(wù)器,ODBC 或者 OLE DB 服務(wù)器,從 XML 文件,和從業(yè)務(wù)對(duì)象中獲得數(shù)據(jù)。

基于數(shù)據(jù)類型,這些控件能被分為兩個(gè)種類:

  • 分層的 data sourse 控件
  • 基于表格的 data sourse 控件

用于分層數(shù)據(jù)的 data sourse 控件是:

  • XMLDataSource - 它允許用或者不用模式信息綁定 XML 文件和字符串。
  • SiteMapDataSource - 它允許綁定一個(gè)提供站點(diǎn)地圖信息的提供者。

用作表格數(shù)據(jù)的 data source 控件是:

Data source 控件 描述
SqlDataSource 它表示到返回 SQL 數(shù)據(jù)的 ADO.NET data provider 的連接,包括通過 OLEDB 和 QDBC 可獲得的 data sources。
ObjectDataSource 它允許綁定一個(gè)返回?cái)?shù)據(jù)的自定義的 .Net business 對(duì)象
LinqdataSource 它允許綁定 Linq-t0-SQL 查詢的結(jié)果。(僅由 ASP.NET 3.5 支持)
AccessDataSource 它表示到 Microsoft Access 數(shù)據(jù)庫(kù)的連接。

Data Source 視圖

Data source 視圖是 DataSourceView 類的對(duì)象,它代表一個(gè)自定義的為不同數(shù)據(jù)操作如排序,過濾等而設(shè)計(jì)的數(shù)據(jù)視圖。

DataSourceView 類作為所有 data source 視圖類的基本類而使用,它定義了 data source 控件的性能。

以下表格提供了 DataSourceView 類的屬性:

屬性 描述
CanDelete 表示是否允許刪除潛在的 data source。
CanInsert 表示是否允許插入潛在的 data source。
CanPage 表示是否允許給潛在的 data source 分頁(yè)。
CanRetrieveTotalRowCount 表示總的行信息能否獲得。
CanSort 表示數(shù)據(jù)是否能排序。
CanUpdate 表示是否允許在潛在的 data source 上更新。
Events 獲得 data source 視圖代表的事件句柄的列表。
Name 視圖的名字。

以下的表格提供了 DataSourceView 類的方法:

方法 描述
CanExecute 確定指定的命令是否能執(zhí)行。
ExecuteCommand 執(zhí)行指定的命令。
ExecuteDelete 在 DataSourceView 對(duì)象所表示的數(shù)據(jù)列表上執(zhí)行一個(gè)刪除操作。
ExecuteInsert 在 DataSourceView 對(duì)象所表示的數(shù)據(jù)列表上執(zhí)行一個(gè)插入操作。
ExecuteSelect 從潛在的數(shù)據(jù)存儲(chǔ)中獲取數(shù)據(jù)列表。
ExecuteUpdate 在 DataSourceView 對(duì)象所表示的數(shù)據(jù)列表上執(zhí)行一個(gè)更新操作。
Delete 在和視圖所聯(lián)系的數(shù)據(jù)上執(zhí)行一個(gè)刪除操作。
Insert 在和視圖所聯(lián)系的數(shù)據(jù)上執(zhí)行一個(gè)插入操作。
Select 返回被查詢的數(shù)據(jù)。
Update 在和視圖所聯(lián)系的數(shù)據(jù)上執(zhí)行一個(gè)更新操作。
OnDataSourceViewChanged 提出 DataSourceViewChanged 事件。
RaiseUnsupportedCapabilitiesError 由 RaiseUnsupportedCapabilitiesError 方法調(diào)用來將 ExecuteSelect 操作所需要的能力和視圖所支持的能力相比較。

SqlDataSource 控件

SqlDataSource 控件代表到相關(guān)數(shù)據(jù)庫(kù)比如 SQL Server 或者 Oracle數(shù)據(jù)庫(kù),或者通過 OLEDB 或 Open Database Connectivity(ODBC) 的可存取數(shù)據(jù)的連接。數(shù)據(jù)連接通過兩個(gè)重要的屬性 ConnectionString 和 ProviderName 完成。

以下的代碼片段提供了控件的基本語(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ù)操作依賴于 data source 控件的不同屬性(屬性集)。

以下的表格提供了相關(guān)的 SqlDataSource 控件的屬性集,它提供了控件的編程接口:

屬性組 描述
DeleteCommand,
DeleteParameters,
DeleteCommandType
獲取或設(shè)置 SQL 語(yǔ)句,參數(shù)和在潛在數(shù)據(jù)中刪除行的類型。
FilterExpression,
FilterParameters
獲取并設(shè)置數(shù)據(jù)過濾字符串和參數(shù)。
InsertCommand,
InsertParameters,
InsertCommandType
獲取或設(shè)置 SQL 語(yǔ)句,參數(shù)和在潛在數(shù)據(jù)中插入行的類型。
SelectCommand,
SelectParameters,
SelectCommandType
獲取或設(shè)置 SQL 語(yǔ)句,參數(shù)和在潛在數(shù)據(jù)中檢索行的類型。
SortParameterName 獲取或設(shè)置一個(gè)輸入?yún)?shù)的名字,它將被命令存儲(chǔ)的過程用來給數(shù)據(jù)排序。
UpdateCommand,
UpdateParameters,
UpdateCommandType
獲取或設(shè)置 SQL 語(yǔ)句,參數(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 控件相連接。這個(gè)類的編程接口幾乎和 SqlDataSource 控件相同。

以下是綁定客戶對(duì)象的兩個(gè)重要方面:

  • 可綁定的類應(yīng)該擁有一個(gè)默認(rèn)的構(gòu)造函數(shù),它應(yīng)該是無(wú)狀態(tài)的,并且擁有能夠映射到選擇,更新,插入,和刪除語(yǔ)意的方法。
  • 對(duì)象必須一次更新一個(gè)項(xiàng)目,批處理操作是不支持的。

讓我們直接到一個(gè)例子中來使用這個(gè)控件。student 類是被用來和一個(gè) data source 對(duì)象一起使用的類。這個(gè)類有三個(gè)屬性:a student id,name,和 city。它有一個(gè)默認(rèn)的構(gòu)造函數(shù)和一個(gè)檢索數(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;
   }
}

采取以下的步驟來將對(duì)線綁定到一個(gè) data source 對(duì)象和檢索數(shù)據(jù):

  • 創(chuàng)建一個(gè)新的網(wǎng)頁(yè)。
  • 通過右擊 Solution Explorer 的項(xiàng)目來給它添加一個(gè)類(Student.cs),添加一個(gè)類模板,將上面的代碼放在里面。
  • 建立方法使得應(yīng)用程序可以使用類的引用。
  • 在網(wǎng)頁(yè)表單中放置一個(gè) data source 控件對(duì)象。
  • 通過選擇對(duì)象來配置 data source。

http://wiki.jikexueyuan.com/project/asp-net/images/selecting_the_object.jpg" alt="1" />

  • 給不同的數(shù)據(jù)操作選擇數(shù)據(jù)方法。在這個(gè)例子中,僅有一個(gè)方法。

http://wiki.jikexueyuan.com/project/asp-net/images/select_data_method.jpg" alt="2" />

  • 在頁(yè)面上放置一個(gè) data bound 控件比如 grid view 并且選擇 data source 對(duì)象作為潛在的 data source。

http://wiki.jikexueyuan.com/project/asp-net/images/data_bound_control.jpg" alt="3" />

  • 在這個(gè)階段,設(shè)計(jì)視圖應(yīng)該像以下這樣:

http://wiki.jikexueyuan.com/project/asp-net/images/object_data_source.jpg" alt="4" />

  • 運(yùn)行項(xiàng)目,它檢索了 students 類中的硬編碼的元祖。

http://wiki.jikexueyuan.com/project/asp-net/images/object_data_result.jpg" alt="5" />

AccessDataSource 控件

AccessDataSource 控件代表了到 Access 數(shù)據(jù)庫(kù)的連接。它基于 SqlDataSource 控件并提供了更簡(jiǎn)單的編程接口。以下的代碼片段提供了 data source 的基本語(yǔ)法:

<asp:AccessDataSource ID="AccessDataSource1 runat="server" 
   DataFile="~/App_Data/ASPDotNetStepByStep.mdb" SelectCommand="SELECT * FROM  [DotNetReferences]">
</asp:AccessDataSource>

AccessDataSource 控件打開了只讀模式的數(shù)據(jù)庫(kù)。但是,它也能被用來執(zhí)行插入,更新或者刪除操作。這以使用 ADO.NET 命令和參數(shù)集合來完成。

更新對(duì)于 ASP.NET 應(yīng)用程序內(nèi)的 Access 數(shù)據(jù)庫(kù)來說是有問題的,這是因?yàn)?Access 數(shù)據(jù)庫(kù)是一個(gè)純文本并且默認(rèn)的 ASP.NET 應(yīng)用程序賬戶可能有寫數(shù)據(jù)庫(kù)文件的權(quán)限。

上一篇:文件上傳下一篇:客戶端