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 LASTNAME=@lame"
   DeleteCommand= "DELETE FROM EMPLOYEES WHERE EMPLOYEEID=@eid"
   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应用程序的默认帐户可能没有写入数据库文件的权限。


上一篇: ASP.NET Ajax控件 下一篇: ASP.NET数据绑定