如果你是一个经验丰富的ASP/ADO开发员但又没有尝试过.NET,那么最好现在就开始试一试。为了让你体会到.NET,我们将把微软Access数据库(你也可以SQL Server或者Oracle数据库替代)连接到互联网并检索和显示某些数据。这个例子即需要Information Internet Services(IIS)也需要.NET框架。你可以在这儿下载.NET框架。如果你想试用免费的APS.NET开发环境,那么可以从Web Matrix下载它。
对服务器控件的介绍
动态服务器页面(Active Server Page,ASP)是微软第一个用于连接数据库和Web的Web技术。ASP.NET完全是其传统语言(即ASP)的重写。你可以同时使用这两者,这是因为两者文件的扩展名相区别(.NET页使用的是.aspx扩展名,而ASP使用.asp扩展名)。
你在ASP.NET中写的大多数代码将在Web服务器上运行,但返回到客户的仅仅是HTML。幸好,.NET提供了许多与标准HTML控件相似的新控件,如下拉式列表和文本框。表A列出了最常用的服务器(server)控件。
表 A
常见server控件
控件 功能
<asp:Button id="button1" Text="Press" runat="server" /> 在页面上创建一个标准按钮
<asp:Calendar runat="server" /> 创建日历(calendar)
<asp:DropList id="list1" runat="server"> 创建一个下拉式列表
<asp:ListBox id="listbox" rows="4" runat="server"> 创建基本列表框
<asp:TextBox id="txtbox" runat="server" /> 创建标准文本框
.NET服务器控件有一个优点,即它是创建在Web服务器上(而不是像HTML那样在页面中创建控件)。因此,它们可以在发送到客户之前进行处理。例如,你既可以在页中也可以在服务器端进行内容验证。这也就意味着你可以在页中验证内容,然后在服务器端重新进行验证。
在大多数情况下,你可以通过简单的添加组件的方法来创建一个.NET控件:
runat="server"
与之对应的HTML元素代码如下:
<asp:control_name id="controlID" runat="server" />
有些开发工具的用法甚至更简单。例如,Visual Studio .NET可以让你通过拖放Web页上的控件来创建服务器控件。
除了这些服务器端的标准HTML控件,ASP.NET还提供了一套验证控件(validation controls):
RequiredFieldValidation控件请求一个数值。
CompareValidator控件比较两个控件中的数值,如当用户被要求两次输入电子邮件地址时,用来验证两次输入是否相同。
RangeValidator控件用来判断条目值是否在一个值域之内。
RegularExpressionValidator控件用正则表达式来验证控件输入。
CustomValidator控件用来让你输入验证码。
Validation Summary用来显示一个页面所用到的所有正确的验证的清单。
使用ADO.NET
你或许熟悉ADO,不过ADO.NET却是一种全新的语言。但是没有关系,这两者之间有足够多的相似之处,学会如何使用新的对象并不是困难的事。连接到数据库一共有三个步骤:
1. 导入一个.NET名字空间来建立连接。
2.创建一个ADO.NET DataReader对象来获取数据。
3.创建一个ADO.NET Repeater对象来显示数据。
对.NET来说,名字空间是一个新的概念,所以在ADO中没有和它对应的东西。在ADO中,连接是通过提供字符串和一个Connection或者Command对象来建立起来的。DataReader对应于ADO的Recordset;而Reperter是一个server控件,它用来在一个模板的基础上显示数据。
创建ADO.NET连接
为了从数据库中检索数据,你需要ADO.NET。如果你熟悉IIS和Web文件层次,那么你可能不需任何帮助就可以建立一个例子。你也可以按照我们的演示过程去做,先把Northwind(一个Access数据库例子)拷贝到你的本地硬盘中。我们的例子在一个名为nettest的Web文件夹下。拷贝粘贴(或者输入)下面的代码到一个文本编辑器中并把它保存为nettest.aspx。
现在,导入一个.NET名字空间,这样你就可以使用OLEDB数据库了:
<%@ Import Namespace="System.Data.OleDb" %>
PageLoad事件将执行连接到Northwind数据库的代码,Server.mappath将返回包含该数据库的物理路径,如代码清单A所示。
连接字符串
如果你想连接到SQL Server(用一个OLEDB连接),你可以使用下面的语句:
"Provider=sqloledb;Data Source=Martin;Initial Catalog=NorthWind;Integrated Security=SSPI;"
如果你用的是Oracle,你可以用下面的语句:
"Provider=msdaora;Data Source=OracleDataBase;User Id=YourUserName;Password=YourPassword;"
connectionstrings.com提供了许多关于连接的信息,其中包含了每种可能情况下的连接字符串。
创建ADO.NET对象
下一步就是创建一个DataReader对象,它用来保存你希望显示的数据。下面的代码使用了Command对象的ExecuteReader方法,这样就创建了一个保存了Northwind客户数据库中所有记录的DataReader对象。
cnn.Open()
sql="SELECT CompanyName, ContactName, Address, City FROM Customers"
cnn=New OleDbCommand(sql,cnn)
dbread=cnn.ExecuteReader()
用Reaperter控件来显示数据
现在,通过绑定上一步创建的DataReader对象,你就可以用一个Reperter控件来显示数据。Reaperter控件可以让你创建一个简单的模板(例如,HTML表),对查询所返回的每行数据都重复这个操作。
用HerderTemplate块来创建初始的表结构;数据将出现在ItemTemplate(表的行和列)块中。例如,下面的代码为我们的客户数据创建一个表头,它用来指示早先SQL语句所返回的字段:
<HeaderTemplate>
<table border="1" width="100%">
<tr>
<th>CompanyName</th>
<th>ContactName</th>
<th>Address</th>
<th>City</th>
</tr>
</HeaderTemplate>
与其它的ASP.NET对象不同,Repeater对象没有现成的布局(layout)和样式;你必须定义你自己的布局和样式。返回数据的每一行都显示在ItemTemplate块中。下面的脚本中每一个字段都包含了一个单元(cell)(在HTML表中):
<ItemTemplate>
<tr>
<td><%#Container.DataItem("CompaName")%></td>
<td><%#Container.DataItem("ContactName")%></td>
<td><%#Container.DataItem("Address")%></td>
<td><%#Container.DataItem("City")%></td>
</tr>
</ItemTemplate>
模板代码在HTML的body标签中而在脚本定义之外——虽然你不能从上面的例子中看出这一点。
浏览.NET页
清单B中的代码用来在浏览器中显示客户数据(用HTML表模板显示各个数据条目)。
把这些脚本复制粘贴到任何一个文本编辑器中,并保存为.aspx格式的文件。然后把该文件另存或者拷贝到Web根目录下(本例的根目录为wwwroot\nettest)。启动你的浏览器并输入合适的地址,这样打开了这个文件。当浏览器载入该文件后(如图A所示),浏览器将显示一个简单的HTML网页,其中包含了SQL语句的请求所返回的数据。
图A
浏览器中的.NET页面
你还可以改进页面的外观。例如,通过添加其它模板块来改变每行的颜色。AlternatingItem.Template块可以改变每一个表单元的背景颜色。下面的脚本会把单元的背景改成黄色(FFFF00):
<AlternatingItemTemplate>
<tr bgcolor="#FFFF00">
<td><%#Container.DataItem("companyname")%></td>
<td><%#Container.DataItem("contactname")%></td>
<td><%#Container.DataItem("address")%></td>
<td><%#Container.DataItem("city")%></td>
<td><%#Container.DataItem("Region")%></td>
</tr>
</AlternatingItemTemplate>
为了对其它所有行起作用,把AlternatingItemTemplate块放到ItemTemplate块之后。
小节
尽管.NET并不是特别新鲜的东东,但如果你还没有实现从传统ASP到ASP.NET的跳跃,那么现在开始也不迟。如果你在ASP和ADO领域有着丰富的经验,那么这个转换将会相当的简单。