Question

J'ai quelques questions concernant VBScript et ASP Classic :

  1. Quelle est la méthode privilégiée pour accéder à une base de données MS SQL Server dans VBScript/ASP ?

  2. Quelles sont les meilleures pratiques en matière de séparation du modèle de la vue du contrôleur ?

  3. Y a-t-il d'autres choses que je devrais savoir sur VBScript ou ASP ?

Si vous ne l'avez pas remarqué, je suis nouveau dans le codage VBScript.Je me rends compte que les numéros 2 et 3 sont des sortes de questions géantes de type « trou noir » trop générales, alors ne pensez pas que je m'attends à apprendre tout ce qu'il y a à savoir sur ces deux questions à partir d'ici.

Était-ce utile?

La solution

ADO est un excellent moyen d'accéder à une base de données 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

Plus d'infos ici: http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

Une mise en garde est que si vous renvoyez un champ MEMO dans un jeu d'enregistrements, assurez-vous de ne sélectionner qu'UN seul champ MEMO à la fois et assurez-vous qu'il s'agit de la DERNIÈRE colonne de votre requête.Sinon, vous rencontrerez des problèmes.(Référence: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html )

Autres conseils

J'ai dû m'éloigner de mon PC lorsque j'ai vu la première réponse, et je suis toujours désolé qu'elle ait été approuvée par autant de personnes.C'est un exemple épouvantable du pire type de code ASP, celui qui garantirait que votre site est injectable par SQL et, si vous continuez à utiliser ce code sur l'ensemble du site, piratable à un pouce de sa durée de vie.

Ce n'est PAS le genre de code que vous devriez donner à quelqu'un qui découvre le codage ASP, car il pensera que c'est la manière professionnelle de coder dans ce langage !

  1. NE JAMAIS révéler une chaîne de connexion dans votre code car elle contient le nom d'utilisateur et le mot de passe de votre base de données.Utilisez plutôt un fichier UDL, ou à tout le moins une constante pouvant être déclarée ailleurs et utilisée sur tout le site.

  2. Il n'y a plus aucune bonne excuse pour utiliser le SQL en ligne pour toute opération dans un environnement Web.Utilisez une procédure stockée : les avantages en matière de sécurité ne sauraient être suffisamment soulignés.Si vous ne pouvez vraiment pas faire cela, considérez les paramètres en ligne comme une deuxième meilleure option...Inline SQL laissera votre site grand ouvert à l'injection SQL, à l'injection de logiciels malveillants et au reste.

  3. Une déclaration tardive des variables peut conduire à un codage bâclé.Utilisez "option explicit" et déclarez les variables en haut de la fonction.Il s'agit d'une bonne pratique plutôt que d'un véritable WTF, mais il est préférable de commencer comme vous avez l'intention de continuer.

  4. Aucune indication sur la base de données quant au type de connexion dont il s'agit : est-ce destiné à la lecture uniquement ou l'utilisateur mettra-t-il à jour les enregistrements ?La connexion peut être optimisée et la base de données peut gérer le verrouillage de manière très efficace si on lui indique efficacement à quoi s'attendre.

  5. La connexion à la base de données n'est pas fermée après utilisation et l'objet Recordset n'est pas entièrement détruit.

ASP est toujours un langage puissant, même si de nombreuses personnes suggèrent de passer à .NET : avec de bonnes pratiques de codage, un site ASP peut être écrit, facile à maintenir, évolutif et rapide, mais vous DEVEZ vous assurer d'utiliser toutes les méthodes disponibles pour créer votre code efficace, vous DEVEZ maintenir de bonnes pratiques de codage et un peu de prévoyance.Un bon éditeur sera également utile, ma préférence étant pour PrimalScript que je trouve plus utile pour un codeur ASP que n'importe lequel des derniers produits MS qui semblent être très centrés sur .NET.

Aussi, d'où vient un champ "MEMO" ?S'agit-il de la nomenclature Access, ou peut-être de MySQL ?Je demande car ces champs sont appelés champs TEXT ou NTEXT dans MS-SQL depuis une décennie.

Se souvenir de programme dans le langage plutôt que le programme.Ce n’est pas parce que vous utilisez un ensemble d’outils limité que vous devez programmer comme en 1999.

Je suis d'accord avec JasonS à propos des cours.C'est vrai qu'on ne peut pas faire des choses comme l'héritage, mais on peut facilement faire semblant.

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

Dans mes projets, une page ASP aura les éléments suivants :INC-APP-CommonIncludes.asp - Cela inclut des éléments tels que mes bibliothèques générales (accès à la base de données, fonctions de fichiers, etc.) et configure la sécurité et inclut tous les fichiers de configuration (comme les chaînes de connexion, les emplacements de répertoires, etc.) et les classes communes (utilisateur, autorisation , etc.) et est inclus dans chaque page.

Modules/ModuleName/page.vb.asp - Un peu comme un code derrière la page.Inclut les classes BO, BLL et DAL spécifiques à la page et configure les données requises pour la page/reçoit les données du formulaire soumis, etc.

Modules/ModuleName/Display/INC-DIS-Page.asp - Affiche les données configurées dans page.vb.asp.

Faisant écho à quelques idées et en ajoutant quelques-unes des miennes :

1) La meilleure façon d’accéder à la base de données serait de la résumer dans un composant COM auquel vous accédez à partir de VBScript.

2) Si vous le vouliez vraiment, vous pouvez écrire le contrôleur en VBScript, puis y accéder dans la page.Cela ressemblerait à un modèle de contrôleur de page et non à un contrôleur frontal que vous verriez dans ASP.NET MVC ou MonoRail.

3) Pourquoi tu te fais ça ?La plupart des outils nécessaires pour effectuer ce type de travail ne sont même plus disponibles.

AX - Asp Xtreme Evolution est un framework MVC pour ASP classique

Il existe quelques tentatives pour créer des frameworks de test pour asp :aspUnit est bon, mais n'est plus maintenu.

J'ai vu un exemple sur la façon de fabriquer le vôtre il y a quelques mois.L'exemple utilisait nUnit pour appeler des fonctions sur le site Web à des fins de tests automatiques.Je pense que je l'ai enlevé ici (ma ligne est en panne donc je ne peux pas vérifier)

Sur le numéro 2, je pense que vous avez quelques options...

1) Vous pouvez utiliser des composants COM développés en VB6 ou similaire pour séparer une partie de votre logique métier de votre interface utilisateur.

2) Vous pouvez créer des classes en VBScript.Il n'y a pas de concept d'héritage et d'autres fonctionnalités plus avancées manquent dans l'implémentation, mais vous pouvez encapsuler la logique dans des classes qui aident à réduire le caractère spatial de votre application.Regarde ça: http://www.4guysfromrolla.com/webtech/092399-1.shtml

Je suis d'accord avec @Cirieno, qu'il ne serait pas judicieux d'utiliser la réponse sélectionnée dans le code de production, pour toutes les raisons qu'il mentionne.Cela dit, si vous avez juste un peu d'expérience, cette réponse est un bon point de départ pour les bases.

Dans mon expérience ASP, j'ai préféré écrire ma couche d'accès à la base de données en utilisant VB, en compilant une DLL et en référençant la DLL via VBScript.Difficile de déboguer directement via ASP, mais c'était un bon moyen d'encapsuler tout le code d'accès aux données loin du code ASP.

Bien à l'époque où VBScript / ASP était toujours OK, j'ai travaillé dans une entreprise de services publics avec un envoi de DB très mixte, je jurais par ce site: http://www.connectionstrings.com/

@michealpryor a bien compris

Je suis resté bloqué sur ASP et je ressens votre douleur.

1) La meilleure façon d’interroger SQL Server consiste à utiliser des requêtes paramétrées ;cela aidera à prévenir les attaques par injection SQL.

Tutoriel (pas mon blog) :
http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2) Je n'ai rien vu concernant MVC spécifiquement destiné à ASP, mais je suis vraiment intéressé car c'est quelque chose que j'ai du mal à comprendre.J'essaie généralement de contenir au moins des éléments qui ressemblent à une vue et des éléments qui ressemblent à un contrôleur dans des fonctions distinctes.Je suppose que vous pourriez éventuellement écrire du code dans des fichiers séparés, puis utiliser des inclusions côté serveur pour les réunir tous.

3) Vous venez probablement d'un langage qui intègre davantage de fonctionnalités.Au début, certaines choses peuvent sembler manquer, mais il s'agit souvent simplement d'écrire beaucoup plus de lignes de code que ce à quoi vous êtes habitué.

Également pour l'accès à la base de données, j'ai un ensemble de fonctions - GetSingleRecord, GetRecordset et UpdateDatabase qui ont une fonction similaire à celle mentionnée par Michael ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top