数据源控件与数据绑定控件交互并隐藏复杂的数据绑定过程。这些工具为数据绑定控件提供数据,并支持插入,删除,排序和更新等操作的执行。
每个数据源控件包装一个特定的数据提供程序 - 关系数据库,XML文档或自定义类,并帮助我们:
- 管理连接
- 选择数据
- 管理分页,缓存等表示方面
- 操纵数据
在ASP.NET中有许多数据源控件可用于从SQL Server,ODBC或OLE DB服务器,XML文件和业务对象访问数据。
根据数据的类型,这些控件可以分为两大类:
- 分层数据源控件
- 基于表的数据源控件
用于分层数据的数据源控件是:
- XMLDataSource - 它允许绑定到具有或不具有模式信息的XML文件和字符串。
- SiteMapDataSource - 它允许绑定到提供站点地图信息的提供者。
用于表格数据的数据源控件是:
编号 | 数据源控件 | 描述 |
---|---|---|
1 | SqlDataSource |
它表示与返回SQL数据的ADO.NET数据提供者的连接,包括可通过OLEDB 和ODBC 访问的数据源。 |
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)访问的数据。连接数据是通过两个重要的属性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
控件的相关属性集,它提供了控件的编程接口:
编号 | 属性集/组 | |
---|---|---|
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应用程序的默认帐户可能没有写入数据库文件的权限。