数据源控件包括那些所有实现 IDataSource 接口的控件。.NET Framework 包含以下数据源控件:
SqlDataSource:连接到任意 ADO.NET 数据提供程序的数据源。
ObjectDataSource:连接到自定义的数据访问类。(这是大型专业 Web 应用程序倾向使用的数据源控件)
AccessDataSource:连接到 Access 数据库文件。用于小型网站,更好的小范围数据解决方案是使用免费的 SQL Server Express。
XmlDataSource:连接到 XML 文件。
SiteMapDataSource:连接到描述站点导航信息的 web.sitemap 文件。
数据绑定页面的生命周期
数据绑定页面可以完成两类任务:
从数据源中读取数据并为关联的控件提供数据
在关联的控件编辑数据后,它们可以更新数据源
理解页面的声明周期是非常重要的,本质上,数据绑定任务按下列顺序发生:
页面对象被创建(基于 .aspx 文件)
页面生命周期开始,Page.Init 和 Page.Load 事件发生
产生其他所有控件事件
数据源控件执行所有更新。某行被更新触发 Updating 和 Updated 事件。新增某行触发 Inserting 和 Inserted 事件。删除某行触发 Deleting 和 Deleted 事件。
Page.PreRender 事件发生
数据源控件执行所有查询并将获得的数据插入到关联的控件,此时触发 Selecting 和 Selected 事件。
页面被呈现和释放
SqlDataSource
SqlDataSource 代表一个使用 ADO.NET 提供程序的数据库连接,它需要一个通用的方法创建它所需要的 Connection、Command、DataReader 对象。使其唯一可行的办法是有一个数据提供程序工厂来负责创建这些对象。
.NET 和以下 4 个提供程序工厂一起发行:
System.Data.SqlClient
System.Data.OracleClient
System.Data.OleDb
System.Data.Odbc
这些工厂已经在 machine.config 文件中注册,所以可用它们中的任何一个配合SqlDataSource 一起使用,通过设置提供程序的名字来选择数据源:
下一步是提供连接字符串(不需要硬编码),应从 web.config 中读取(使用表达式构造器的方式):
ID="SqlDataSource1" runat="server">
SqlDataSource 命令逻辑由 4 个属性提供:SelectCommand、InsertCommand、UpdateCommand、DeleteCommand,它们都接收一个字符串(SQL 语句或存储过程名称);与之相应的 SelectCommandType、InsertCommandType、UpdateCommandType、DeleteCommandType 也要设置为 Text 或 StoredProcedure (Text 是默认值)。
下面是一个完整的 SqlDataSource ,它定义了从 Employees 表中读取记录的 SELECT 命令:
ProviderName="System.Data.SqlClient"
ConnectionString=""
SelectCommand="select EmployeeID,FirstName,LastName,Title,City from Employees">
创建完数据源后,我们可以在设计时绑定控件,而不必在 Page.Load 事件中编写逻辑了,看图:
智能标签的刷新架构可以促使数据源控件连接数据库并读取查询的信息。
创建一些控件并进行数据绑定,看下效果:
数据绑定探源
我们知道可以用 DataReader 或 DataView 来绑定,那么 SqlDataSource 使用的是哪一种呢?其实这决定于 DataSourceMode 的设置。