- ·上一篇文章:Asp.net+Xml实现无数据库论坛一点即通
- ·下一篇文章:ASP.NET下MVC设计模式的实现
从 PHP 迁移到 ASP.NET
一些 Session 变量的使用示例。
表 12:Session 变量的使用
PHP Visual Basic .NET
<?PHP
session_start();
session_register('today');
$today = getdate();
?>
<?= $today ?>
Session("Today") = DateTime.Now
Dim today As Date
today = CDate(Session("Today"))
Response.Write(today)
Response.write (session("Today"))
ASP.NET 还提供了另一种形式的状态管理,即“应用程序状态”,它与 Session 变量类似,但只是在应用程序的生存期中保持一致。这使您可以存储各种内容,例如配置信息或数据库连接字符串。这些内容在应用程序运行期间不会发生变化。
有关此主题的详细信息,请参阅《.NET Framework Development Guide》中的 Application State 一节。
正则表达式
ASP.NET 支持其他正则表达式实现(例如 Perl 和 awk 中的正则表达式)的大多数常见功能。这实际上是为了保持与 Perl 5 正则表达式兼容。ASP.NET 还支持其他正则表达式实现中未提供的正则表达式功能,例如从右向左匹配以及实时编译。由于 ASP.NET 与 Perl 正则表达式兼容,并且大多数 PHP 开发人员都使用了 Perl 兼容的正则表达式,因而通常无须将语法从一种形式转换为另一种形式。有关 .NET 正则表达式支持的详细信息,请参阅 .NET Framework Regular Expressions。
异常处理
ASP.NET 框架通过一种人们所熟悉的语言构造 Try/Catch 提供了结构化的异常处理,从而能够捕获代码中可能出现的异常。PHP 没有提供此功能,但 PHP 5 中将添加它。
下面的示例说明了如何在 Visual Basic .NET 中进行异常处理:
Try
' 此处是可能导致错误的代码
Catch e As ExceptionType
' 用于处理错误的代码
' 可选:可在此处放置更多 Catch 块
Finally
' 始终执行的代码
End Try
要注意的是,Try 块可以包含一个或多个 Catch 块,或包含一个 Finally 块,也可以同时包含两者。也就是说,如果您知道无法更正错误,但仍需要清除某些对象而不管是否发生错误,则可以使用不包含 Catch 语句的 Try...Finally 块。
查询数据库
在 PHP 中,通常可以通过两种常见方法访问数据库:使用数据库的特定扩展名或使用独立于数据库的 PEAR DB 库。
在 ASP.NET 中,可以通过一组称为 ADO.NET 的对象来访问数据库,这些对象与 PEAR DB 库的功能基本相同。数据库查询实际上是通过一组连接、命令、参数和数据适配器对象完成的。其中的每个对象都有多个版本,具体情况取决于所访问的数据库的类型。例如,有一组对象用于具有 OLE-DB 驱动程序的数据库(例如 Microsoft Access),还有一组对象用于具有 ODBC 驱动程序而没有 OLE-DB 驱动程序的数据库。针对 Oracle 和 Microsoft SQL Server 也有专门的数据提供者,它们已经过优化,可以分别为每种特定的数据库提供高性能的访问。某些第三方还提供了其他数据库支持,例如 MySQL。本节中的示例将使用 SQL Server 对象,因为它是 ASP.NET 最常用的数据库。
System.Data、System.Data.SqlClient 和 System.Data.oledb 是用于在 ADO.NET 中定义数据库访问的命名空间。要使页面能够访问这些类,您需要将 System.Data 和 System.Data.SqlClient 命名空间导入到页面中。
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
图 13 显示了在这两种语言中执行查询的示例。在 PHP 中,我们显示了一个使用 PEAR 的连接,PEAR 不仅是用于连接 DB 的最常用方法之一,但还是与 ADO.NET 最为类似的方法。
表 13:执行查询
PHP Visual Basic .NET
<?php
//connect
require_once('DB.PHP');
$db=DB::connect
("mysql://mydbvie
w:user@localhost/mydb");
if (DB::iserror($db)) {
die($db->getMessage());
$sql = "select * from mytable";
$q= $db->query($sql);
if (DB::iserror($q)) {
die($q->getMessage());
}
<tr>
<td><?= $row[0] ?></td>
<td><?= $row[1] ?></td>
<td><?= $row[2] ?></td>
</tr>
<script runat="server">
Sub Page_Load(Sender As Object, E As
EventArgs)
Dim myConnection As New
SqlConnection("server=(local)\NetSDK;
database=mydb;Trusted_Connection
=yes")
Dim myCommand As New
SqlDataAdapter("select * from
mytable", myConnection)
Dim ds As New DataSet()
myCommand.Fill(ds, "myDataset")
myDataGrid.DataSource = myDataset
myDataGrid.DataBind()
End Sub
</script>
<%--- 输出结果 ---%>
<form runat="server">
<asp:DataGrid id="myDataGrid"
runat="server" />
</form>
在 PHP 中,查询结果存储在一个称为 result set(结果集)的变量中,而在 ADO.NET 中,该变量称为 Dataset 对象。结果集是返回数据的只读视图,而 .NET Dataset 实际上是返回数据在内存中的读写视图,这使 .NET 开发人员能够轻松地处理从数据源返回的数据。
输出数据时,ASP.NET 提供了若干方法,用于向用户或客户端显示数据。第一种方法与 PHP 类似,即使用 SQLDataReader 对象遍历结果集以写出我们要通过查询显示的数据。更常用的方法是 ASP.NET 的数据绑定(PHP 中没有与此对应的方法)。通过该方法,开发人员可以构建用户界面并显示可在应用程序中使用和重用的控件,还可以进一步根据数据和逻辑提取显示内容。数据绑定的语法很灵活,您不仅可以绑定到数据源,还可以绑定到简单的属性、集合、表达式,甚至是方法调用返回的结果。
要使用数据绑定,您需要向某个数据识别服务器控件(例如 DataGrid)的 DataSource 属性指定某个数据源(例如查询结果)。您还可以选择为每个列提供一些附加的格式化信息并调用 DataBind() 方法。服务器控件将负责完成剩余的工作。
例如,在表 13 中,我们使用了数据绑定语法输出查询结果,如下所示:
<%--- 在页面中加载事件
---%>
myDataGrid.DataSource = myDataset
myDataGrid.DataBind()
<%--- 输出结果 ---%>
<asp:DataGrid id="myDataGrid"
runat="server" />
数据识别服务器控件将提供其他功能,例如支持对显示的数据进行分页或内联编辑。有关详细信息和示例,请参阅 Data Binding Server Controls。
数据缓存和页面缓存
对经常访问的数据进行缓存可以显著缩短站点的响应时间,因为不需要等待数据库查询便可进行页面处理。而缓存由页面请求生成的 HTML 可以进一步缩短响应时间,因为根本就无需处理缓存的页面。这两种环境均支持上述两种缓存策略,但与 PHP
表 12:Session 变量的使用
PHP Visual Basic .NET
<?PHP
session_start();
session_register('today');
$today = getdate();
?>
<?= $today ?>
Session("Today") = DateTime.Now
Dim today As Date
today = CDate(Session("Today"))
Response.Write(today)
Response.write (session("Today"))
ASP.NET 还提供了另一种形式的状态管理,即“应用程序状态”,它与 Session 变量类似,但只是在应用程序的生存期中保持一致。这使您可以存储各种内容,例如配置信息或数据库连接字符串。这些内容在应用程序运行期间不会发生变化。
有关此主题的详细信息,请参阅《.NET Framework Development Guide》中的 Application State 一节。
正则表达式
ASP.NET 支持其他正则表达式实现(例如 Perl 和 awk 中的正则表达式)的大多数常见功能。这实际上是为了保持与 Perl 5 正则表达式兼容。ASP.NET 还支持其他正则表达式实现中未提供的正则表达式功能,例如从右向左匹配以及实时编译。由于 ASP.NET 与 Perl 正则表达式兼容,并且大多数 PHP 开发人员都使用了 Perl 兼容的正则表达式,因而通常无须将语法从一种形式转换为另一种形式。有关 .NET 正则表达式支持的详细信息,请参阅 .NET Framework Regular Expressions。
异常处理
ASP.NET 框架通过一种人们所熟悉的语言构造 Try/Catch 提供了结构化的异常处理,从而能够捕获代码中可能出现的异常。PHP 没有提供此功能,但 PHP 5 中将添加它。
下面的示例说明了如何在 Visual Basic .NET 中进行异常处理:
Try
' 此处是可能导致错误的代码
Catch e As ExceptionType
' 用于处理错误的代码
' 可选:可在此处放置更多 Catch 块
Finally
' 始终执行的代码
End Try
要注意的是,Try 块可以包含一个或多个 Catch 块,或包含一个 Finally 块,也可以同时包含两者。也就是说,如果您知道无法更正错误,但仍需要清除某些对象而不管是否发生错误,则可以使用不包含 Catch 语句的 Try...Finally 块。
查询数据库
在 PHP 中,通常可以通过两种常见方法访问数据库:使用数据库的特定扩展名或使用独立于数据库的 PEAR DB 库。
在 ASP.NET 中,可以通过一组称为 ADO.NET 的对象来访问数据库,这些对象与 PEAR DB 库的功能基本相同。数据库查询实际上是通过一组连接、命令、参数和数据适配器对象完成的。其中的每个对象都有多个版本,具体情况取决于所访问的数据库的类型。例如,有一组对象用于具有 OLE-DB 驱动程序的数据库(例如 Microsoft Access),还有一组对象用于具有 ODBC 驱动程序而没有 OLE-DB 驱动程序的数据库。针对 Oracle 和 Microsoft SQL Server 也有专门的数据提供者,它们已经过优化,可以分别为每种特定的数据库提供高性能的访问。某些第三方还提供了其他数据库支持,例如 MySQL。本节中的示例将使用 SQL Server 对象,因为它是 ASP.NET 最常用的数据库。
System.Data、System.Data.SqlClient 和 System.Data.oledb 是用于在 ADO.NET 中定义数据库访问的命名空间。要使页面能够访问这些类,您需要将 System.Data 和 System.Data.SqlClient 命名空间导入到页面中。
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
图 13 显示了在这两种语言中执行查询的示例。在 PHP 中,我们显示了一个使用 PEAR 的连接,PEAR 不仅是用于连接 DB 的最常用方法之一,但还是与 ADO.NET 最为类似的方法。
表 13:执行查询
PHP Visual Basic .NET
<?php
//connect
require_once('DB.PHP');
$db=DB::connect
("mysql://mydbvie
w:user@localhost/mydb");
if (DB::iserror($db)) {
die($db->getMessage());
$sql = "select * from mytable";
$q= $db->query($sql);
if (DB::iserror($q)) {
die($q->getMessage());
}
<tr>
<td><?= $row[0] ?></td>
<td><?= $row[1] ?></td>
<td><?= $row[2] ?></td>
</tr>
<script runat="server">
Sub Page_Load(Sender As Object, E As
EventArgs)
Dim myConnection As New
SqlConnection("server=(local)\NetSDK;
database=mydb;Trusted_Connection
=yes")
Dim myCommand As New
SqlDataAdapter("select * from
mytable", myConnection)
Dim ds As New DataSet()
myCommand.Fill(ds, "myDataset")
myDataGrid.DataSource = myDataset
myDataGrid.DataBind()
End Sub
</script>
<%--- 输出结果 ---%>
<form runat="server">
<asp:DataGrid id="myDataGrid"
runat="server" />
</form>
在 PHP 中,查询结果存储在一个称为 result set(结果集)的变量中,而在 ADO.NET 中,该变量称为 Dataset 对象。结果集是返回数据的只读视图,而 .NET Dataset 实际上是返回数据在内存中的读写视图,这使 .NET 开发人员能够轻松地处理从数据源返回的数据。
输出数据时,ASP.NET 提供了若干方法,用于向用户或客户端显示数据。第一种方法与 PHP 类似,即使用 SQLDataReader 对象遍历结果集以写出我们要通过查询显示的数据。更常用的方法是 ASP.NET 的数据绑定(PHP 中没有与此对应的方法)。通过该方法,开发人员可以构建用户界面并显示可在应用程序中使用和重用的控件,还可以进一步根据数据和逻辑提取显示内容。数据绑定的语法很灵活,您不仅可以绑定到数据源,还可以绑定到简单的属性、集合、表达式,甚至是方法调用返回的结果。
要使用数据绑定,您需要向某个数据识别服务器控件(例如 DataGrid)的 DataSource 属性指定某个数据源(例如查询结果)。您还可以选择为每个列提供一些附加的格式化信息并调用 DataBind() 方法。服务器控件将负责完成剩余的工作。
例如,在表 13 中,我们使用了数据绑定语法输出查询结果,如下所示:
<%--- 在页面中加载事件
---%>
myDataGrid.DataSource = myDataset
myDataGrid.DataBind()
<%--- 输出结果 ---%>
<asp:DataGrid id="myDataGrid"
runat="server" />
数据识别服务器控件将提供其他功能,例如支持对显示的数据进行分页或内联编辑。有关详细信息和示例,请参阅 Data Binding Server Controls。
数据缓存和页面缓存
对经常访问的数据进行缓存可以显著缩短站点的响应时间,因为不需要等待数据库查询便可进行页面处理。而缓存由页面请求生成的 HTML 可以进一步缩短响应时间,因为根本就无需处理缓存的页面。这两种环境均支持上述两种缓存策略,但与 PHP
