Cet article utilise la DLL générée par VB pour encapsuler le code ASP pour se connecter à la base de données (en prenant la base de données Access comme exemple).
Dans des circonstances normales, lorsque nous utilisons ASP pour nous connecter à la base de données Access, nous effectuons généralement les opérations suivantes
'//Proconn.asp
<%
dimProConn
définir ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Pilote Microsoft Access (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
"Une base de données Access qui était à l'origine DB.mdb est remplacée par un fichier avec le suffixe DB.asp et le mot de passe de la base de données est 123
si err.Number <> 0 alors
ResPonse.Write "Il n'y a pas de lien vers la base de données, veuillez vérifier"
Réponse.Fin
autre
ResPonse.Write "Connexion à la base de données réussie"
Réponse.Fin
finir si
%>
Si le serveur est configuré, accédez à Proconn.asp. Si la connexion à la base de données réussit, « Connexion à la base de données réussie » sera affiché.
Cependant, le niveau de sécurité d'un tel code asp est très faible. Si l'asp d'origine est vu par d'autres, alors s'il existe ce fichier de base de données, d'autres peuvent facilement ouvrir votre base de données pour des opérations.
Voici donc notre tâche : comment encapsuler ces contenus clés ?
Tout d’abord, vous devez déterminer la méthode, la méthode et l’objet.
Après avoir vérifié certaines informations sur Internet, elles sont principalement encapsulées en utilisant VB pour générer des DLL, nous devrions donc également adopter cette méthode (même si je n'ai pas vraiment utilisé VB)
pour déterminer, alors quel est l'objet que nous devons encapsuler ?
Venez voir tout le monde
"driver={Pilote Microsoft Access (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
C'est le code le plus critique. Il serait préférable d'encapsuler ce code dans une DLL générée avec VB.
La raison pour laquelle pas tout
dimProConn
définir ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Pilote Microsoft Access (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
Tous sont encapsulés (car il existe des instructions sur Internet pour encapsuler l'intégralité du code de connexion) car lorsque d'autres fichiers asp font référence à Proconn.asp,
J'ai également besoin du ProConn à l'intérieur pour effectuer d'autres opérations. S'il est encapsulé, il ne sera pas pratique de le référencer et de l'utiliser.
(L'explication ci-dessus de l'objet d'encapsulation est mon opinion personnelle. Certains amis ont dit que l'encapsulation globale n'a aucun impact sur l'utilisation de ProConn. Je ne comprends pas cela. Veuillez me dire si vous savez)
Je veux juste encapsuler la partie la plus critique ""driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")"
pour analyser ce paragraphe .le contenu du colis,
La première moitié est une chaîne :
"driver={Pilote Microsoft Access (*.mdb)};uid=;pwd=123;DBQ="
Utilisez & pour concaténer la seconde moitié d’une autre chaîne.
L'autre chaîne de la seconde moitié est la valeur de retour de la fonction objet Server.MapPath.
Commençons le processus d'opération d'encapsulation.
Tout d'abord, créez un nouveau projet DLL ActiveX sous VB. Changez le nom du projet Project1 en ConDBDLL ?? Changez le nom de la méthode class1 en cs.
Le nom du projet et le nom de la méthode seront utilisés lors de l'appel de cette DLL. Vous pouvez les définir selon vos propres règles de dénomination, mais veillez à les utiliser avec précaution.
La partie code de cette DLL s'écrit comme suit :
Dim rp As Response
Dim rq Comme demande
Dim ap comme application
Dim sr en tant que serveur
Dim sn As Session
Public Sub OnStartPage (MyScriptingContext As ScriptingContext)
Définir rp = MyScriptingContext.Response
Définir rq = MyScriptingContext.Request
Définir sr = MyScriptingContext.Server
Définir ap = MyScriptingContext.Application
Définir sn = MyScriptingContext.Session
Fin du
sous-sub public OnEndPage()
Définir rp = Rien
Définir rq = Rien
Définir sr = Rien
Définir ap=Rien
Définir sn=Rien
Fin du sous-marin
'L'instruction ci-dessus est nécessaire. L'objet d'origine a été simplifié et traité dans deux fonctions de base.
Public Function ConnectDB() As Variant
ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid =;pwd=123; DBQ =
Fonction de fin
'La fonction ci-dessus traite la première moitié de la chaîne et renvoie directement le contenu de cette chaîne
' De plus, définissez la fonction suivante pour traiter la seconde moitié du contenu
Fonction publique DBPath() comme variante
DBPath = sr.MapPath("DB.asp")
Fonction de fin
'Notez que ce qui précède utilise sr, ne l'utilisez pas comme serveur. Nous
avons maintenant atteint l'étape critique. Ajoutez la référence de la "Bibliothèque d'objets ObjectContext de Microsoft Active Server Pages" à ce projet.
Pour ajouter une méthode, sélectionnez "Projet" -> "Référence" dans le menu et sélectionnez-la dans la boîte de dialogue ouverte.
À propos, nous devons également sélectionner "Bibliothèque Microsoft ActiveX Data Objects 2.6"
Préparez le fichier de base de données
.
DB.asp (écrit par DB .mdb est formé en changeant le suffixe, le mot de passe est 123)
Voici le code pour appeler le fichier asp encapsulé qui se connecte à la base de données :
'//ProConn.asp
<%
dimProConn
définir ProConn=Server.CreateObject("ADODB.CONNECTION")
DimConDB
définir ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB est l'objet DLL créé
Dim StrConn
'Définir une chaîne
StrConn = ConDB.ConnectDB() & ConDB.DBPath()
'Concaténer les deux parties pour former une chaîne
ProConn.OpenStrConn
'Effectuer des opérations sur les objets de base de données
%>
Puisqu'il s'agit d'une DLL créée par vous-même, après l'avoir copiée dans le répertoire correspondant, elle doit être enregistrée avant de pouvoir être utilisée.
Méthode enregistrée, exécutée en "Run" :
Regsvr32.exe lyfUpload.dll
La méthode pour annuler l'enregistrement de cette DLL est : Regsvr32.exe /u lyfUpload.dll
Une fois l'enregistrement terminé, notre travail est pratiquement terminé. Nous pouvons maintenant utiliser une telle méthode d'encapsulation pour nous connecter à une cible. base de données.
Cependant, il y a une chose qui mérite une attention particulière :
parce que
DimConDB
définir ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB est l'objet DLL créé. Il s'agit d'un objet créé dans ASP, y compris ProConn. Ensuite, n'oubliez pas de publier ces deux objets dans tout autre fichier ASP qui utilise (référence) ProConn.asp !
ProConn.close
setProConn = rien
setConDB=Rien
Sinon, le système sera de plus en plus saturé car les objets ne seront pas libérés.
Concernant cette méthode d'encapsulation du code ASP pour se connecter à la base de données Access, je pense qu'elle est tout à fait applicable à la méthode de connexion d'autres bases de données.
Je pense que ma méthode n'est pas la meilleure. S'il y a des lacunes, veuillez me corriger si vous l'avez lu. Merci d'avance.