이 기사에서는 VB에서 생성된 DLL을 사용하여 데이터베이스에 연결하기 위한 ASP 코드를 캡슐화합니다(예: Access 데이터베이스 사용).
일반적인 상황에서 ASP를 사용하여 Access 데이터베이스에 연결할 때 일반적으로 다음 작업을 수행합니다
'//Proconn.asp
<%
희미한ProConn
ProConn=Server.CreateObject("ADODB.CONNECTION")을 설정합니다.
ProConn.Open "드라이버={Microsoft Access Driver(*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
'원래 DB.mdb였던 Access 데이터베이스는 접미사가 DB.asp인 파일로 변경되고,
err.Number <> 0인 경우
데이터베이스 비밀번호는 123입니다.
ResPonse.Write "데이터베이스에 대한 링크가 없습니다. 확인하십시오"
응답.끝
또 다른
ResPonse.Write "데이터베이스 연결 성공"
응답.끝
종료하면
%>
서버가 구성되어 있으면 Proconn.asp에 접속합니다. 데이터베이스 연결에 성공하면 "데이터베이스 연결 성공"이 출력됩니다.
그러나 이러한 ASP 코드의 보안 수준은 매우 낮습니다. 원본 ASP가 다른 사람에게 공개되면 이 데이터베이스 파일이 있으면 다른 사람이 쉽게 데이터베이스를 열어 작업할 수 있습니다.
그렇다면 우리의 임무는 다음과 같습니다. 이러한 핵심 내용을 어떻게 캡슐화할 것인가?
먼저 방법, 방법 및 개체를 결정해야 합니다.
인터넷에서 일부 정보를 확인한 후 DLL을 생성하기 위해 주로 VB를 사용하여 캡슐화되므로 이 방법도 채택해야 합니다. (실제로 VB를 사용하지는 않았지만)
방법을 사용하여 캡슐화해야 하는 개체가 무엇인지 확인해야 합니다. ?
모두들 와서 만나보세요
"드라이버={Microsoft Access 드라이버(*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
가장 중요한 코드이므로 VB로 생성된 DLL에 이 코드를 캡슐화하는 것이 좋습니다.
전체가 아닌 이유
희미한ProConn
ProConn=Server.CreateObject("ADODB.CONNECTION")을 설정합니다.
ProConn.Open "드라이버={Microsoft Access Driver(*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")
다른 asp 파일이 Proconn.asp를 참조할 때 모든 연결 코드가 캡슐화됩니다(인터넷에 전체 연결 코드를 캡슐화하라는 지침이 있기 때문에).
다른 작업을 수행하려면 ProConn도 내부에 필요합니다. 캡슐화하면 참조 및 작동이 불편합니다.
(위의 encapsulation 개체에 대한 설명은 제 개인적인 의견입니다. 어떤 친구들은 전체적인 encapsulation이 ProConn 사용에 아무런 영향을 미치지 않는다고 했습니다. 이해가 안 되네요. 아시는 분은 알려주세요.)
이 단락을 분석하기 위해
가장 중요한 부분인 ""driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")"를 캡슐화하고 싶습니다.
. 패키지의 내용물,
전반부는 문자열입니다.
"드라이버={Microsoft Access 드라이버(*.mdb)};uid=;pwd=123;DBQ="
다른 문자열의 후반부를 연결하려면 &를 사용하세요.
후반부의 다른 문자열은 Server.MapPath 개체 함수의 반환 값입니다.
캡슐화 작업 프로세스를 시작하겠습니다.
먼저 VB에서 새 ActiveX DLL 프로젝트를 만듭니다. Project1의 이름을 ConDBDLL로 변경합니다. 메서드 class1의 이름을 cs로 변경합니다.
프로젝트 이름과 메서드 이름은 이 DLL을 호출할 때 사용됩니다. 자신만의 명명 규칙에 따라 정의할 수 있지만 주의해서 사용해야 합니다.
이 DLL의 코드 부분은 다음과 같이 작성되었습니다.
Dim rp As Response
요청으로 Dim rq
응용 프로그램으로 Dim ap
Dim sr을 서버로 사용
Dim sn As 세션
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=아무것도 설정하지 않음
서브 끝
'위 문이 필요합니다. 원본 개체는 두 가지 기본 함수로 단순화되고 처리되었습니다.
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 Object Library" 참조를 추가했습니다.
메소드를 추가하려면 메뉴에서 "프로젝트"->"참조"를 선택하고 열린 대화 상자에서 해당 메소드를 선택하십시오.
그런데
위 작업을 수행하려면 "microsoft activeX 데이터 개체 2.6 라이브러리"도 선택해야 합니다. DLL을 컴파일하고 생성할 수 있습니다. (앞서 프로젝트 이름과 메서드 이름을 변경하는 것을 잊지 마세요.)
데이터베이스 파일을 준비합니다. DB.asp (DB에서 작성한 .mdb는 접미사를 변경하여 구성되며 비밀번호는 123)
다음은 데이터베이스에 연결하는 캡슐화된 asp 파일을 호출하는 코드입니다.
'//ProConn.asp
<%
희미한ProConn
ProConn=Server.CreateObject("ADODB.CONNECTION")을 설정합니다.
DimConDB
ConDB=Server.CreateObject("ConDBDLL.Conn")를 설정합니다.
'ConDB는 생성된 DLL 개체
Dim StrConn
입니다.
'문자열 정의
StrConn = ConDB.ConnectDB() & ConDB.DBPath()
'두 부분을 연결하여 문자열을 만듭니다.
ProConn.OpenStrConn
'데이터베이스 개체 작업 수행
%>
직접 생성한 DLL이므로 해당 디렉터리에 복사한 후 등록해야 사용할 수 있다.
"Run"에서 실행되는 등록된 메서드:
Regsvr32.exe lyfUpload.dll
이 DLL의 등록을 취소하는 방법은 다음과 같습니다. Regsvr32.exe /u lyfUpload.dll
등록이 완료되면 기본적으로 작업이 완료됩니다. 이제 이러한 캡슐화 방법을 사용하여 대상 DLL에 연결할 수 있습니다. 데이터베이스.
그러나 특별한 주의가 필요한 한 가지 사항이 있습니다.
왜냐하면
DimConDB
ConDB=Server.CreateObject("ConDBDLL.Conn")를 설정합니다.
'ConDB는 생성된 DLL 개체입니다. 이것은 ProConn을 포함하여 ASP에서 생성된 개체입니다. 그런 다음 ProConn.asp를 사용(참조)하는 다른 ASP 파일에서 이 두 개체를 해제해야 합니다.
ProConn.close
setProConn=아무것도 없음
setConDB=아무것도 없음
그렇지 않으면 개체가 해제되지 않기 때문에 시스템이 점점 더 압도당하게 됩니다.
Access 데이터베이스에 연결하기 위해 ASP 코드를 캡슐화하는 이 방법은 다른 데이터베이스의 연결 방법에도 완벽하게 적용 가능하다고 생각합니다.
제 방법이 최선이 아닌 것 같습니다. 혹시 부족한 점이 있다면 읽어주시면 감사하겠습니다.