开发者社区


首页 -
资源中心
全文搜索:   

ASP.NET移植须知
作者: Jim Kieley
2001-10-12 16:40:45



正如我所提到过的,VBScript 已被更全面更强大的Visual Basic .NET所取代。在这部分,我会强调那些您可能会碰到的与Visual Basic语言变化相关的问题。请注意我并不会列出关于Visual Basic所有的变化,而只会着眼于一个由Visual Basic .NET转向ASP .NET的ASP/VBScript 程序员可能会遇到的情况。欲知所有语言变化,请参考Visual Basic .NET相关文档。


告别Variant数据类型


我们知道它,我们爱它,我们也恨它。我说的当然是VARIANT数据类型。VARIANT数据类型不是.NET的一部分,所以在Visual Basic .NET中也不支持它。这也就意味着您所有的ASP变量正在不知不觉地从VARIANT数据类型转为对象类型。您的应用程序里的大多变量应根据需要改为相应的基元类型。如果您的变量在Visual Basic术语中确实是对象类型,只需在ASP.NET中简单声明其为Object即可。


Visual Basic 数据类型

一种一定会引起特别关注的VARIANT是VT_DATE数据类型。在Visual Basic中它被表示为Date类型。在Visual Basic中,Date 是以4个字节的双字节格式存储的。在Visual Basic.NET中, Date使用Common Language Runtime DateTime 类型,用8个字节整数来存储。

既然在ASP中,所有变量都是VARIANT数据类型,您使用的Date变量会被编译,也可能继续工作(这取决于他们是如何被正确使用。)可是,您在使用这些变量时,也有可能会遇到各种各样的问题,因为它们实际的数据类型已经改变。在把数值作为长整数类型送入COM对象或是对日期类型用CLng实施某些转换操作时,尤要注意。


Option Explicit 现为默认

在ASP中,Option Explicit 没有被规定为默认设置。Visual Basic .NET在这点上作了改变。Option Explicit成为默认值,因此,所有变量都需要声明。如果更严格一些的话,可以把您的设置变为Option Strict,这样可以迫使您声明所有的变量为某种数据类型。虽然这看似冗余,却是您应该坚持的做法。如果您不这样做,您的代码远远不可能优化,因为所有未经声明的变量会变成Object 类型。大多数隐性转换仍会有效,但如果您声明清楚所有变量的话,以后您就可以更安心了。


LET 与 SET不再被支持

对象可以像这样直接赋值:MyObj1 = MyObj2。如果您的程序里有SET 或LET 关键字, 它们必须被移掉。


用括号实现方法调用

在ASP中,您无须使用括号就可以自由调用对象的方法。例如:

Sub WriteData()
Response.Write "This is data"
End Sub
WriteData

在ASP .NET中, 做任何调用,您都必须使用括号,即使是不使用任何参数的方法也是一样。按照如下例所示方法书写代码,可以使代码在ASP与 ASP.NET环境中都工作无误。

Sub WriteData()
Response.Write("This is data")
End Sub
Call WriteData()



ByVal成为默认

在Visual Basic中,所有参数默认以引用(或ByRef)方式来传递。在Visual Basic .NET中有所改变。所有参数默认以值(或ByVal)传递。如果您仍然希望以引用来传递,您必须在参数之前清楚注明ByRef关键字。例如:

Sub MyByRefSub (ByRef Value)
Value = 53;
End Sub

这就是您必须非常小心的地方。当您将您的代码转向ASP.NET,我建议您对方法调用中的每个参数作两次甚至三次的检查,以确保这种变化确实符合您的期望。我估计,在检查过程中,总会查出些错误。


不再有默认属性


默认属性的概念不再存在于Visual Basic .NET。 这也就意味着如果您有依赖于来自某对象的默认属性的ASP代码,您将需要加以修改,以显式地引用所需属性。请见下例:

'ASP Syntax (Implicit retrieval of Column Value property)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("TestDB")
Set RS = Conn.Execute("Select * from Products")
Response.Write RS("Name")

'ASP.NET Syntax (Explicit retrieval of Column Value property)
Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("TestDB")
RS = Conn.Execute("Select * from Products")
Response.Write (RS("Name").Value)



数据类型的变化

在Visual Basic .NET,整数值现在是32 位。Long数据类型为64 位。

当从ASP.NET中调用COM对象的方法或是在您自定义Visual Basic components组件中调用Microsoft® Win32® API,都可能发生问题。您特别要注意实际需要的数据类型,以确保您正确传递数值。


结构化的例外处理

虽然在Visual Basic .NET中,仍然沿用熟悉的On Error Resume Next 及On Error Goto 错误处理方法,但是,它们不再是最好的方法。Visual Basic现在有成熟的,系统的例外处理方法。它们使用Try, Catch, 及 Finally等关键字。如果有可能的话,您应该转向这种新的错误处理模式,因为它运用了一个性能更加完善,稳定的机制来处理应用程序错误。
 

【上一页】 【下一页】
声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号