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

广告