轉載:ASP.NET 2.0实现数据库应用开发
·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验证方式。
最后的显示如下: