前言

  第一次使用ASP.NET 2.0就被它强大的功能和超高的效率所吸引,原本繁杂的过程被简化到无法置信的容易,而且据微软的所言12月中文版的VS2005正式版将给我们带来更强劲的风暴。对ASP.NET 2.0逐渐深入后,便产生了想把自己学习中发现的问题和体会与大家交流,遂有此文。声明:本文所有演示示例均基于Visual Web Developer 2005 Express Beta2,Visual Web Developer 2005 Express Edition Beta2 是一种简便的、易学易用的开发工具,其重点专注于互联网应用开发。

  1.ASP.NET 2.0数据库开发的新特性:

  与以前的版本相比,ASP.NET 2.0加入了更多的特性,使得开发人员工作效率、管理、扩展性和性能领域均有了大幅度的提高。

  在开发效率上,ASP.NET 2.0使得一个典型的WEB应用程序的代码量基本上减少了70%,甚至在一些简单的程序中无须编写任何代码就可以实现你所要求的功能,既所谓的"0代码"。这是因为ASP.NET 2.0 将常用的 Web 任务封装到应用程序服务和控件中,这些服务和控件可方便地在网站之间重用。利用这些基本生成块,较之以前的版本,现在实现许多应用所需的自定义代码要少得多。

  同时在ASP.NET 2.0 引入了许多新的服务器控件,能够为数据访问、登录安全、向导导航、菜单、树视图、门户等提供功能强大的声明性支持。这些控件中,许多都利用了 ASP.NET 的核心应用程序服务,用于数据访问、成员资格与角色,以及个性化设置等方案。

  2.0 版中的新增功能如下:

  · 数据源控件 -- ASP.NET 2.0 引入了声明性数据源控件,这些控件向页上的数据绑定 UI 控件公开来自后端存储(例如 SQL 数据库、中间层业务对象或 XML 文件)的数据。数据源控件还公开诸如排序、分页、缓存、更新、插入和删除数据等功能,UI 控件能够自动利用这些功能而无需代码。

  · 新的数据绑定控件 -- 除 ASP.NET 1.x 版中的数据绑定控件外,ASP.NET 还包括诸如 GridView、DetailsView、FormView、TreeView 和 Menu 等新的数据绑定 UI 控件,可以自定义这些控件以各种格式显示数据。GridView、DetailsView 和 FormView 控件还能自动利用数据源功能,使得向数据驱动页添加排序、分页和更新操作非常容易。

  · 数据控件参数 -- 数据源能够使用 ASP.NET 2.0 中新的数据控件参数对象从各种来源接受输入参数。使用这些参数对象可以轻松地向参数化数据操作提供服务器控件属性值、会话、应用程序、Cookie 和 querystring 字段以及用户配置文件属性。使用这些参数,只需很少的自定义代码或无需自定义代码就能支持筛选和主/详细信息方案。

  · 改进的数据绑定语法 -- 对于在数据绑定模板中绑定控件的常见方案,ASP.NET 中的 DataBinder.Eval 数据绑定语法已得到简化。还可以在模板中将双向数据绑定与控件属性关联,以允许自动将值传递给数据源更新、插入或删除操作。对于分层的 XML 数据,ASP.NET 2.0 还包含一种基于 Xpath 的数据绑定语法。

  · 使用 SQL Express 的本地文件数据库 -- 为简化开发,ASP.NET 2.0 现在支持在应用程序中连接到作为本地文件的 SQL Express 数据库的能力,从而消除仅为了执行开发工作而向服务器提供数据库的需要。当然,您仍然能够连接到基于服务器的 SQL 数据库。

  下面是一些重要的数据绑定控件和数据源控件的详细的介绍:

  ·GridView:

  这是ASP.NET 2.0中的一个新的数据绑定控件,它是ASP.NET 1.x中的DataGrid控件的后续继承,并且在其基础上做了许多改进。尽管在ASP.NET 1.x中DataGrid控件已经可以满足开发者通过代码来处理一些操作,像排序,分页,编辑及删除数据等。但是GridViwe控件绑定到数据源控件时,它就可以自动进行排序,分页,编辑及删除数据的一系列处理。在功能上GridViwe控件也超越了DataGrid控件,GridViwe控件可以支持多个关键字段,在UI界面上有了强大的用户定制功能,而且它还给开发者提供了一个新的取消和处理事件的模型。

  ·SqlDataSource:

  SqlDataSource控件代表一个通过ADO.NET连接到SQL数据库提供者的数据源控件。就像其他的数据源控件一样,SqlDataSource控件可以被绑定到任何支持DataSourceID属性的数据绑定控件上。同时SqlDataSource拥有自我描述的能力(例如选择,插入,更新,删除,排序等),以至数据绑定控件可以在这些能力被允许的情况下自动的实现选择,插入,更新,删除,排序等过程。SqlDataSource控件可以让你在创建数据库连接和实现查询时取代以前所需的大量ADO.NET代码,这是因为这些数据的查询操作已经直接被指定为该数据源控件的一个属性。因为数据的查询依然存在于页面的代码中,有时候我们也称这是一种双重模型。

  SqlDataSource控件通常主要是针对一些不太需要查询大量数据库小型的和个人站点,当我们进行一个数据流量较大的网站开发,我们就必须使用后面的ObjectDataSource控件,这是一个绑定到中间层对象的针对大型企业开发的数据源控件。

  数据源控件

  数据源控件没有呈现形式,而是表示特定的后端数据存储,例如数据库、业务对象、XML 文件或 XML Web services。数据源控件还支持针对数据的丰富功能(例如排序、分页、筛选、更新、删除和插入),数据绑定 UI 控件能够自动使用这些功能。ASP.NET 2.0 包括以下现成的服务器控件:

名称 说明
SqlDataSource 支持绑定到 ADO.NET 提供程序(例如 Microsoft? SQL Server、OLEDB、ODBC 或 Oracle。)表示的 SQL 数据库。
ObjectDataSource 支持绑定到中间层对象,例如数据访问层或业务组件。
AccessDataSource 支持绑定到 Microsoft? Access (Jet) 数据库。
SiteMapDataSource 支持绑定到 ASP.NET 2.0 站点导航提供程序公开的层次结构。
XmlDataSource 支持绑定到 XML 文件或文档。

  数据绑定控件

  数据绑定控件是将数据作为标记向发出请求的客户端设备或浏览器呈现的 UI 控件。数据绑定控件能够自动绑定到从数据源公开的数据,并在页请求生命周期中的适当时间获取数据。这些控件还可以选择利用数据源功能,例如排序、分页、筛选、更新、删除和插入。数据绑定控件通过其 DataSourceID 属性连接到数据源控件。您可能熟悉 ASP.NET 1.x 版中的一些数据绑定控件,例如 DataGrid、DataList、Repeater 和诸如 DropDownList 这样的列表控件。ASP.NET 2.0 还包含几个新的数据绑定控件,例如:

名称 说明
GridView 以网格格式呈现数据。此控件是 DataGrid 控件的演变形式,并且能够自动利用数据源功能。
DetailsView 在标签/值对的表格中呈现单个数据项,类似于 Microsoft? Access 中的窗体视图。此控件也能自动利用数据源功能。
FormView 在由自定义模板定义的窗体中一次呈现单个数据项。在标签/值对的表格中呈现单个数据项,类似于 Microsoft? Access 中的窗体视图。此控件也能自动利用数据源功能。
TreeView 在可展开的节点的分层树视图中呈现数据。
Menu 在分层动态菜单(包括弹出式菜单)中呈现数据.

  下面我们结合GridView和SqlDataSource两个控件来实现一些最简单的数据操作。我将给出一个详细的例子,并且为大家进行详细的讲解。

  这是一个最简单的仅包含只读报表的数据驱动页面,它显示数据库中的数据,但并不允许我们去更改其中的各个数据项。首先我们必须设置好一个SqlDataSource控件,然后连接到一个数据库绑定控件上,我们在这个示例中是用GridView,指定GridView的DataSourceID属性为上面SqlDataSource。

  SQL Server 2000中Pubs数据库的authors表,其结构如下:


  SqlDataSource控件的ConnectionString属性指定一个数据库连接字符串,SelectCommand属性是指定执行检索的数据库命令。连接字符串可以在页面代码中直接指定,也可以采用一种新的表达式结构在Web.config.中检索数据库连接字符串。

  第一步,在"工具箱"的"数据"项下拖拽一个"GridView"控件到主页面上,放置鼠标到该控件上短暂的停留后,会出现一个小的标签:


  第二步,我们打开下图所示的"选择数据源"的下拉列表:


  第三步:如果你还没有设置任何的SqlDataSource,可以选择"新建数据源"选项。出现如下图的界面后:

  我们选择"数据库"作为我们的数据源。自动生成一个ID为"SqlDataSource1"的SqlDataSource数据源控件。



  第四步:在主页面生成了一个SqlDataSource数据源控件的同时,还显示如下的窗口:


  点击"新建连接"按钮,显示的窗体如下:


  "服务器名"为你本地的SQL Server上的一个实例,填写好了,你就可以选择2种登录到服务器的方式:

  Windows验证和SQL Server验证两种,它们的区别我将在后面进行详细的讲解。我们在这里先选择Windows验证的方式,在选择"pubs"数据库后点击"测试连接"如果显示连接成功后就表明我们已经连接到SQL Server服务器上了。

  第五步:单击"确定"按钮后,将显示"配置数据源"的窗体,我们选择"hoowoo.pubs.dbo"作为我们将要连接的数据库。

  第六步:由于我们希望将连接字符串保存到应用程序配置文件中,所以我们希望在web.config中保持这个连接字符串。在这里我们希望将连接字符串保存为一个别名:Pubs


  第七步:选择下图的"authors"表来选择我们所需要的数据,这里我们选择了所有的字段。


  完成上面的所以步骤后,我们在主页面上的右键菜单上选择"查看代码",可以看到如下的代码:

<%@ Page Language="C#" %>
<html>
  <head id="Head1" runat="server">
   <title>GridView Bound Fields</title>
  </head>
  <body>
   <form id="form1" runat="server">
    <asp:GridView ID="GridView1" DataSourceID="SqlDataSource1"AutoGenerateColumns="False" runat="server">
    <Columns>
     <asp:BoundField HeaderText="ID" DataField="au_id" ReadOnly="true" />
     <asp:BoundField HeaderText="Last Name" DataField="au_lname" />
     <asp:BoundField HeaderText="First Name" DataField="au_fname" />
     <asp:BoundField HeaderText="Phone" DataField="phone" />
     <asp:BoundField HeaderText="Address" DataField="address" />
     <asp:BoundField HeaderText="City" DataField="city" />
     <asp:BoundField HeaderText="State" DataField="state" />
     <asp:BoundField HeaderText="Zip Code" DataField="zip" />
     <asp:CheckBoxField HeaderText="Contract" DataField="contract" />
    </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT [au_id], [au_lname], [au_fname], [phone],[address],[city], [state], [zip], [contract] FROM [authors]" ConnectionString="<%$ ConnectionStrings:Pubs %>" />
   </form>
  </body>
</html>

  Web.Config中的代码如下:

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings/>
<connectionStrings>
<add name="Pubs" connectionString="Data Source=hoowoo;Initial Catalog=pubs;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="false"/>
<authentication mode="Windows"/>
</system.web>
</configuration>

  现在来重点分析这些代码的意义:

"<asp:GridView ID="GridView1" DataSourceID="SqlDataSource1"
AutoGenerateColumns="False" runat="server">"

  数据绑定控件通过其 DataSourceID 属性连接到数据源控件,从而我们可以进行排序、分页、筛选、更新、删除和插入等一系列的操作。

"<Columns>
<asp:BoundField HeaderText="ID" DataField="au_id" ReadOnly="true" />
<asp:BoundField HeaderText="Last Name" DataField="au_lname" />
<asp:BoundField HeaderText="First Name" DataField="au_fname" />
<asp:BoundField HeaderText="Phone" DataField="phone" />
<asp:BoundField HeaderText="Address" DataField="address" />
<asp:BoundField HeaderText="City" DataField="city" />
<asp:BoundField HeaderText="State" DataField="state" />
<asp:BoundField HeaderText="Zip Code" DataField="zip" />
<asp:CheckBoxField HeaderText="Contract" DataField="contract" />
</Columns>"

  "BoundField"和"CheckBoxField"均为要绑定的控件类型,"HeaderText"是将要显示在表格上字段的名称,而"DataField"则是我们要进行绑定的数据字段。

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
SelectCommand="SELECT [au_id], [au_lname], [au_fname],
[phone],[address],[city], [state], [zip], [contract] FROM [authors]"
ConnectionString="<%$ ConnectionStrings:Pubs %>" />

  SqlDataSource控件中我们设置了数据库的SelectCommand命令为"SELECT [au_id],[au_lname],[au_fname],[phone],[address] [city], [state], [zip], [contract] FROM [authors]"这正好和GridView所要绑定的控件一一对应,这充分说明了数据绑定控件和数据源控件的紧密联系。

  细心的读者可能会奇怪了,ConnectionString="<%$ ConnectionStrings:Pubs %>在SqlDataSource是表示什么呢?这个问题就和我们为什么需要Web.Config配置文件有很大的关联了。Web.Config中设置了如下的节点:

<connectionStrings>
<add name="Pubs" connectionString="Data Source=hoowoo;Initial Catalog=pubs;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

  我们可以通过检索Web.Config配置文件来取得数据库连接字符串别名"Pubs"的真正的含义是
"Data Source=hoowoo;Initial Catalog=pubs;Integrated Security=True" providerName="System.Data.SqlClient" Initial Catalog表明我们使用的是"pubs"数据库。Integrated Security说明了我们采用的是Windows验证方式。

  最后的显示如下: