第1页:ASP.NET移植须知 第2页:ASP.NET移植须知 第3页:ASP.NET移植须知 第4页:ASP.NET移植须知 第5页:ASP.NET移植须知 第6页:ASP.NET移植须知 第7页:ASP.NET移植须知 第8页:ASP.NET移植须知 第9页:ASP.NET移植须知
正如我所提到过的,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等关键字。如果有可能的话,您应该转向这种新的错误处理模式,因为它运用了一个性能更加完善,稳定的机制来处理应用程序错误。