ASP.NET資料源


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

每個資料源控制元件包裝一個特定的資料提供程式 - 關聯式資料庫,XML文件或自定義類,並幫助我們:

  • 管理連線
  • 選擇資料
  • 管理分頁,快取等表示方面
  • 操縱資料

在ASP.NET中有許多資料源控制元件可用於從SQL Server,ODBC或OLE DB伺服器,XML檔案和業務物件存取資料。

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

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

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

  • XMLDataSource - 它允許系結到具有或不具有模式資訊的XML檔案和字串。
  • SiteMapDataSource - 它允許系結到提供站點地圖資訊的提供者。

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

編號 資料源控制元件 描述
1 SqlDataSource 它表示與返回SQL資料的ADO.NET資料提供者的連線,包括可通過OLEDBODBC存取的資料源。
2 ObjectDataSource 它允許系結到返回資料的自定義.Net業務物件。
3 LinqdataSource 它允許系結到Linq-to-SQL查詢的結果(僅由ASP.NET 3.5支援)。
4 AccessDataSource 它表示與Microsoft Access 資料庫的連線。

資料源檢視

資料源檢視是DataSourceView類的物件。它代表不同資料操作(如排序,過濾等)的資料客製化檢視。

DataSourceView類用作所有資料源檢視類的基礎類別,這些類定義了資料源控制元件的功能。

下表提供了DataSourceView類的屬性:

編號 屬性 描述
1 CanDelete 指示是否允許在基礎資料源上進行刪除。
2 CanInsert 指示是否允許在基礎資料源上插入。
3 CanPage 指示是否允許在基礎資料源上進行分頁。
4 CanRetrieveTotalRowCount 指示總行數資訊是否可用。
5 CanSort 指示是否可以對資料進行排序。
6 CanUpdate 指示是否允許在基礎資料源上進行更新。
7 Events 獲取資料源檢視的事件處理程式委託的列表。
8 Name 檢視的名稱。

下表提供了DataSourceView類的方法:

編號 方法 描述
1 CanExecute 確定是否可以執行指定的命令。
2 ExecuteCommand 執行特定的命令。
3 ExecuteDelete DataSourceView物件所表示的資料列表執行刪除操作。
4 ExecuteInsert DataSourceView物件表示的資料列表執行插入操作。
5 ExecuteSelect 獲取底層資料儲存的資料列表。
6 ExecuteUpdate DataSourceView物件表示的資料列表執行更新操作。
7 Delete 對與檢視關聯的資料執行刪除操作。
8 Insert 對與檢視關聯的資料執行插入操作。
9 Select 返回查詢的資料。
10 Update 對與檢視關聯的資料執行更新操作。
11 OnDataSourceViewChanged 引發DataSourceViewChanged事件。
12 RaiseUnsupportedCapabilitiesError RaiseUnsupportedCapabilitiesError方法呼叫,以將ExecuteSelect操作請求的功能與檢視支援的功能進行比較。

SqlDataSource控制元件

SqlDataSource控制元件表示與關聯式資料庫(如SQL Server或Oracle資料庫)的連線,或可通過OLEDB或開放式資料庫連線(ODBC)存取的資料。連線資料是通過兩個重要的屬性ConnectionStringProviderName來完成的。

以下程式碼片段提供了該控制元件的基本語法:

<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控制元件的相關屬性集,它提供了控制元件的程式設計介面:

編號 屬性集/組
1 DeleteCommand,DeleteParameters,DeleteCommandType 獲取或設定用於刪除基礎資料中的行的SQL語句,引數和型別。
2 FilterExpression,FilterParameters 獲取或設定資料過濾字串和引數。
3 InsertCommand,InsertParameters,InsertCommandType 獲取或設定用於在基礎資料庫中插入行的SQL語句,引數和型別。
4 SelectCommand,SelectParameters,SelectCommandType 獲取或設定從底層資料庫檢索行的SQL語句,引數和型別。
5 SortParameterName 獲取或設定命令的儲存過程將用於排序資料的輸入引數的名稱。
5 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 [email protected]"
   DeleteCommand= "DELETE FROM EMPLOYEES WHERE [email protected]"
   FilterExpression= "EMPLOYEEID > 10">
   .....
   .....
</asp:SqlDataSource>

ObjectDataSource控制元件

ObjectDataSource控制元件允許使用者定義的類將其方法的輸出關聯到資料系結控制元件。該類的程式設計介面與SqlDataSource控制元件幾乎相同。

以下是系結業務物件的兩個重要方面:

  • 可繫結的類應該有一個預設的建構函式,它應該是無狀態的,並且可以對映選擇,更新,插入和刪除語意的方法。
  • 物件一次只能更新一個專案,批次處理操作不支援。

讓我們直接看一個例子來處理這個控制元件。 Student類是與物件資料源一起使用的類。 這個類有三個屬性:學生ID,姓名和城市。 它有一個預設的建構函式和一個GetStudents方法來檢索資料。

Student類程式碼如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;

/// <summary>
/// Student 的摘要說明
/// </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("學生編號", 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;
    }
}

執行以下步驟將物件與物件資料源系結並檢索資料:

  • 建立一個新的網站,名稱為:DataSourceDemo。如下圖 -
  • 通過右鍵單擊解決方案資源管理器中的專案名稱,新增一個類(名稱為:Students.cs),並將上面的程式碼放入其中。
  • 構建解決方案,以便應用程式可以使用該類的參照。
  • ObjectDataSource控制元件放置在Web表單中。如下圖所示 -
  • 通過點選上圖中的 【組態資料源…】 連結來選擇物件來組態資料源。參考下圖 -
  • 為資料的不同操作選擇一種資料方法。在這個例子中,只有一個方法。如下圖所示 -
  • 在表單頁面上放置資料系結控制元件(如:GridView),並選擇物件資料源作為其基礎資料源。
  • 經過上面步驟後,設計檢視應該如下所示:

檔案 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>資料源範例</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>

執行該專案,它從Student類中檢索寫死的元組,並顯示其中的資料如下 -

AccessDataSource控制元件

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

<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應用程式的預設帳戶可能沒有寫入資料庫檔案的許可權。