この記事では、VB によって生成された DLL を使用して、データベースに接続するための ASP コードをカプセル化します (Access データベースを例にします)。
通常の状況では、ASP を使用して Access データベースに接続する場合、通常は次の操作を実行します
'//Proconn.asp
<%
ディムプロコン
set ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
'元々 DB.mdb だった Access データベースは、DB.asp というサフィックスを持つファイルに変更され、データベース パスワードは 123
if err.Number <> 0 then
ResPonse.Write "データベースへのリンクがありません。確認してください"
応答.終了
それ以外
ResPonse.Write "データベース接続に成功しました"
応答.終了
終了する場合
%>
サーバーが構成されている場合は、Proconn.asp にアクセスします。データベース接続に成功すると、「データベース接続に成功しました」と出力されます。
ただし、このような ASP コードのセキュリティ レベルは非常に低く、元の ASP が他の人に見られた場合、このデータベース ファイルが存在すると、他の人が簡単にデータベースを開いて操作することができます。
そこで私たちの課題は、これらの重要なコンテンツをどのようにカプセル化するかということです。
まず、メソッド、メソッド、オブジェクトを決定する必要があります。
インターネットでいくつかの情報を確認したところ、主に VB を使用して DLL を生成してカプセル化されているため、この方法を採用する必要があります。(VB を実際に使用したことはありませんが)
、カプセル化する必要があるオブジェクトは何か?
みんなに会いに来てね
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
これは最も重要なコードです。このコードは VB で生成された DLL にカプセル化する方がよいでしょう。
全部ではない理由
ディムプロコン
set ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
他の ASP ファイルが Proconn.asp を参照する場合、すべてがカプセル化されます (接続コード全体をカプセル化するための指示がインターネット上にあるため)。
他の操作を実行するには内部の ProConn も必要です。カプセル化されている場合、参照や操作が不便になります。
(上記のカプセル化オブジェクトの説明は私の個人的な意見です。一部の友人はカプセル化全体がProConnの使用に影響を与えないと言いました。私にはこれが理解できません。知っている場合は教えてください)
この段落を分析するために、
最も重要な部分「driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")」をカプセル化したいだけです
。パッケージの内容、
前半は文字列です。
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=
別の文字列の後半を連結するには & を使用します。
後半のもう 1 つの文字列は、Server.MapPath オブジェクト関数の戻り値です。
カプセル化操作プロセスを開始しましょう。
まず、VB で新しい ActiveX DLL プロジェクトを作成します。プロジェクトの名前を「ConDBDLL??」に変更します。メソッドの名前「class1」を「cs」に変更します。
プロジェクト名とメソッド名は、この DLL を呼び出すときに使用されます。独自の命名規則に従って定義できますが、慎重に使用してください。
この DLL のコード部分は次のように記述されます:
Dim rp As Response
リクエストとしてディムrq
アプリケーションとしてのディム AP
サーバーとしてのディム sr
Dim sn As Session
Public Sub OnStartPage(MyScriptingContext As ScriptingContext)
rp = MyScriptingContext.Response を設定します。
rq = MyScriptingContext.Request を設定します
sr = MyScriptingContext.Server を設定します。
ap = MyScriptingContext.Application を設定します
sn = MyScriptingContext.Session を設定します。
End Sub
Public Sub OnEndPage()
rp = なしを設定します
rq = なしを設定します
sr = 何も設定しない
ap=何も設定しない
sn=何も設定しない
エンドサブ
'上記のステートメントは必要です。元のオブジェクトは簡略化され、2 つの基本関数で処理されます。
Public Function ConnectDB() As Variant
ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid =;pwd=123; DBQ=
関数の終了
'上記の関数は文字列の前半を処理し、この文字列の内容を直接返します
' さらに、内容の後半を処理するために次の関数を定義します
バリアントとしてのパブリック関数 DBPath()
DBPath = sr.MapPath("DB.asp")
終了機能
'上記では sr が使用されていることに注意してください。これをサーバーとして使用しないでください。ここで、
「Microsoft Active Server Pages ObjectContext オブジェクト ライブラリ」の参照をこのプロジェクトに追加します。
メソッドを追加するには、メニューの「プロジェクト」→「参照」を選択し、開いたダイアログボックスでメソッドを選択します。
ちなみに、上記の操作を実行するには「microsoft activeX data object 2.6 library」を選択する必要があります
コンパイル
して生成します (事前にプロジェクト名とメソッド名を変更することを忘れないでください)。
DB.asp (DB によって作成されます。mdb はサフィックスを変更して形成され、パスワードは 123 です)
以下は、データベースに接続するカプセル化された asp ファイルを呼び出すためのコードです。
'//プロコン.asp
<%
ディムプロコン
set ProConn=Server.CreateObject("ADODB.CONNECTION")
DimConDB
set ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB は作成された DLL オブジェクトです
Dim StrConn
'文字列を定義する
StrConn = ConDB.ConnectDB() & ConDB.DBPath()
' 2 つの部分を連結して文字列を形成します
ProConn.OpenStrConn
'データベースオブジェクト操作を実行します
%>
自分で作成したDLLなので、該当ディレクトリにコピー後、登録する必要があります。
登録されたメソッド、「実行」で実行:
Regsvr32.exe lyfUpload.dll
この DLL の登録をキャンセルする方法は次のとおりです。 Regsvr32.exe /u lyfUpload.dll
登録が完了すると、基本的に作業は完了です。これで、このようなカプセル化方法を使用してターゲットに接続できるようになります。データベース。
ただし、特別な注意が必要なことが 1 つあります。
なぜなら
DimConDB
set ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB は作成された DLL オブジェクトです。これは ProConn を含む ASP で作成されたオブジェクトです。その後、ProConn.asp を使用する (参照) 他の ASP ファイルでこれら 2 つのオブジェクトをリリースすることを忘れないでください。
ProConn.close
setProConn=なし
setConDB=なし
そうしないと、オブジェクトが解放されないため、システムはますます過負荷になってしまいます。
このASPコードをカプセル化してAccessデータベースに接続する方法については、他のデータベースの接続方法にも全く応用できると思います。
私の方法が最善ではないと思いますが、もし読んだことがあれば修正してください。