2008-08-25 88 views
7

tengo un par de preguntas relacionadas con VBScript y ASP clásico:VBScript/ASP clásico

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

  2. ¿Cuáles son las mejores prácticas en cuanto 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 & 3 son un tipo de preguntas gigantescas sobre el "agujero negro" que son demasiado generales, así que no creo que estoy esperando aprender todo lo que hay que saber sobre esas dos preguntas desde aquí.

+1

Tiene mis más sinceras condolencias. –

Respuesta

20

ADO es una forma excelente 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 usted está volviendo un campo MEMO en un conjunto de registros, asegúrese de que sólo selecciona un campo MEMO a la vez, y asegúrese de que es el último columna en su consulta. De lo contrario, te encontrarás con problemas. (Referencia: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html)

2

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

1) Puede utilizar componentes COM desarrollados en Visual Basic 6 o similar para separar algo de su lógica de negocio 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. Echa un vistazo a esto: http://www.4guysfromrolla.com/webtech/092399-1.shtml

3

Haciendo eco de algunas ideas y la adición de unos pocos de mi propia:

1) La mejor manera de acceder a la base de datos que abstraer de que fuera en un componente COM de algún tipo que se usa desde VBScript.

2) Si realmente lo desea, 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ías 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.

+1

Re 3: claro que sí, y hay muchos recursos que brindan ayuda (como SO). Puede que no lo haya usado en años, pero eso no significa que otras personas todavía no lo estén usando, independientemente de la sabiduría de hacerlo. (Beneficio de algunos trabajos por contrato: entrada y salida rápidamente. Desafío de algún trabajo por contrato: necesidad de proporcionar una solución dentro del marco existente) –

1

camino camino de vuelta en el día en VBScript/ASP estaban todavía bien trabajé en una empresa de servicios públicos con un envrionment muy mezclada DB, he usado para jurar en este sitio web: http://www.connectionstrings.com/

@michealpryor lo hizo bien

1

He estado trabada sobre la base de 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 es mi blog):
http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2) No he visto nada en relación con MVC dirigidos específicamente a ASP, pero estoy muy interesado porque es algo que estoy teniendo un momento difícil envolviendo mi cabeza. 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 lenguaje que tenga más funcionalidad incorporada. Al principio, algunas cosas pueden parecer que faltan, pero a menudo solo es cuestión de escribir muchas más líneas de código que usted Acostumbrado a.

+0

@Fionnuala ¿vínculo roto? wayback it: http://web.archive.org/web/20071221011242/http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/ – frumbert

8

Recuerde programa en el idioma en lugar de programa en el mismo. El hecho de que esté utilizando un conjunto limitado de herramientas no significa que tenga que programar como si fuera 1999.

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

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á la siguiente: INC-APP-CommonIncludes.asp - Esto incluye cosas como mis bibliotecas generales (Acceso a la base de datos, funciones de archivo, etc.) y configura la seguridad e incluye cualquier archivo de configuración (como cadenas de conexión, ubicaciones de directorio, etc.) y clases comunes (Usuario, Permiso, etc.) y está incluido en cada página.

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

Módulos/Nombre del módulo/Pantalla/INC-DIS-Page.asp - Muestra la configuración de datos en la página .vb.asp.

1

También para el acceso de base de datos que tienen un conjunto de funciones - GetSingleRecord, GetRecordset y UpdateDatabase que tiene una función similar a lo que Michael menciona anteriormente

16

tuve que caminar lejos de mi PC cuando vi la primera respuesta, y estoy todavía 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 utilizando 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 proporcionar a alguien nuevo en la codificación ASP, ya que pensarán que es la forma profesional de codificar 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 ninguna 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 provocar 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 esta - ¿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 muchas personas que sugieren movimiento a .NET - con buenas prácticas de codificación de un sitio ASP se puede escribir que es fácil de mantener, escalable y rápido, pero hay que asegurarse de utiliza todos los métodos disponibles para que su código sea 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.

+0

1. poner una conexión dentro de la secuencia de comandos no significa que la cadena de conexión está expuesta al visitante. 2. Usar el procedimiento de tienda significa perder flexibilidad. También utilizando sql en línea puede evitar la inyección sql. –

+2

1. Si su servidor web es hackeado o accedido por cualquier método, entonces su base de datos ahora también es un objetivo abierto gracias al nombre de usuario y la contraseña que están ahí en el código. –

+0

2. Yo también solía creer eso, cuando comencé a usar ASP hace años, pero es una visión muy ingenua y realmente aumentan el código y la eficiencia del servidor (almacenamiento en caché de consultas = datos más rápidos), formalizan los procesos de desarrollo (asegurando tipos de datos correctos, etc.) y agregan flexibilidad (es más fácil cambiar el front-end o tener múltiples formas de acceder a los datos). 3. Sí, puede evitar la inyección SQL utilizando SQL en línea, pero ¿por qué agregar trabajo para usted cuando hay un método probado que cualquier desarrollador que use MS-SQL puede usar para obtener y devolver datos de manera eficiente y segura? –

2

Estoy de acuerdo con @Cirieno en que la respuesta seleccionada no sería aconsejable usar 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, prefiero 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.

3

AX - Asp Xtreme La evolución es un framework MVC para ASP clásico

Hay algunos intentos de hacer los marcos de prueba para asp: aspUnit es buena, pero ya no se mantiene.

Vi un ejemplo de cómo hacer tu propio unos meses atrás. El ejemplo usó nUnit para llamar funciones contra el sitio web para la prueba automática. Creo que lo obtuve here (mi línea está marcada por borked así que no puedo verificar)

+0

Impresionante. Si todavía trabajara en ese trabajo, sería feliz. :-) –