Asp.net 简明教程

ASP.NET - Data Sources

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

每个数据源控件都封装了一个特定的数据提供程序——关系数据库、XML 文档或自定义类,并帮助进行以下操作:

  1. Managing connection

  2. Selecting data

  3. 管理分页、缓存等展示方面。

  4. Manipulating data

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

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

  1. Hierarchical data source controls

  2. Table-based data source controls

用于分级数据的数据源控件:

  1. XMLDataSource - 它允许绑定到 XML 文件和有或没有架构信息的字符串。

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

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

Data source controls

Description

SqlDataSource

它表示与 ADO.NET 数据提供程序的连接,该提供程序返回 SQL 数据,包括可通过 OLEDB 和 ODBC 访问的数据源。

ObjectDataSource

它允许绑定到返回数据的自定义 .Net 业务对象。

LinqdataSource

它允许绑定到 Linq-to-SQL 查询(仅受 ASP.NET 3.5 支持)的结果。

AccessDataSource

它表示与 Microsoft Access 数据库的连接。

Data Source Views

数据源视图是 DataSourceView 类的对象。它表示针对不同数据操作(如排序、筛选等)对数据进行自定义的视图。

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

下表提供了 DataSourceView 类的属性:

Properties

Description

CanDelete

指示是否允许在底层数据源上进行删除。

CanInsert

指示是否允许在底层数据源上进行插入。

CanPage

指示是否允许在底层数据源上进行分页。

CanRetrieveTotalRowCount

指示是否提供总行数信息。

CanSort

指示数据是否可以排序。

CanUpdate

指示是否允许在底层数据源上进行更新。

Events

获取数据源视图的事件处理程序委托列表。

Name

Name of the view.

下表提供了 DataSourceView 类的作用:

Methods

Description

CanExecute

确定是否可以执行指定命令。

ExecuteCommand

Executes the specific command.

ExecuteDelete

对 DataSourceView 对象表示的数据列表执行删除操作。

ExecuteInsert

对 DataSourceView 对象表示的数据列表执行插入操作。

ExecuteSelect

从底层数据存储中获取数据列表。

ExecuteUpdate

对 DataSourceView 对象表示的数据列表执行更新操作。

Delete

对与视图关联的数据执行删除操作。

Insert

对与视图关联的数据执行插入操作。

Select

Returns the queried data.

Update

对与视图关联的数据执行更新操作。

OnDataSourceViewChanged

Raises the DataSourceViewChanged event.

RaiseUnsupportedCapabilitiesError

通过 RaiseUnsupportedCapabilitiesError 方法调用以比较为 ExecuteSelect 操作请求的功能和视图所支持的功能。

The SqlDataSource Control

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 控件的相关属性集,它提供了控件的编程接口:

Property Group

Description

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>

The ObjectDataSource Control

ObjectDataSource 控件使用户定义的类能够将自身方法的输出与数据绑定控件关联。此类的编程接口几乎与 SqlDataSource 控件相同。

以下是有约束业务对象绑定的两个重要方面:

  1. 可绑定的类应具有默认构造函数,应无状态,并应具有可映射到选择、更新、插入和删除语义的方法。

  2. 该对象必须一次更新一个项目,不支持批量操作。

让我们直接进入一个示例,使用该控件。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;
   }
}

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

  1. 创建一个新网站。

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

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

  4. 在 Web 窗体中放置一个对象数据源控件。

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

selecting the object
  1. 为数据上的不同操作选择一个数据方法。在此示例中,只有一种方法。

select data method
  1. 在页面上放置一个数据绑定控件(如网格视图),并将其底层数据源选择为对象数据源。

data bound control
  1. 在此阶段,设计视图应如下所示:

object data source
  1. 运行项目,它从 students 类中检索硬编码元组。

object data result

The AccessDataSource Control

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