ASP.NET - 数据源

数据源控件与数据绑定控件交互并隐藏复杂的数据绑定过程。 这些工具向数据绑定控件提供数据并支持执行插入、删除、排序和更新等操作。

每个数据源控件都包装特定的数据提供程序 - 关系数据库、XML 文档或自定义类,并有助于:

  • 管理连接
  • 选择数据
  • 管理分页、缓存等演示方面的事务。
  • 操纵数据

ASP.NET 中有许多数据源控件可用于从 SQL Server、ODBC 或 OLE DB 服务器、XML 文件以及业务对象访问数据。

根据数据类型,这些控件可以分为两类:

  • 分层数据源控件
  • 基于表格的数据源控件

用于分层数据的数据源控件是:

  • XMLDataSource - 它允许绑定到带有或不带有架构信息的 XML 文件和字符串。

  • SiteMapDataSource - 它允许绑定到提供站点地图信息的提供程序。

用于表格数据的数据源控件是:

数据源控件 描述
SqlDataSource 它表示与返回 SQL 数据的 ADO.NET 数据提供程序的连接,包括可通过 OLEDB 和 ODBC 访问的数据源。
ObjectDataSource 它允许绑定到返回数据的自定义.Net 业务对象。
LinqdataSource 它允许绑定到 Linq-to-SQL 查询的结果(仅 ASP.NET 3.5 支持)。
AccessDataSource 它表示与 Microsoft Access 数据库的连接。

数据源视图

数据源视图是 DataSourceView 类的对象。 它代表了不同数据操作(例如排序、过滤等)的自定义数据视图。

DataSourceView类作为所有数据源视图类的基类,它定义了数据源控件的功能。

下表提供了 DataSourceView 类的属性:

属性 描述
CanDelete 表示底层数据源是否允许删除。
CanInsert 指示底层数据源是否允许插入。
CanPage 指示基础数据源是否允许分页。
CanRetrieveTotalRowCount 指示总行数信息是否可用。
CanSort 表示数据是否可以排序。
CanUpdate 指示是否允许对基础数据源进行更新。
Events 获取数据源视图的事件处理程序委托列表。
Name 视图的名称。

下表提供了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 类是要与对象数据源一起使用的类。 该类具有三个属性:StudentID、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, "M. H. Kabir", "Calcutta" });
      dt.Rows.Add(new object[] { 2, "Ayan J. Sarkar", "Calcutta" });
      ds.Tables.Add(dt);
      
      return ds;
   }
}

执行以下步骤将对象与对象数据源绑定并检索数据:

  • 创建一个新网站。

  • 通过右键单击"解决方案资源管理器"中的项目、添加类模板并将上述代码放入其中,向其中添加一个类 (Students.cs)。

  • 构建解决方案,以便应用程序可以使用对该类的引用。

  • 将对象数据源控件放置在 Web 表单中。

  • 通过选择对象来配置数据源。

选择对象
  • 为不同的数据操作选择数据方法。 在本例中,只有一种方法。

选择数据方法
  • 在页面上放置数据绑定控件(例如网格视图),并选择对象数据源作为其底层数据源。

数据绑定控件
  • 在此阶段,设计视图应如下所示:

对象数据源
  • 运行项目,它从 students 类中检索硬编码元组。

对象数据结果

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 应用程序的默认帐户可能没有写入数据库文件的权限。