技术开发 频道

通过 ASP.NET 2.0 的数据增强功能来提高负载和减少代码


【IT168技术文档】
  [导读]在ASP.NET 2.0中引入了数据源组件,相对于1.x版本,在开发效率和运行效率上都得到了极大的提升,而本文将详细介绍新的数据控件,包括编程接口、用法和实现。

  绝大多数Web应用程序都会使用某种类型的数据,而ASP.NET最常见的用途之一就是将该数据绑定到用户界面元素。ASP.NET 1.x提供了针对性能进行优化的极为灵活且通用的数据绑定,并且可让开发人员完全控制页面生命周期。可以将实现IEnumerable接口的任何数据集合(如DataView)或支持IListSource接口成员的任何对象(如DataSet和DataTable)方便而快速地与服务器控件相关联,并且可以使用它们来填充页面。

  只要您实现了简单的只读函数,这种灵活的方法就可以很好地工作。比较复杂的只读函数(如分页、筛选和排序)要求更多一些的关注。例如,要对数据绑定控件进行排序,您就需要了解有关该页面的体系结构和行为的大量信息(包括视图状态管理和回发事件)。要启用数据编辑,需要比较深入地了解ASP.NET基础结构。

  页面开发人员必须不断地重新实现同一模式:定位输入控件和检索新数据,准备对SQL命令或存储过程的参数化调用,执行语句,最后刷新用户界面。在许多情况下,这些代码是一成不变的,但正是由于这个原因,编写这些代码可能比编写任何其他代码都更加恼人。

  通过ASP.NET 1.x数据绑定模型,可以绑定到任何可枚举的数据源,从而使您可以专心地负责任何其他操作,如插入、更新和排序。ASP.NET 2.0中的数据绑定模型为数据绑定控件定义了第二种输入格式。除了所有实现IEnumerable接口的对象以外,ASP.NET 2.0数据绑定控件还接受数据源控件——这是该版本中刚刚引入的全新组件系列。

  在本文中,我将引导您浏览ASP.NET 2.0中的主要数据源控件,并讨论它们的编程接口、用法和实现。
数据源组件一览

  从根本上说,数据源控件就是包装了特定数据源(如SQL Server、Microsoft Access或XML文档)的一些基本函数的服务器控件。这些基本函数包括查询、插入、更新和删除。数据源控件不具有UI并且不呈现任何标记(请注意,有许多控件都不具有UI,然而却呈现标记)。可以用声明方式或编程方式将其绑定到数据控件。通过数据源组件的服务,数据绑定控件除了可以从特定数据源获取数据以外,还可以插入新记录或者更新和删除现有记录。控件的接口总是相同的,无论您使用哪种特定的数据源(即,无论是SQL Server数据库、XML文档、Microsoft Excel工作表还是站点图描述)。

  数据源对象是自描述性的,并且能够让绑定控件了解基础数据源中受支持的功能。这样,控件就可以方便地基于它所连接的数据源的功能来调整它自己的用户界面。例如,网格组件可以仅在基础数据源可编辑时才显示Edit列。
数据源控件是ASP.NET 2.0数据绑定模型中迄今为止最为重要的更改。在ASP.NET 2.0中,数据源控件是推荐的用于执行数据绑定的工具。需要注意的是,数据源控件与公开IEnumerable接口的对象一起工作。在数据驱动的应用程序中,数据源控件绝不会取代DataView和数组。而且,可以保证向后兼容性。使用数据源控件,您现在就具有了一种将数据绑定到任何新增和现有数据绑定控件的备用方法。数据源控件不会带来任何性能问题,性能基本与版本1.x中的相同甚至略高一筹。

  ASP.NET 2.0向所有数据绑定控件中添加了一个新属性,以便每个控件都可以成功地绑定到数据源控件。应该将这一新属性—DataSourceId—设置为在同一页面中定义的数据源控件的名称。下面的代码片段显示了如何用针对SQL Server数据库执行的查询结果来填充DataGrid控件:
<asp:SqlDataSource runat="server" ID="MySource" ConnectionString="...;" DataSourceMode="DataSet" SelectCommand="..." /> <asp:DataGrid runat="server" ID="data" DataSourceId="MySource" />
  SqlDataSource是公开SQL关系数据库内容的数据源控件。(需要注意的是,SqlDataSource不是特定于SQL Server的,但有关该问题的详细信息留待稍后讨论。)ConnectionString属性标识源数据库,而SelectCommand属性被设置为查询字符串。正如前面所提到的,您可以使用传统的DataSource属性或新的DataSourceId属性将数据传递给数据绑定控件。请注意,这两个属性是互斥的。如果您同时设置这两个属性,将会引发异常。

  通过使用数据源控件而不是传统的可枚举对象,您会得到什么呢?首先,您可以在.aspx页中使用一个简单的标记来声明数据源。这样可以实现数据源对象的自动实例化,并减少为完整设置该页面而需要编写的代码数量。您不再需要显式地操纵如SqlConnection和SqlCommand这样的对象。数据源减少了对服务器数据组件(连接、适配器、类型化数据集)的依赖性,这是因为这些组件极度依赖于Visual Studio .NET的代码生成功能。在Visual Studio 2005中,被隔离在don't-change-this-code(不要更改以下代码)区域中的自动生成的代码数量明显减少。这并不意味着要丢弃设计时功能,而是刚好相反。数据源控件促成了控件和数据组件之间的直接和隐式绑定。通过这一体系结构,可以开发智能设计器,以便动态发现架构和数据,从而更为准确地表示数据绑定控件的运行时外观。

  至少对于常见方案(如选择、排序、分页、删除和基本更新)而言,您可以通过简单地连接和配置一对控件来设置数据绑定。图2显示了Visual Studio 2005工具箱的Data选项卡。它包含了一些数据源控件和数据绑定控件—您在许多情况下需要涉及的唯一工具。如果是这种情况,您的页面几乎不需要任何数据绑定代码。尽管如此,由于页面需要更为复杂的数据绑定功能,因此需要您添加少量代码。

  通过数据源控件,可以在多种数据源中实现一致的绑定模型。(图2中的控件只是将在ASP.NET 2.0发布时可用的控件的子集。)作为页面开发人员,您将使用相同的属性,而无论数据源是关系表(无论是哪种数据库系统)、XML文档、自定义类还是Excel文件。

  您通过使用数据源控件而得到的另一项优势与数据缓存有关。许多关于ASP.NET编码策略和优化的书籍和文章都将缓存数据列为构建高性能、可伸缩Web应用程序的非常好的做法。毫无疑问,数据缓存意味着关键的性能增强,即使它不是对所有页面和应用程序都有效的魔杖。例如,当您管理大量特定于会话的不稳定数据时,或者当您的要求规定必须始终显示新数据时,广泛使用缓存可能不是非常好的的方法。请放心,在大多数情况下,缓存数据都是一种改进应用程序的方法。

  数据源控件也集成了缓存功能,并且打开和关闭默认缓存功能与设置Boolean属性一样容易。缓存对于数据绑定控件而言是透明的,并且数据源控件会管理它的某些方面,如生成缓存密钥和过期策略(时间和密钥依赖时间戳)。其他设置由页面开发人员来决定,包括数据在缓存中的生存期。请注意,数据源控件可为每个独特的连接字符串、选择查询、参数和缓存设置组合维护单独的缓存。
0
相关文章