CSDN博客

img Rewen

为更新到Visual Basic.NET准备你的Visual Basic 6.0应用程序

发表于2003/5/8 12:23:00  1369人阅读

为更新到Visual Basic.NET准备你的Visual Basic 6.0应用程序
微软公司
2000年10月

综述: 这篇文章为计划将他们的应用程序更新到Visual Basic.NET的微软Visual Basic 开发用户提供一些建议。它包括有关Visual Basic.NET 更新工具的一些信息,并讨论了使应用程序稳定地从Visual Basic 6 更新到 Visual Basic.NET的总体结构指导思想.

目录

???? 概述

??? 什么是 Visual Basic.NET?

??? 为什么 Visual Basic.NET 不是 100% 兼容的?

??? 更新到 Visual Basic.NET

??? 同时使用 Visual Basic 6.0 和Visual Basic.NET

??? 体系结构推荐

??????? 基于浏览器的应用程序

??????? 客户/服务器项目

??????? 单层应用程序

??????? 数据

??? 更新

??????? 变体到对象

??????? 整型到短整型

??????? 特性语法

??????? Visual Basic 窗体到Windows 窗体

??????? 接口

??? 更新报表和注释

??? 编程的一些建议

??????? 应用早期绑定

??????? 使用Date 来存储日期

??????? 解决无参缺省特性的问题

??????? 避免Null 传播

??????? 使用0边界数组

??????? 使用常量代替潜在值

??????? 在自定义类型中使用数组和定长字符串

??????? 避免继承特性

??????? Windows APIs

??????? 对于窗体和控件的考虑

??? 概述

这篇文章是为准备更新Visual Basic到Visual Basic.NET的使用Microsoft Visual Basic的用户提供一些建议。

Visual Basic.NET将打开并将Visual Basic 6.0项目更新到Visual Basic.NET技术,但是在大多数情况下,在你把Visual Basic 6.0的项目调入Visual Basic.NET之前必须做一些修改。这篇文章的目的是建议你如何设计和执行你现有的Visual Basic项目,使得你在更新到Visual Basic.NET时需要做的修改最小化,在最合适的地方使用新的语言结构;然而这篇文章却不是Visual Basic.NET语言的参考书.

注意:Visual Basic.NET 仍然在开发之中;一些兼容性细节在产品发布以前还可能会改变。遵循这些指导原则并不能保证你的代码不再需要修改;相反这个指导的目的是减少这种转变的工作量。

Visual Basic.NET中的更新向导和命令行更新工具仍然在早期的开发阶段,因此它们的功能是有限的。在Beta版中包括这些功能的目的是让你知道更新过程是如何工作的,看看如何修改VB6.0代码以便它们能在Visual Basic.NET中工作;在Beta1版中,大多数实际项目或许是不能成功移植的。


什么是 Visual Basic.NET?

Visual Basic.NET是Visual Basic的下一个版本。微软不是简单的在Visual Basic 6.0的基础上增加了一些新特性,而是重新更换定制了这个产品,从而使得编写分布式的应用程序,例如网页和企业n层系统,比以前更简单了。Visual Basic.NET有两个新的窗体包(Windows 窗体和网页窗体);一个用于无连接数据源的新的ADO版本;改进的语言,去处了继承关键字,增强了类型安全性,和高级开发者需要的低级结构。

这些新的特点为Visual Basic开发者打开了新的门户;使用网页窗体和ADO.NET,你现在可以快速开发可扩展的网站;使用继承,这个语言现在真正支持面向对象编程;Windows窗体天然地支持可访问性和可视化继承特点;现在部署你的应用程序非常简单,只需要将可执行文件从一个目录拷贝到另一个目录。

Visual Basic.NET 现在已经与Microsoft Visual Studio.NET 其他的几种语言完全综合在一起了 。你不仅可以用不同的编程语言来开发应用程序组件,现在你的类使用交叉语言继承还可以从其他语言编写的类中继承而来。使用统一的调试器,你现在可以调试多语言应用程序,而不管它们运行在本地机上还是在远程计算机上。最后,无论你使用什么语言,微软.NET框架为Microsoft Windows和因特网提供了丰富的API接口函数。


为什么 Visual Basic.NET 不是 100% 兼容的?

在设计Visual Basic.NET的时候考虑到了两种选择--翻新源代码基础使之在.NET框架上运行,或是从基础做起充分利用平台。为了交付客户最需要的特点(例如:继承,线程等),为了提供完全的无限制的访问平台,为了使Visual Basic进入下一代网络应用程序,正确的决定是:从基础创建一个新的平台。

例如,大多数Windows窗体的新特征可以作为新控件和更多属性加入到现有的基础代码中。然而,这样做的代价是放弃了继承到Windows窗体的其它更多特性,如:安全性,可视继承特性等。

我们最主要的目的之一是保证Visual Basic代码能够与其它语言,如Microsoft Visual C# 或 Microsoft Visual C++编写的代码完全交互,使Visual Basic开发者能简单地利用.NET Framework的功能,而不是求助于传统的需要处理Windows API函数的编程环境。Visual Basic现在具有和Visual C++和其它语言相同的变量类型,数组,用户定义类型,类和接口,目的是公共语言运行时间(Common Language Runtime);然而,我们不得不去处一些特点,如固定长度字符串和非零地址数组等。

Visual Basic现在是一种真正的面向对象语言;一些象GoSub/Return和DefInt等非直觉的和不一致的特点已经从这种语言中去出了。

结果是产生一个重新加强的Visual Basic,它继续是开发基于Windows的应用程序的多产工具,现在定位于创建下一代网站的最好工具。


更新到 Visual Basic.NET

Visual Basic.NET 完成了由传统的Windows开发到创建下一代网页和n层应用程序的重大转变。因为这个原因,你的代码就需要更新来充分利用Visual Basic.NET。

当你在Visual Basic.NET 中打开一个Visual Basic 6.0项目时,此过程自动执行:更新向导一步一步引导你完成更新过程,并建立一个新的Visual Basic.NET项目(你原来的项目仍然完好存在)。这是一个单向的过程;Visual Basic 6.0中不能打开Visual Basic.NET的项目。

当你的项目在更新时,由于一些语法的改变会修改代码并且 Visual Basic 6.0窗体都变成Windows窗体。在大多数情况下,更新之后你必须对你的代码作一些修改。这是因为自动更新中某个对象和语言特点在Visual Basic.NET并没有完全等价的,或等价之处有太多的不同之处。更新之后,你也会想通过改变你的应用程序来更好的利用Visual Basic.NET的一些新特点。

例如:Windows窗体支持控件入坞,所以你可以去除Visual Basic6.0中的窗体来重新编程

VB.NET 支持控件入坞

在你的项目完成更新之后,为了帮助你做这些修改,Visual Basic.NET给你的项目增加了一个"更新报告",详细说明了每个问题,并在你的代码中插入了注释,向你提示这些代码需要修改。由于这些注释在新的任务列表窗口显示为需要做的任务,你能很容易看出哪些需要修改,并且通过双击任务可以很容易找到相关的代码。在更新报告中的每个任务和项目与在线帮助连接在一起,相关主题将会给你诸如为什么这儿代码需要修改,你需要做什么等进一步的指导。

遵循这篇文章的建议,你能使得你的项目在更新到Visual Basic.NET之后需要做的工作最小化,在一些情况下,甚至可以消除这种必要的修改。在大多数情况下,这种建议也代表了好的编程习惯;但是,我们也认识到对象和方法Visual Basic.NET中没有等价物,如果你想更新你的项目到Visual Basic.NET中,你就必须少用他们。


同时使用 Visual Basic 6.0 和Visual Basic.NET

Visual Basic.NET 支持更新的 Visual Basic 6.0 项目;如果你的项目是Visual Basic1-5版本的,我们推荐你在更新到Visual Basic.NET以前首先装入到Visual Basic6.0(选择更新Microsoft ActiveX控件),编译并保存。

Visual Basic.NET 和 Visual Basic 6.0能够同时安装在一台计算机上并能同时运行。同样的,用Visual Basic.NET 和 Visual Basic 6.0编写的程序也能安装在同一台计算机上同时运行。在Visual Basic.NET 写的组件能够和Visual Basic 早期版本或其它语言编写的COM组件混合使用。例如,你可以把一个Visual Basic 6.0中编写的ActiveX控件放在Visual Basic.NET Windows窗体之上,可以使用来自Visual Basic.NET类库的Visual Basic 6.0 COM对象,或将一个Visual Basic.NET库连接增加到Visual Basic 6.0的可执行文件中。

用Visual Basic.NET编译的组件和用Visual Basic 6.0编译的组件在运行时有一些微妙的不同,因为Visual Basic.NET对象释放是通过碎片收集完成的,当对象明确被销毁时,在从内存里完全删除以前要有一段延迟。还有一些诸如变体和对象的变化在这篇文章的后面将有所描述。这些不同之处结合地结果是Visual Basic.NET应用程序与Visual Basic 6.0应用程序具有相似性但在运行时的行为又不完全相同。

另外,Visual Basic.NET使得Visual Basic.NET组件和Visual Basic 6.0组件之间的二进制兼容性完全没必要。现在组件已经有了比以前更健壮的版本和开发系统。文件的部署可以通过简单的拷贝到目录中(而不再是使用RegSvr32),组件更新到一个新的版本如同一个新的文件代替一个旧的文件一样简单。你所要做的就是要保证类和方法与前一个版本兼容。

体系结构推荐

.NET平台改善了以前的体系结构,大量增加了对扩展性和通过离散数据访问的分布式应用程序的支持,基于HTTP的信息传递和基于文件拷贝的配置(不再注册组件)的支持。为了充分利用这些特征,你应该用与Visual Basic.NET中使用的结构相似的结构设计你的应用程序。

基于基于浏览器的应用程序

Visual Basic 6.0 和 Microsoft Visual Studio 6.0提供好几种技术来创建基于浏览器的因特网和内部网络的应用程序:

  • 网页类
  • DHML项目
  • ActiveX文档
  • 活动服务器网页(ASP)

Visual Basic.NET引入了ASP.NET,它是ASP的一个加强版本,并且在结构中增加了网页窗体,它是具有Visual Basic事件的HTML页。这种体系结构是基于服务器的。

以下是一系列开发Visual Basic 6.0基于浏览器应用程序(这些应用程序能够和Visual Basic.NET项目无缝结合)的推荐和体系结构建议。

  • 我们加以你使用微软中间层体系结构指导原则来创建你的应用程序,创建ASP接口,并使用Visual Basic 6.0或Visual C++ 6.0 COM对象来组成你的企业逻辑。ASP在Visual Basic.NET中是完全支持的,你可以继续使用ASP和ASP.NET扩展你的应用程序和网页窗体。Visual Basic 6.0 和 Visual C++ 6.0企业对象不需要修改或更新到Visual Studio.NET就能使用。
  • DHTML应用程序包DHTML页和客户端DLL。这种应用程序不能自动更新到Visual Basic.NET。我们建议你不用更新这一类型的应用程序,继续留在Visual Basic 6.0中。
  • ActiveX文档在Visual Basic.NET也是不支持的,和DHTML项目一样,是不能自动更新的。我们推荐你要么不用更新这一类型的应用程序,继续留在Visual Basic 6.0中,或如果可能使用用户控件代替ActiveX文档。
  • Visual Basic 6.0 ActiveX文档和DHTML应用程序能够和Visual Basic.NET技术交互操作。例如,你能够通过Visual Basic.NET的网页窗体到Visual Basic 6.0的DHTML网页,反之亦然。
  • 网页类在Visual Basic.NET中已经不再存在了。网页类的应用程序将被更新到ASP.NET中;然而,你将在更新之后不得不做一些必要的修改。现有的网页类应用程序与Visual Basic.NET地网页窗体和ASP应用程序交互操作,但是对于一个新的项目,我们建议你使用ASP的Windows DNA 平台和Visual Basic 6.0企业对象。

想了解使用微软中间层体系结构创建应用程序的更多信息,看Microsoft Windows DNA网站。

客户/服务器项目

Visual Basic 6.0提供几种技术来创建客户/服务器应用程序:

  • Visual Basic窗体
  • 微软事务处理服务器(MTS)/ COM+中层对象
  • 用户控件

在Visual Basic.NET中,有一个新的社会窗体包:Windows窗体。Windows窗体具有与Visual Basic 6.0窗体不同的对象模型,但是大致来说是兼容的。当你的项目师更新时Visual Basic窗体被转变为Windows窗体。

Visual Basic.NET提高了对开发中间层MTS 和COM+组件服务组件的支持。使用统一的调试器,你可以从客户应用程序进入MTS/COM+组件并回到客户端。你也能够通过使用统一的调试器进入Basic 6.0 MTS/COM+组件(倘若他们把本地代码和符号调试信息和非最优化编译连接)。

Visual Basic.NET也引入了一个中间层组件:网页服务。网页服务寄存在ASP.NET中,并且通过使用HTTP传输允许方法请求通过防火墙。他们通过工业标准XML传递、返回数据,允许其它语言和其它平台来访问他们的函数。尽管他们不支持MTS传输,在你不需要分布式处理但是想与其他平台交互的情况下,你可以改变你的MTS/COM+组件到网页服务。尽管对他没有自动的方法,但是这个任务简单,在更新到Visual Basic.NET之后几分钟之内使用拖拉操作就能完成。

当你的项目更新时,用户控件更新到Windows控件;然而定制属性标签设置和加速键分配是不能更新的。

单层应用程序

Visual Basic 6.0支持创建多种类型的单层应用程序:

  • 单层数据库应用程序
  • Visual Basic插件
  • 应用程序和游戏软件

单层数据库应用程序典型的情况是Visual Basic应用程序在微软Access数据库中存储数据。这些应用程序要更新到Visual Basic.NET具有一些局限性(见后文数据章节)。

既然Visual Basic.NET集成开发环境完全集成在Visual Studio.NET集成开发环境中,Visual Basic.NET具有一个新的语言中立的扩展模块。Visual Basic.NET插件现在是Visual Studio.NET的插件,你可以在Visual Studio.NET中自动加入一些特点到任何语言。例如,你可以写Visual Basic.NET插件,这个软件完成在Visual C#中对Windows窗体重新着色或给Visual Basic类附加注释。为了增加这种功能,Visual Basic.NET放弃了过去可扩展的模块,你将需要在你的应用程序中改变可扩展性对象以充分利用这些新特点。

许多应用程序都可以归入实用程序类中。实用应用程序处理文件,设置注册表等等,并经常不需要额外变化就能完成更新。更新之后,你就可以充分利用很多新的特性,如除了语言中的例外处理以捕获文件系统错误,使用.NET框架注册类来操作注册表。我们应该意识到的是依赖于Visual Basic 6.0特殊的运行特征的应用程序,例如娱乐游戏,可能将需要一些修改,因为Visual Basic.NET具有不同的运行特性。在Visual Basic.NET对游戏的支持,使你能够使用Microsoft DirectX 7或GDI新版本。GDI+引入了许多新特点,包括Alpha绑定对2-D图形支持既反别名和对印象文件格式的支持。

数据

Visual Basic 6.0提供几种数据访问类型:

  • ActiveX(ADO)数据对象
  • 远程数据对象(RDO)
  • 数据访问对象(DAO)

Visual Basic.NET引入了增强的ADO版本,称为ADO.NET。ADO.NET把目标定位于离散数据并在分布式应用程序中提供改进的ADO。ADO.NET为Windows窗体的控件提供读写数据绑定,为网页窗体提供只读数据绑定。

DAO, RDO, 和ADO经过略微的修改在Visual Basic.NET的代码中仍然可以使用的(本文稍后在语言章节中会提到)。然而,Visual Basic.NET中不支持DAO 和RDO将数据绑定到控件,数据控件或RDO用户连接。我们建议,如果你的应用程序包括RDO和DAO数据绑定控件,你要么不用更新,要么在更新到Visual Basic.NET之前更新到DAO和RDO数据绑定到ADO,因为ADO数据绑定在Windows 窗体中支持ADO数据绑定。关于如何做请参考Visual Basic 6.0的帮助文件。

总之,我们建议在Visual Basic 6.0的项目中使用ADO。


更新

当你的代码在更新时,Visual Basic.NET产生一个更新的项目,并为你产生必要的语言和对象的转变。以下章节中为你提供一些例子,说明如何更新你的代码。

变体到对象

在Visual Basic早期版本中支持Variant 的数据类型,它可以分配给简单的任何类型(除了定长字符串),空字符串,零和Null.在Visual Basic.NET中,变体和对象的功能合并为一种新的数据类型:对象。对象数据类型分配简单的数据类型,空数据,无,和Null,甚至一个指向对象的指针。

当你的项目更新到Visual Basic.NET时,所有声明为Variant的变量改变为对象,同时,在代码插入编辑器的时候,关键字Variant也由Object代替了。

整型到短整型

在Visual Basic.NET中,16位的数字现在成为Short(短整型),32为的数字被成为Integer(整型)(64位成为Long(长整型)。当你的项目在更新时,这些数据类型改变了。

Dim x As Integer
dim y as Long

被更新为:

Dim x As Short
dim y as Integer

属性语法

Visual Basic.NET中为属性引入了更直观的语法,划为Get 和Set类。你的属性描述更新有如如下例子:

Property Get MyProperty() As Integer
    MyProperty = m_MyProperty
End Property
Property Let MyProperty(NewValue As Integer)
    m_MyProperty = NewValue
End Property

更新为:

Property MyProperty() As Short
    Get
        MyProperty = m_MyProperty
    End Get
    Set
        m_MyProperty = Value
    End Set    
End Property

Visual Basic窗体到Windows窗体

Visual Basic.NET有了一个新的窗体包,Windows窗体,它天然支持访问特性,并有一个本地菜单编辑器。你的Visual Basic窗体将被更新为Windows窗体。

图2. Windows 窗体放置的菜单编辑器. (单击图片可以看到更大的图象)

接口

在Visual Basic的早期版本中,公用类的接口通常是对用户是不可见的。在Visual Basic.NET中,在代码编辑器中可以查看并对其进行编辑。当你的项目在更新的时候,你可以选择是否为你的公共类自动产生接口声明。


更新报告和注释

你的项目更新之后,在你的项目中增加了一个更新报告,详细说明了在你更新的代码中需要修改的地方。另外,在你的代码中加入的注释警告你一些潜在地问题。这些注释在Visual Studio.NET的任务列报中列了出来。

图2. Windows 窗体放置的菜单编辑器. (单击图片可以看到更大的图象)

接口

在Visual Basic的早期版本中,公用类的接口通常是对用户是不可见的。在Visual Basic.NET中,在代码编辑器中可以查看并对其进行编辑。当你的项目在更新的时候,你可以选择是否为你的公共类自动产生接口声明。


更新报告和注释

你的项目更新之后,在你的项目中增加了一个更新报告,详细说明了在你更新的代码中需要修改的地方。另外,在你的代码中加入的注释警告你一些潜在地问题。这些注释在Visual Studio.NET的任务列报中列了出来。

图3. 在Visual Basic 代码中增加了更新注释,也增加了任务列表中

编程建议

这一节中为如何编写代码,才能使你的项目更新到 Visual Basic.NET之后需要做的修改最小化方面提出一些建议。

使用早期绑定

Visual Basic 6.0 和 Visual Basic.NET 都支持晚期绑定对象,其实际作法是,将一个变量声明为Object数据类型,然后在运行时刻为其分配一个实例。然而,在更新过程中,晚期绑定对象在解析缺省属性或在底层对象模块发生了变化并且属性,方法,和事件需要改变的时候,它就会引入一些问题。例如,假如你有一个带有标签为Lable1的窗体Form1,如下Visual Basic 6.0代码将标签设置为"SomeText":

Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"

在Visual Basic.NET Windows窗体中,Label控件的Caption属性现在叫做Text。当你的代码更新时,所有实例的Caption属性将全部转变为Text,但是由于晚期绑定的对象的类型不定的,即便是一些特性能够被翻译出来, Visual Basic不能检测到对象的类型。在这种情况下,你应该在代码更新完成之后,自己修改代码。

如果你用早期绑定对象来重新编写代码,它将自动更新:

Dim o As Label
Set o = Me.Label1
o.Caption = "SomeText"

你应该在可能的地方声明任何合适的对象类型的变量,而不是简单的生命为对象(Object)数据类型。

当在你的Visual Basic 6.0代码中使用了对象和变体变量,当你在分配变量,对变量执行操作或者向一个函数传递一个变量时,我们建议你使用明确的转化。例如,'+'操作符的目的在下面代码中不很直接:

Dim Var1 As Variant
Dim Var2 As Variant
Dim Var3 As Variant
Var1 = "3"
Var2 = 4
Var3 = Var1 + Var2   'UNCLEAR: What is the intention?

Var1和 Var2是作为字符串相加呢,还是整数相加呢?

上面例子在Visual Basic.NET中可能会产生运行错误。使用明确地转化重新编写最后一行代码,以保证代码工作:

Var3 = CInt(Var1) + CInt(Var2)   'GOOD: explicit conversion

Visual Basic.NET 支持基于参数类型的重载函数。例如:

Environ( Expression As Integer) As String
Environ( Expression As String ) As String 

Visual Basic.NET根据参数决定调用哪一个函数。如果你传递一个整数参数给Environ(),将调用整数版本的函数;如果你传递字符串,则调用的是字符串版本的函数。传递变体或对象数据类型给重载函数可能会引起编译或运行错误。使用直接的转化,如下例子,在你的代码更新之后在Visual Basic.NET正常工作。

Dim a As String
Dim v As Variant
v = "Path"
a = Environ(CStr(v))   'GOOD: explicit conversion

明确转换晚期绑定对象的是一个良好编程习惯。这样使得代码的目的很容易判断,也很容易使你的代码移植到Visual Basic.NET 中。

使用Date存储日期

早期版本的Visual Basic支持使用Double数据类型来存储和处理日期。在Visual Basic.NET中你不应该这么做了,因为数据是不能作为Double来存储的。例如,如下代码在Visual Basic 6.0中使有效的,但是在Visual Basic.NET中可能会引起编译错误。

Dim dbl As Double
Dim dat As Date
dat = Now
dbl = dat      'VB.NET: Double can't be assigned to a date
dbl = DateAdd("d", 1, dbl)   'VB.NET: Can't use Double in date functions
dat = CDate(dbl)   'VB.NET: CDate can't convert double to date

.NET平台提供ToOADate 和FromOADate函数来完成双精度数据和日期型数据间的转化。然而,当你的项目更新到Visual Basic.NET时,决定那些用双精度数据来存储日期的代码的含义就变得非常困难了。为了避免在Visual Basic.NET中修改你的代码,请使用日期型数据类型来存储日期。

处理无参缺省特性

在Visual Basic 6.0中,许多对象显示出缺省的特性,在编程中省略它们是一种编程捷径。例如TextBox有一个缺省的特性Text,所以缺省写法:

MsgBox Form1.Text1.Text

你可以使用简单方法:

MsgBox Form1.Text1

缺省属性的判断是在代码编译时完成的。另外,你可以按照如下例子使用晚期绑定对象的缺省属性:

Dim obj As Object
Set obj = Form1.Text1
MsgBox obj

在晚期绑定例子中,缺省属性在运行时才作决定的,MsgBox显示的TextBox的缺省属性的值是Text1。

Visual Basic.NET不支持无参缺省属性,从而也不支持这种编程捷径。当你的项目更新时,Visual Basic.NET解析这些无参缺省属性,但是在运行时才能解析的晚期绑定控件是不能自动解析的。在这些情况下,你将不得不自己来修改代码。更麻烦的是许多库中使用了_Default来实现缺省属性的。_Default就像是一个代理,将调用传递到真正的缺省属性。所以,当你的项目在更新时,一些缺省的属性将由_Default解决。这些代码能够正常工作,但是这在理解上不如直接使用实际的属性。由于这些原因,应试着去避免在Visual Basic 6.0中使用无参缺省属性。而写为:

Dim obj As Object
Set obj = Me.Text1
MsgBox obj   'Relying on default property
MsgBox Me.Text1   'Relying on default property

直接使用:

Dim obj As Object
Set obj = Me.Text1
MsgBox obj.Text   'GOOD: Default property is resolved
MsgBox Me.Text1.Text   'GOOD: Default property is resolved

在Visual Basic.NET不支持无参缺省属性,然而却支持有参缺省属性。为了理解这两种类型的不同之处,认为有参数的缺省属性总是有一个索引。下面是ADO recordset 的缺省属性:Fields集的一个例子。代码:

Dim rs As ADODB.Recordset
rs("CompanyName") = "SomeCompany"
rs!CompanyName = "SomeCompany"

实际是如下代码的简单写法:

Dim rs As ADODB.Recordset
rs.Fields("CompanyName").Value = "SomeCompany"
rs.Fields!CompanyName.Value = "SomeCompany"

在这种情况下,Fields属性是有参数的,所以在Visual Basic.NET中,这种用法是有效的。然而,Fields的缺省属性是Value是无参的,所以在Visual Basic.NET要正确的用法是:

Dim rs As ADODB.Recordset
rs("CompanyName").Value = "SomeCompany"
rs!CompanyName.Value = "SomeCompany"

这个例子和大多数其它缺省属性在你的项目更新时就决定了,所以一个好的编程习惯就是在Visual Basic 6.0中解析进行。然而,你应该避免使用对象Object和变体Variant数据类型的缺省属性,因为他们在你的更新项目中不能被解析,而需要你亲自修改代码。

避免Null的传递

Visual Basic的早期版本支持Null传递。Null传递支持这个假设:当Null在某个表达式中使用了,而这个表达式的结果就是Null自己。在下面的例子中所有的结果V都是Null。

Dim V
V = 1 + Null
V = Null + Right$("SomeText", 1)
V = Right("SomeText", 0)

Null的传递在Visual Basic.NET中不能支持。在Visual Basic.NET中1+Null将产生一个类型不匹配的错误。另外,当Visual Basic 6.0具有两个版本的 Left函数--Left$返回一个字符串,Left返回一个变体,它可能是Null--而在Visual Basic.NET仅有一个版本Left,它总是返回一个字符串。

为了在Visual Basic 6.0 和 Visual Basic.NET中兼容,你应该总是协代码测试Null而不是依赖Null的传递。

Null传递在数据库应用程序中常常使用的,这时你需要测试数据库的字段是否包含Null。在这种情况下,你应该用函数IsNull()来测试结果并执行适当的操作。

涉及到一个相关的问题是用Null连接一个字符串。当对数据库对象编程时,将一个空字串连接到字段上来保证Null的值强迫为空字符串,这种操作是很常见的。例如:

MyString = rs!Field1 & ""

这种技术在Visual Basic.NET中也是

0 0

相关博文

我的热门文章

img
取 消
img