Ejecutar SP desde función vbscript [SOLUCIONADO]

En ambientes de desarrollo web con enfoque en tecnologías heredadas, como es el caso de Active Server Pages (ASP) con VBScript, el manejo de procedimientos almacenados, conocidos también como Stored Procedures (SP), sigue siendo de gran relevancia en un mundo dominado por bases de datos complejas y sistemas heredados. A lo largo de este artículo, abordaremos de manera detallada cómo invocar y ejecutar SP en el contexto de un script de servidor escrito en VBScript y cómo manejar sus potenciales resultados.

## Invocación de Procedimientos Almacenados con Classic ASP y VBScript

Al hablar de ASP clásico, descrito a veces como Classic ASP, lo hacemos refiriéndonos a un predecesor de frameworks más modernos como ASP.NET. Sin embargo, las capacidades de ASP para operar en conjunto con lenguajes como VBScript han creado aplicaciones duraderas que a día de hoy requieren mantenimiento y desarrollo continuo.

Los procedimientos almacenados representan una herramienta robusta dentro de la gestión de bases de datos, especialmente en sistemas como Microsoft SQL Server. Estos permiten una ejecución de consultas SQL y operaciones más complejas encapsuladas en una llamada única desde el entorno de aplicación.

### Estructuración de una Función de VBScript para Llamados de SP

Específicamente en VBScript, un lenguaje interpretado asociado usualmente con ASP, la ejecución de un SP se maneja típicamente a través de un objeto `Command` de ADO (ActiveX Data Objects). El siguiente fragmento de código proporciona un esbozo genérico de cómo una función básica en VBScript podría estructurarse para admitir la ejecución de un procedimiento almacenado:

vbscript
Function EjecutarStoredProcedure(nombreSP, parametros)
Dim conn, cmd, rs
Set conn = Server.CreateObject(“ADODB.Connection”)
Set cmd = Server.CreateObject(“ADODB.Command”)

conn.Open “ConnectionString”

With cmd
Set .ActiveConnection = conn
.CommandText = nombreSP
.CommandType = adCmdStoredProc ‘ Constante para indicar que se va a ejecutar un SP

‘ Añadir parámetros si son necesarios
For Each param In parametros
.Parameters.Append .CreateParameter(param.Name, param.Type, param.Direction, param.Size, param.Value)
Next

Set rs = .Execute
End With

‘ Manejar los resultados obtenidos
If Not rs.EOF Then
‘ Operaciones con el recordset
End If

‘ Limpieza y cierre de objetos
rs.Close
Set rs = Nothing
Set cmd = Nothing
conn.Close
Set conn = Nothing

EjecutarStoredProcedure = rs ‘ o cualquier otro valor que desee devolver
End Function

Note que en esta función, la cadena `”ConnectionString”` deberá ser reemplazada con la información válida de conexión a su base de datos. Además, es crucial manejar adecuadamente los parámetros que el SP requiera, estableciendo correctamente su nombre, tipo de dato, dirección (entrada, salida), tamaño y valor.

### Gestión de Parámetros en la Ejecución de Procedimientos Almacenados

El uso de parámetros en un SP ejecutado desde ASP con VBScript no solo introduce un mecanismo de transferencia de datos hacia la base de datos sino que también brinda una capa extra de seguridad al evitar inyecciones SQL. Veamos cómo se construiría un conjunto de parámetros para ser utilizados en la función previamente definida:

vbscript
Dim nombreSP, parametros, param

nombreSP = “spMiProcedimientoAlmacenado”
Set parametros = CreateObject(“Scripting.Dictionary”)

‘ Asumiendo que el SP requiere un parámetro de entrada “Id” con un valor específico
Set param = CrearParametro(“Id”, adInteger, adParamInput, , 12345)
parametros.Add “Id”, param

‘ Llamada a la ejecución
Call EjecutarStoredProcedure(nombreSP, parametros)

La función `CrearParametro` deberá ser implementada de acuerdo a las necesidades específicas de la aplicación, pero en línea general, tendría una estructura que determina los atributos necesarios para un objeto `Parameter` de ADO.

### Ejemplo Práctico de Call a SP en VBScript

Para entender mejor cómo todo esto se integra en un escenario real de programación, supongamos que requerimos invocar un SP llamado `spActualizarInventario`, que actualiza la cantidad de productos en una tienda. Este SP requeriría dos parámetros: `IdProducto` y `CantidadNueva`. La implementación de la función dedicada a este fin podría verse como sigue:

vbscript
Function ActualizarInventario(IdProducto, CantidadNueva)
Dim nombreSP, parametros, paramId, paramCantidad

nombreSP = “spActualizarInventario”
Set parametros = CreateObject(“Scripting.Dictionary”)

‘ Creación de parámetros
Set paramId = CrearParametro(“IdProducto”, adInteger, adParamInput, , IdProducto)
parametros.Add “IdProducto”, paramId

Set paramCantidad = CrearParametro(“CantidadNueva”, adInteger, adParamInput, , CantidadNueva)
parametros.Add “CantidadNueva”, paramCantidad

‘ Ejecución del SP
Call EjecutarStoredProcedure(nombreSP, parametros)
End Function

Una vez más, note que las constantes como `adInteger` y `adParamInput` pertenecen al conjunto de constantes definidas por ADO y representan, respectivamente, un tipo de dato entero y la dirección de un parámetro de entrada. Estas tendrán que ser incluidas en su entorno de desarrollo para que sean reconocidas en tiempo de ejecución.

### Captura de Retorno y Manejo de Errores

Cuando se invoca a un SP, es probable que se espere una respuesta con datos, información de éxito o errores. La función podría, por ejemplo, implementar un sistema de captura de excepciones y manejo de errores. Además, dependiendo de la naturidad del SP, podría ser necesario trabajar con el objeto `RecordSet` retornado para extraer datos y trabajar con ellos dentro de la aplicación ASP:

vbscript
Function ObtenerDatosProducto(IdProducto)
Dim nombreSP, parametros, param, rs, datosProducto

nombreSP = “spObtenerDatosProducto”
Set parametros = CreateObject(“Scripting.Dictionary”)

Set param = CrearParametro(“IdProducto”, adInteger, adParamInput, , IdProducto)
parametros.Add “IdProducto”, param

On Error Resume Next ‘ Inicio del manejo de errores
Set rs = EjecutarStoredProcedure(nombreSP, parametros)

If Err.Number = 0 And Not rs Is Nothing Then
If Not rs.EOF Then
datosProducto = rs.GetRows() ‘ Obtener datos en un arreglo
End If
rs.Close
Else
‘ Manejo de errores específicos
Response.Write “Error #” & Err.Number & “: ” & Err.Description
End If

On Error GoTo 0 ‘ Finalizar manejo de errores

Set rs = Nothing
Set parametros = Nothing

ObtnerDatosProducto = datosProducto
End Function

Este fragmento de código muestra cómo se puede usar el retorno de un SP para generar una matriz con los datos solicitados del producto, manejando a su vez los posibles errores durante la ejecución y cierre del recordset.

### Conclusiones Parciales y Observaciones adicionales

Es crucial mencionar que, durante la invocación de procedimientos almacenados utilizando ASP y VBScript, el rendimiento puede verse impactado significativamente por la manera en que estructuramos nuestras llamadas y manejamos los datos recibidos. Por ello, es recomendable prestar atención a las buenas prácticas de desarrollo, como la correcta gestión de recursos y el uso de transacciones cuando sea pertinente, para mantener la integridad de la base de datos y optimizar la ejecución del código.

Además, dado que estas tecnologías se consideran en muchos casos obsoletas, es esencial documentar detalladamente el código y asegurar su legibilidad para futuras revisiones. Es probable que personal con experiencia en sistemas más nuevos necesiten entender y trabajar con este código, por lo que mantener un alto estándar en la calidad del mismo es de suma importancia.

### Mantenimiento sostenible en un marco heredado

La capacidad para trabajar efectivamente con Classic ASP y VBScript requiere una entendimiento profundo de sus principios, así como de las prácticas recomendadas en cuanto a acceso y manejo de datos. Al ejecutar procedimientos almacenados dentro de nuestra aplicación web ASP, estamos participando en una práctica que, aunque parezca anticuada, todavía es altamente relevante en la industria debido a la presencia continua de sistemas legacy.

El desafío está en cómo innovar y mantener al mismo tiempo, entendiendo que mientras nuevas tecnologías emergen y se establecen, hay siempre un fuerte contingente de sistemas que necesitan ser mantenidos en su stack tecnológico original. La ejecución de SP con VBScript es una habilidad que, bien dominada, garantiza que estos sistemas puedan seguir siendo efectivos, seguros y adaptativos a las necesidades cambiantes de la empresa.

Este tipo de conocimiento especializado continuará siendo valioso despite the significant changes in the industry y the constant evolution of programming paradigms. Con una fundamentación entre la funcionalidad clásica y la comprensión de los nuevos desarrollos en el campo de la informática, los desarrolladores pueden bridar soluciones óptimas sin importar el entorno de desarrollo en el que operen.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad