ASP.NET 2.0 中的数据绑定
传统的应用程序需要编写代码来绑定数据。例如,要在传统的 ASP 中填充下拉列表,或对页面中的值进行硬编码(如下所示),或编写代码来连接数据库,检索数据,再填充下拉列表。如果手动填充下拉列表,则每次更新数据时,必须更改代码(手动)。
<select size="1" name="dropdown_menu">
<option value="1" >test_data1</option>
<option value="2">test_data2</option>
<option value="3">test_data3</option>
<option value="4">test_data4</option>
</select>
如果通过访问数据库表的方式填充列表,则不仅需要编写代码来检索信息,而且每次加载页面时,应用程序都需要访问数据库,或在应用程序级或会话级缓存信息。
另一方面,ASP.NET 1.1 允许将控件绑定到数据库表和 XML 文档。但是,在 ASP.NET 1.1 中,如果要绑定到一个 XML 数据源,需要将 XML 转换为 DataSet(本文前面作过概述)。一旦获得转换后的 DataSet,只要将 DataSet 绑定到控件上即可。
//C# code
listbox.DataSource= dataset.Tables[0];
listbox.DataTextField = "Name";
listbox.DataValueField = "ID";
listbox.DataBind()
//VB Code
listbox.DataSource= dataset.Tables(0)
listbox.DataTextField = "Name"
listbox.DataValueField = "ID"
listbox.DataBind()
但是,每此更新 XML 数据源,必须重新将控件绑定到一个新的 DataSet,这是因为 DataSet 不能动态地连接到源文件。
在ASP.NET 2.0中绑定控件
ASP.NET 2.0 允许将下拉列表绑定到 XML 数据源或数据库,而无需编写任何代码。如果更新基础数据,它能够确保缓存值自动刷新。
要绑定控件,首先需要创建一个数据源。可以手动编写数据源定义代码,或使用 Configure Data Source Wizard。

图 4a.配置 ObjectDataSource 向导

图 4b.配置 XMLDataSource 向导
XMLDataSource 配置向导在 Web.config 文件中生成了下面的代码。
<ASP:XMLdatasource id="XMLDataSource1" datafile="msdn.XML" xpath="rss/channel/item" runat="server" />
一旦建立了数据源,就能够将数据绑定到控件。下列代码显示如何将 XML 数据源绑定到下拉列表控件。
<ASP:dropdownlist id="DropDownList1" runat="server" datatextfield="state" datasourceid="XMLDataSource1" autopostback="true" />
请注意,ASP.NET 1.x 和 ASP.NET 2.0 中数据绑定的主要区别在于提供程序模型是否自动同步发生了更改的数据。换句话说,由于在数据源中置入了一个事件模型,如果修改支持数据源的数据,则自动更新绑定控件。
数据绑定控件
ASP.NET 2.0 引入了几个用于显示数据的新控件。这些新控件提供了一些比 ASP.NET 1.1 的 DataGrid 控件更优越的增强功能。
GridView 控件
ASP.NET 1.1 的 DataGrid 控件功能强大,使用灵活,允许显示结构化数据,无需编写大量代码。但是,如果要操作 DataGrid 的内容(例如,编辑或对返回行进行排序),需要编写适量的代码,自定义控件并提供这些行为。
GridView 与 DataGrid 控件相似;但是,您也能够通过向导一步步声明性地配置控件,启用像编辑和显示多页行数据这样的通用任务。
配置 GridView
为了说明实现上述功能多么轻松,请思考这个例子:根据下拉列表的选择项显示查询结果。只需将 GridView 控件拖放到页面上,配置控件以根据下拉列表的选择项自动显示结果。

图 5. 将 GridView 绑定到 DropDown 列表
要配置 GridView 控件,您必须通过 Configure Data Source Wizard 将它绑定到数据源。图 6 还显示 DataGrid 对象提供的 Enable Paging、Enable Sorting 和 Enable Selection 选项。
在 Configure Data Source 窗口中,选择适当的表格,然后选择所需的元素。窗口底部显示自动生成的 SQL 查询语句。

图 6. 编辑 SQL 数据源
下一步,单击 WHERE 按钮,配置 GridView 中显示的记录的条件;在下面的窗口中选择 patientID 列,设置操作符和源选项。当源选项设置为 Control 时,当前页面中的所有控件将自动填充到 Parameter 属性的 Control ID 字段中。从列表中选择想要连接的控件。配置好参数和默认值(如果需要)后,单击 Add 按钮,再单击 OK 按钮进行确认。

图 7. 查询编辑器对话框
生成的 select 语句可通过 Configure DataSource 窗口查看。
在 ASP 和 ASP.NET 应用程序中,必须编写代码完成所有这些过程,还要编写 HTML 代码来显示格式化的结果。新的 GridView 控件生成了以下结果,没有附加任何代码(请注意,Edit 和 Delete 链接是自动可见的,并注意生成的 SQL):

DetailsView 控件
DetailsView 控件与 GridView 控件相似,它使用完全相同的安装机制。GridView 控件在一页显示多条记录,而 DetailsView 控件一次只显示一条记录。

图 9. 在 DetailsView 控件中显示一条记录
因此,DetailsView 控件与 GridView 控件形成了很好的互补。将 DetailsView 连接到 GridView 可以更好地控制更新个别项目或插入新项目的方式和时机。
FormView 控件
使用上述配置步骤,我们还能够为 ASP.NET 的开发配置另一个新控件 — FormView 控件。FormView 控件支持非常灵活的 UI 布局。下面的示例显示使用 FormView 控件查看单个数据库记录。

图 10. FormView ItemTemplate 输出
像 ItemTemplate 和 EditItemTemplate 这样不同的模板用于查看和修改数据库记录,无需任何自定义代码。

图 11. FormView EditTemplate 输出
新增的 ASP.NET 2.0 数据功能
除了前面章节介绍的新控件,ASP.NET 2.0 还提供几个与数据访问有关的新功能,这些功能有助于提高数据驱动应用程序的性能和安全性。
性能
Web 应用程序的性能通常可以通过两种机制来改进。首先,Web 应用程序层能够缓存尽可能多的数据,减少了不必要的数据层调用。其次,Web 应用程序可以减少调用数据层的次数和大小。
数据源缓存
SQLDataSource 和 ObjectDataSource 支持数据层缓存。通过设置数据源对象的一些属性,程序员不用开发任何自定义代码,即可使用缓存 api。数据源对象将自动管理底层存储机制的一致性。
SQL 缓存依赖关系
对大多数数据驱动的 Web 站点来说,缓存数据是复杂的任务。Web 站点需要使用缓存来提高性能,但是更新数据的需求也很迫切。ASP.NET 1.x 能将页面缓存一段时间,并通过输入参数(QUERYSTRING 或 POST 参数)进行组织。
<%@ outputcache duration="3600" varybyparam="ProdID" %>
以上代码根据变量 ProdID (产品 id)在内存中缓存页面一小时。
如果在应用程序的其他地方更新了下层数据,缓存数据将出现问题。例如,考虑将一个产品目录页面通过产品 ID 进行缓存。如果从一个管理站点更新产品信息(例如,可用数量或价格),过期数据仍保留在缓存中,并显示给客户。在 ASP.NET 1.x 中,必须等待缓存失效,或使用 Response.RemoveOutputCacheItem 强制缓存失效。
ASP.NET 2.0 通过实现表格级 SQL 通知来支持数据库缓存依赖关系。更改数据时,一个表格级依赖关系通知页面。下面的代码将产品页面缓存了一小时,但是向数据库表添加了一个依赖关系。
<%@ outputcache duration="3600" varybyparam="ProdID" sqldependency="MyDatabase:Products" %>
向 Products 表格添加新的 SQLDependency 属性后,不论表格发生任何更改,缓存过的页面都将失效。SQLDependency 属性必须引用在 web.config 文件中配置的 Microsoft SQL Server DataSource。DataSource 标识了使依赖关系通知有效的数据库连接和参数。
自定义 SQL 依赖关系
虽然默认情况下 SQLDependency 类只支持 Microsoft SQL Server,但是您能够通过 machine.config 和 web.config 文件替代和重新配置类。这个功能允许您创建自定义的 SQLDependency 类,为任何 DataSource(包括 Oracle、Sybase 或其他任何数据库)提供相似的功能。
数据源缓存
在 ASP.NET 2.0 中,缓存数据的另一个方法是使用直接置入数据源的缓存机制。例如,SQLDataSource 和 ObjectDataSource 类都支持通过 EnableCaching 属性直接缓存。只需将该属性设置为 true,数据源将自动缓存从数据存储提取的数据。缓存将根据 CacheDuration 属性设定的时间或通过类似于页面级指令的 SQLCacheDependency 失效。由于在数据源控件中置入了这些功能,无需编写任何代码,您就能快速、轻松地实现缓存。
改进的 DataSet 远程处理支持
对 ASP.NET 1.1 最多的抱怨是:由于通常要将 DataSet 序列化为 XML,因此通过 .NET 远程处理发送 DataSet 比发送其他序列化二进制表示形式慢。ASP.NET 2.0 将 DataSet 作为二进制序列化表示形式进行传输,以帮助减少 DataSet 的传输大小和传递信息所需的传输时间。
安全性
ASP.NET 2.0 提供的一项服务能够加密配置文件的任何部分。通过加密,您能够更安全地存储应用程序内的信息。例如,可以加密 Web.config 文件的 ConnectionString 部分来保护所有的敏感信息。配置加密允许您安全地存储像连接字符串这样的信息。
加密配置信息时,您可以使用政府标准加密算法,例如三重 DES。因为加密数据存储在配置文件中,所以应用程序不依赖于注册表。
小结
ASP.NET 2.0 致力于帮助您灵活地控制数据,通过在新增的数据控件中封装功能,减少访问数据和显示数据所需的代码数量。新的数据访问模型和控件减少的数据访问代码多达 70%。现在,传统的 ASP 或 ASP.NET 1.1 应用程序中需要手动设计的许多功能都已内置到新的数据控件中了。数据访问的新体系结构也是可扩展的,是为访问多种不同的数据源数据而设计的,这些数据源包括数据库、XML 文件、平面文件、数据流等等。作为一名企业级开发人员,您能够利用新的体系结构连接任何后端数据源,而仍然使用一个简单的前端接口

