sql-server model-view-controller asp-classic vbscript

sql server - VBScript/ASP Classic



sql-server model-view-controller (10)

Tengo un par de preguntas sobre VBScript y ASP Classic:

  1. ¿Cuál es la forma preferida de acceder a una base de datos de MS SQL Server en VBScript / ASP?

  2. ¿Cuáles son las mejores prácticas con respecto a separar el modelo de la vista del controlador?

  3. ¿Alguna otra cosa que deba saber sobre VBScript o ASP?

Si no lo ha notado, soy nuevo en la codificación de VBScript. Me doy cuenta de que los números 2 y 3 son un tipo de preguntas gigantescas sobre el "agujero negro" que son demasiado generales, así que no piensen que estoy esperando aprender todo lo que hay que saber sobre esas dos preguntas desde aquí.


En el número 2, creo que tienes algunas opciones ...

1) Puede usar componentes COM desarrollados en VB6 o similares para separar parte de su lógica comercial de su UI.

2) Puede crear clases en VBScript. No existe un concepto de herencia y otras funciones más avanzadas faltan en la implementación, pero puede encapsular la lógica en clases que ayuda a reducir la capacidad de espaciado de su aplicación. Mira esto: http://www.4guysfromrolla.com/webtech/092399-1.shtml


Haciendo eco de algunas ideas y agregando algunas de las mías:

1) La mejor forma de acceder a la base de datos sería abstraer eso en un componente COM de algún tipo al que acceda desde VBScript.

2) Si realmente quisiera, podría escribir el controlador en VBScript y luego acceder a eso en la página. Se parecería a un patrón de controlador de página y no a un controlador frontal que vería en ASP.NET MVC o MonoRail

3) ¿Por qué te estás haciendo esto a ti mismo? La mayoría de las herramientas necesarias para hacer este tipo de trabajo ya no están disponibles.


camino atrás en el día cuando VBScript / ASP todavía estaban bien Trabajé en una empresa de servicios públicos con un entorno de DB muy variado, solía jurar por este sitio web: http://www.connectionstrings.com/

@michealpryor lo hizo bien


ADO es una excelente manera de acceder a una base de datos en VBScript / Classic ASP.

Dim db: Set db = Server.CreateObject("ADODB.Connection") db.Open "yourconnectionstring -> see connectionstrings.com" Dim rs: Set rs = db.Execute("SELECT firstName from Employees") While Not rs.EOF Response.Write rs("firstName") rs.MoveNext Wend rs.Close

Más información aquí: http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

Una advertencia es que si está devolviendo un campo MEMO en un conjunto de registros, asegúrese de seleccionar solo un campo MEMO a la vez, y asegúrese de que sea la ÚLTIMA columna en su consulta. De lo contrario, te encontrarás con problemas. (Referencia: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html )


Me he quedado atrapado construyendo sobre ASP, y siento tu dolor.

1) La mejor manera de consultar en SQL Server es con consultas parametrizadas; esto ayudará a prevenir ataques de inyección SQL.

Tutorial (no mi blog):
http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2) No he visto nada sobre MVC específicamente orientado a ASP, pero definitivamente estoy interesado porque es algo que me cuesta mucho trabajo. Por lo general, intento al menos contener cosas que son similares a las vistas y cosas que son similares a las de un controlador en funciones separadas. Supongo que podrías escribir código en archivos separados y luego usar el lado del servidor para volver a unirlos.

3) Probablemente provenga de un idioma que tenga más funcionalidad incorporada. Al principio, puede parecer que faltan algunas cosas, pero a menudo solo se trata de escribir muchas más líneas de código de las que está acostumbrado.


También para el acceso a la base de datos tengo un conjunto de funciones: GetSingleRecord, GetRecordset y UpdateDatabase, que tiene una función similar a la que menciona Michael anteriormente.


Tuve que alejarme de mi PC cuando vi la primera respuesta, y todavía estoy angustiado de que haya sido aprobado por tanta gente. Es un ejemplo espantoso del peor tipo de código ASP, del tipo que garantizaría que su sitio sea inyectable mediante SQL y, si continúa usando este código en el sitio, se puede piratear a una pulgada de su vida útil.

¡Este NO es el tipo de código que debería darle a alguien nuevo en la codificación ASP, ya que pensarán que es la forma profesional de codificación en el idioma!

  1. NUNCA revele una cadena de conexión en su código, ya que contiene el nombre de usuario y la contraseña de su base de datos. Use un archivo UDL en su lugar, o al menos una constante que pueda declararse en otro lugar y usarse en todo el sitio.

  2. Ya no hay una buena excusa para usar SQL en línea para cualquier operación en un entorno web. Use un procedimiento almacenado: los beneficios de seguridad no pueden enfatizarse lo suficiente. Si realmente no puede hacerlo, mire los parámetros en línea como la segunda mejor opción ... Inline SQL dejará su sitio abierto a la inyección de SQL, la inyección de malware y el resto.

  3. La declaración tardía de las variables puede llevar a una codificación descuidada. Use "opción explícita" y declare las variables en la parte superior de la función. Esta es la mejor práctica en lugar de una verdadera WTF, pero es mejor comenzar cuando quieras continuar.

  4. No hay pistas sobre la base de datos en cuanto a qué tipo de conexión es esto: ¿es solo para lectura o el usuario estará actualizando registros? La conexión se puede optimizar y la base de datos puede manejar el bloqueo de manera muy eficiente si se le dice efectivamente qué esperar.

  5. La conexión de la base de datos no se cierra después de su uso, y el objeto del conjunto de registros no se destruye por completo.

ASP sigue siendo un lenguaje fuerte, a pesar de que mucha gente sugiere mudarse a .NET. Con buenas prácticas de codificación, se puede escribir un sitio ASP fácil de mantener, escalable y rápido, pero TIENE que asegurarse de usar todos los métodos disponibles para hacer su código eficiente, TIENE que mantener buenas prácticas de codificación y un poco de previsión. Un buen editor también me ayudará, prefiriendo PrimalScript, que considero más útil para un codificador ASP que cualquiera de los últimos productos MS que parecen estar muy centrados en .NET.

Además, ¿de dónde es un campo "MEMO"? ¿Es esta nomenclatura de acceso, o tal vez MySQL? Pregunto como tales campos se han llamado campos TEXT o NTEXT en MS-SQL durante una década.


Estoy de acuerdo con @Cirieno en que la respuesta seleccionada no sería prudente usarla en el código de producción, por todos los motivos que menciona. Dicho esto, si tiene solo un poco de experiencia, esta respuesta es un buen punto de partida en cuanto a los conceptos básicos.

En mi experiencia ASP, preferí escribir mi capa de acceso a la base de datos utilizando VB, compilando hasta una DLL y haciendo referencia a la DLL a través de VBScript. Difícil de depurar directamente a través de ASP, pero era una buena manera de encapsular todos los códigos de acceso a datos lejos del código ASP.


AX - Asp Xtreme Evolution es un framework MVC para ASP classic

Hay algunos intentos de crear marcos de prueba para asp: aspUnit es bueno, pero ya no se mantiene.

Vi una muestra sobre cómo hacer tu propia hace unos meses. El ejemplo usó nUnit para llamar funciones contra el sitio web para realizar pruebas automáticas. Creo que lo conseguí aquí (mi línea está bordada, así que no puedo verificar)


Recuerde programar en el idioma en lugar de programar en él. Solo porque estés usando un conjunto de herramientas limitado no significa que tengas que programar como si fuera 1999.

Estoy de acuerdo con JasonS sobre las clases. Es cierto que no puedes hacer cosas como la herencia, pero puedes fingir fácilmente

Class Dog Private Parent Private Sub Class_Initialize() Set Parent = New Animal End Sub Public Function Walk() Walk = Parent.Walk End Function Public Function Bark() Response.Write("Woof! Woof!") End Function End Class

En mis proyectos, una página ASP tendrá lo siguiente: INC-APP-CommonIncludes.asp. Esto incluye cosas como mis bibliotecas generales (acceso a bases de datos, funciones de archivo, etc.) y configura la seguridad e incluye cualquier archivo de configuración (como cadenas de conexión, directorio ubicaciones, etc.) y clases comunes (Usuario, Permiso, etc.) y está incluido en cada página.

Modules / ModuleName / page.vb.asp - Algo así como un código detrás de la página. Incluye clases BO, BLL y DAL específicas de la página y configura los datos necesarios para la página / recibe los datos del formulario enviado, etc.

Módulos / ModuleName / Display / INC-DIS-Page.asp - Muestra la configuración de los datos en page.vb.asp.