Cambios en el lenguaje de Visual Basic
ASP.NET no admite Visual Basic Scripting Edition (VBScript), pero es compatible con Visual Basic .NET, que es muy similar a VBScript. Sin embargo, la mayor parte de las páginas ASP existentes que contienen VBScript se tendrán que volver a escribir en cierta medida para poderse ejecutar en ASP.NET.
Entre los cambios de Visual Basic específicos que pueden afectar a las páginas ASP existentes donde se incluye código VBScript se encuentran los relativos a la sintaxis de Visual Basic y al modelo de subprocesos. En las secciones siguientes explican los principales cambios con los que habrá que lidiar cuando se conviertan aplicaciones VBScript ASP a aplicaciones ASP.NET mediante Visual Basic .NET.
Sintaxis de Visual Basic
En la lista siguiente se describen los cambios específicos de Visual Basic .NET que pueden hacer necesario modificar las aplicaciones de Visual Basic o VBScript existentes.
Ya no existe el tipo de datos Variant. Se ha reemplazado por el tipo Object. Los tipos Object se deben convertir explícitamente a otros tipos de datos primitivos.
Ahora se deben colocar paréntesis alrededor de la lista de parámetros en todas las llamadas a métodos, incluso en el caso de los que no aceptan parámetros. Por ejemplo:
If Flag = False Then DisplayMessage()End If
De forma predeterminada, los argumentos se pasan por valor, no por referencia como en las anteriores versiones de Visual Basic. Si desea pasar argumentos por referencia, debe utilizar la palabra clave ByRef delante del argumento, como en el ejemplo siguiente:
Call MyFunction(argbyvalue, ByRef argbyref)
Set y Let ya no se admiten. Los objetos se pueden asignar con una simple operación de asignación:
Object1 = Object2
Para establecer una propiedad predeterminada de un objeto, debe hacer referencia explícitamente a la propiedad. Por ejemplo:
Object1.Name = Object2.Name
La mayoría de los objetos ya no tienen propiedades predeterminadas supuestas. Se debe hacer referencia explícitamente a todas las propiedades que no están indizadas. En las versiones anteriores de Visual Basic, si deseaba tener acceso a la propiedad predeterminada de un objeto se podía especificar el nombre de la propiedad o no. Por ejemplo, si deseaba tener acceso a la propiedad Text de un control TextBox podía utilizar el siguiente código:
Dim str As String = TextBox1
Porque la propiedad predeterminada del control TextBox era Text. Al utilizar Visual Basic .NET, el código anterior se debe modificar de la siguiente forma:
Dim str As String = TextBox1.Text
Si se admitieran propiedades predeterminadas en Visual Basic .NET, una expresión como
Object1 = Object2
sería ambigua, ya que no quedaría claro si
Object2
se refiere a un objeto en su totalidad o sólo a la propiedad predeterminada de dicho objeto.Otro ejemplo de este cambio es que se debe hacer referencia explícitamente a la propiedad Value del objeto Field al recuperar campos de Recordset (
RS
en el código siguiente):Response.Write (RS("au_fname").Value) Indexed default properties are supported if the class contains a definition for an indexed property. The following expression is valid because the indexer makes it clear that an indexed property, not the object itself, is being referenced: MyProperty = Object2(6)
El tipo de datos Integer ahora es de 32 bits; el tipo de datos Long es de 64 bits.
Los tipos de datos siempre se deben convertir explícitamente en otros tipos de datos. Por ejemplo, convierta siempre los valores numéricos a String si espera una cadena:
Response.Write("The count is " & CStr(count))
Las variables creadas en la misma instrucción Dim serán del mismo tipo. Por ejemplo, en Visual Basic .NET, la instrucción Dim
Dim i, j, k As Integer
crea cada uno de los tres objetos (i
,j
yk)
como Integer. En las versiones anteriores de Visual Basic se crearían las variablesi
yj
como Variants yk
como Integer.La sintaxis de las propiedades de clase ha cambiado y ya no incluye Property Let, Property Get ni Property Set. La nueva sintaxis de las propiedades es similar a la de C#.
Public Property ThisProperty As String Get ThisProperty = InternalValue End Get Set InternalValue = value End Set End Property
Al concatenar cadenas, el operador & siempre debe encontrarse entre espacios en blanco. VBScript permitía escribir
a&b&c
; en Visual Basic . NET esto debe escribirse comoa & b & c
para evitar un error de sintaxis.Todas las instrucciones If deben construirse en varias líneas. Con VBScript era posible escribir una instrucción If de una sola línea, como
If x Then y.
En Visual Basic .NET, esto debe escribirse de la siguiente forma:If x Then y End if
Option Explicit está activada de manera predeterminada, de modo que todas las variables deben declararse para que se puedan utilizar.
Subprocesamiento
ASP.NET utiliza el modelo de subproceso MTA (Multithreaded Apartment, de apartamento multiproceso) en lugar de STA (Single-Threaded Apartment, de un único proceso). Los componentes COM utilizados en las aplicaciones de ASP.NET también deben utilizar el modelo MTA para lograr el mejor rendimiento. Para obtener información sobre cómo utilizar componentes STA en un entorno MTA, vea Compatibilidad del componente COM.
Si utiliza ADO.NET desde aplicaciones de ASP.NET, los componentes de ADO.NET deben configurarse como de subprocesamiento libre (mediante el modelo de subprocesamiento Both). No hay que hacer nada para cambiar el modelo de subproceso; los programas de instalación de .NET Framework y Visual Studio .NET cambian automáticamente el modelo de subproceso de ADO a Both cuando registran Aspnet_isapi.dll.
Puede configurar ADO.NET para que utilice el modelo de subprocesamiento libre si importa los datos siguientes del Registro. Para modificar el Registro, copie estos datos a un archivo REG (como Adofre.reg) e impórtelo mediante el programa Regedit.exe (por ejemplo, Regedit /s Adofre.reg)
.
La siguiente información del Registro se incluye en el archivo Adofre15.reg en los sistemas Windows 2000 y Windows Server 2003. El archivo por lotes Makfre15.bat actualiza el Registro con la información de Adofre15.reg. Ambos archivos se encuentran en Archivos de programa\Archivos comunes\System\ado\.
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000507-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0000050B-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000535-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000541-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Both"
Si no tiene previsto utilizar ADO.NET desde aplicaciones de ASP.NET, puede utilizar el modelo de subprocesamiento de apartamentos para mejorar el rendimiento de ADO.NET con otras aplicaciones, como las creadas con Visual Basic versión 6. Puede configurar el subproceso de apartamentos si importa los siguientes datos del Registro. Para modificar el Registro, copie estos datos a un archivo REG (como Adoapt.reg) e impórtelo mediante el programa Regedit.exe.
La siguiente información del Registro se incluye en el archivo Adoapt15.reg en los sistemas Windows 2000 y Windows Server 2003. El archivo por lotes Makapt15.bat actualiza el Registro con la información de Adoapt15.reg. Ambos archivos se encuentran en Archivos de programa\Archivos comunes\System\ado\.
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000507-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0000050B-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000535-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00000541-0000-0010-8000-00AA006D2EA4}\InprocServer32]
"ThreadingModel"="Apartment"
Vea también
Programación en Visual Basic | Especificación del lenguaje de Visual Basic .NET | Migrar páginas ASP a ASP.NET