日期:2011-07-11  浏览次数:20939 次

如果你是一个经验丰富的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的bo