ASP.NET - 資料來源



資料來源控制元件與資料繫結控制元件互動,並隱藏複雜的資料繫結過程。這些工具為資料繫結控制元件提供資料,並支援執行插入、刪除、排序和更新等操作。

每個資料來源控制元件都封裝了一個特定的資料提供程式——關係資料庫、XML文件或自定義類,並有助於:

  • 管理連線
  • 選擇資料
  • 管理分頁、快取等呈現方面。
  • 操作資料

ASP.NET 中提供了許多資料來源控制元件,用於從 SQL Server、ODBC 或 OLE DB 伺服器、XML 檔案和業務物件訪問資料。

根據資料型別,這些控制元件可以分為兩類:

  • 分層資料來源控制元件
  • 基於表的 資料來源控制元件

用於分層資料的 資料來源控制元件:

  • XMLDataSource - 它允許繫結到 XML 檔案和字串,無論是否有架構資訊。

  • SiteMapDataSource - 它允許繫結到提供站點地圖資訊的提供程式。

用於表格資料的 資料來源控制元件:

資料來源控制元件 描述
SqlDataSource 它表示與 ADO.NET 資料提供程式的連線,該提供程式返回 SQL 資料,包括可透過 OLEDB 和 ODBC 訪問的資料來源。
ObjectDataSource 它允許繫結到返回資料的自定義 .Net 業務物件。
LinqDataSource 它允許繫結到 Linq-to-SQL 查詢的結果(僅 ASP.NET 3.5 支援)。
AccessDataSource 它表示與 Microsoft Access 資料庫的連線。

資料來源檢視

資料來源檢視是 DataSourceView 類的物件。它表示資料的自定義檢視,用於不同的資料操作,如排序、過濾等。

DataSourceView 類作為所有資料來源檢視類的基類,定義了資料來源控制元件的功能。

下表提供了 DataSourceView 類的屬性:

屬性 描述
CanDelete 指示是否允許在底層資料來源上進行刪除。
CanInsert 指示是否允許在底層資料來源上進行插入。
CanPage 指示是否允許在底層資料來源上進行分頁。
CanRetrieveTotalRowCount 指示總行數資訊是否可用。
CanSort 指示資料是否可以排序。
CanUpdate 指示是否允許在底層資料來源上進行更新。
事件 獲取資料來源檢視的事件處理程式委託列表。
名稱 檢視的名稱。

下表提供了 DataSourceView 類的 方法:

方法 描述
CanExecute 確定是否可以執行指定的命令。
ExecuteCommand 執行特定命令。
ExecuteDelete 對 DataSourceView 物件表示的資料列表執行刪除操作。
ExecuteInsert 對 DataSourceView 物件表示的資料列表執行插入操作。
ExecuteSelect 從底層資料儲存中獲取資料列表。
ExecuteUpdate 對 DataSourceView 物件表示的資料列表執行更新操作。
Delete 對與檢視關聯的資料執行刪除操作。
Insert 對與檢視關聯的資料執行插入操作。
Select 返回查詢到的資料。
Update 對與檢視關聯的資料執行更新操作。
OnDataSourceViewChanged 引發 DataSourceViewChanged 事件。
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 控制元件的相關屬性集,這些屬性集提供了控制元件的程式設計介面:

屬性組 描述

DeleteCommand,

DeleteParameters,

DeleteCommandType

獲取或設定用於刪除底層資料中行的 SQL 語句、引數和型別。

FilterExpression,

FilterParameters

獲取或設定資料過濾字串和引數。

InsertCommand,

InsertParameters,

InsertCommandType

獲取或設定用於在底層資料庫中插入行的 SQL 語句、引數和型別。

SelectCommand,

SelectParameters,

SelectCommandType

獲取或設定用於從底層資料庫檢索行的 SQL 語句、引數和型別。
SortParameterName 獲取或設定命令的儲存過程將用於排序資料的輸入引數的名稱。

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 類

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;
   }
}

請按照以下步驟將物件與物件資料來源繫結並檢索資料:

  • 建立一個新的網站。

  • 透過右鍵單擊解決方案資源管理器中的專案,新增類模板,並將上述程式碼放入其中,向其中新增一個類 (Students.cs)。

  • 構建解決方案,以便應用程式可以使用對該類的引用。

  • 在 Web 窗體中放置一個物件資料來源控制元件。

  • 透過選擇物件來配置資料來源。

selecting the object
  • 為對資料的不同操作選擇資料方法。在此示例中,只有一個方法。

Select a data method
  • 在頁面上放置一個數據繫結控制元件(如 GridView),並選擇物件資料來源作為其底層資料來源。

Data Bound Control
  • 在此階段,設計檢視應如下所示:

Object Data Source
  • 執行專案,它將從 Student 類中檢索硬編碼的元組。

Object Data Result

AccessDataSource 控制元件

AccessDataSource 控制元件表示與 Access 資料庫的連線。它基於 SqlDataSource 控制元件,並提供更簡單的程式設計介面。以下程式碼片段提供了資料來源的基本語法:

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

AccessDataSource 控制元件以只讀模式開啟資料庫。但是,它也可以用於執行插入、更新或刪除操作。這是使用 ADO.NET 命令和引數集合完成的。

對於 Access 資料庫,從 ASP.NET 應用程式中進行更新是有問題的,因為 Access 資料庫是一個普通檔案,ASP.NET 應用程式的預設帳戶可能沒有寫入資料庫檔案的許可權。

廣告