ASP 사용자의 경우 데이터베이스 작업이 단순할수록 논리 및 응용 프로그램 코드를 고려해야 하는 시간이 길어지고 효율성이 높아집니다.
오늘 저는 데이터베이스 운영에 대한 아이디어를 제공하기 위해 왔습니다. 이 코드는 저의 장기 ASP 응용 프로그램에서도 지속적으로 완성되고 수정되었습니다. 직접 사용하는 데 문제가 있습니다. 물론 제 능력에는 한계가 있으니 모두가 함께 토론해 보시길 바랍니다.
참고: 이 게시물의 코드는 모두 VBScript 버전입니다. 또한 필기 ASP에 대한 특정 기초가 이미 있는 것이 가장 좋습니다.
먼저, 제 수업의 몇 가지 특징을 간략하게 소개하겠습니다.
다양한 유형의 여러 데이터베이스를 동시에 운영할 수 있습니다.
데이터 유형의 차이를 전혀 고려할 필요가 없으며, 문자 필드에 작은따옴표를 추가할지 고민할 필요도 없습니다.
호출은 매우 간단하며 데이터베이스의 기본 작업에는 일반적으로 한 줄의 코드만 필요합니다.
mssql 트랜잭션 롤백을 지원합니다.
디버깅을 용이하게 하기 위해 SQL 문을 자동으로 생성하고 출력할 수 있습니다.
사용 방법:
1. clsDbctrl.asp 파일의 첫 번째 줄을 자신의 데이터베이스 위치로 수정합니다(수정 방법은 아래 CreatConn 함수 설명 참조). 여러 데이터베이스에 연결해야 하는 경우 동일한 형식으로 직접 추가할 수 있습니다.
2. 이 asp 파일을 새 asp 파일에 포함시킵니다. 좋다:
<!--#include file="Inc/clsDbctrl.asp" --> 또는:
<!--#include virtual="/Inc/clsDbctrl.asp"-->
3. 이 클래스를 적용하려면 다음 코드를 사용하십시오.
데이터베이스 연결:
<%
OpenConn() '데이터베이스 연결 열기
Dim db: Set db = New DbCtrl '객체 생성
'귀하의 코드는 여기에 있습니다...
Co(db) : CloseConn() '개체를 해제하고 데이터베이스 연결을 닫습니다.
%>
또는 (하나 이상의 데이터베이스 연결):
<%
Dim db1 : db1 = New DbCtrl 설정 : db1.dbConn = Oc(a)
Dim db2: db2 = 새 DbCtrl 설정: db2.dbConn = Oc(b)
'귀하의 코드는 여기에 있습니다...
Co(db1) : Co(db2)
%>
4. 구체적인 작동 예시는 각 기능 설명의 코드 예시를 참조하세요.
메서드 및 속성 개요(자세한 사용법과 예는 아래에 있음):
인용하다:
CreateConn이 데이터베이스 연결 문자열을 생성합니다.
Oc는 데이터베이스 연결을 설정합니다.
공동 릴리스 개체
OpenConn은 기본 데이터베이스 연결을 엽니다.
CloseConn은 기본 데이터베이스 연결을 닫습니다.
dbCtrl.dbConn 속성, 작동할 데이터베이스 연결을 가져오며 기본값은 Conn입니다.
dbCtrl.dbErr 속성(읽기 전용)은 캡처된 오류 메시지를 출력합니다.
dbCtrl.Version 속성, 읽기 전용, 프로그램 버전 정보
dbCtrl.AutoId 메소드, 고유 일련번호 자동 획득
조건을 충족하는 레코드 세트를 가져오는 dbCtrl.GetRecord 메서드
dbCtrl.GetRecordBySql 메소드, SQL 문을 기반으로 레코드 세트를 가져옵니다.
지정된 레코드의 세부 데이터를 기반으로 하는 dbCtrl.GetRecordDetail 메소드
dbCtrl.AddRecord 메서드, 새 레코드 추가
dbCtrl.UpdateRecord 메소드, 지정된 조건에 따라 레코드를 업데이트합니다.
dbCtrl.DeleteRecord 메소드, 조건에 맞는 레코드 삭제
dbCtrl.ReadTable 메서드는 지정된 조건에 따라 레코드에 있는 다른 필드의 내용을 가져옵니다.
dbCtrl.C 메소드, 레코드 세트 객체 닫기
dbCtrl.wGetRecord,
dbCtrl.wAddRecord,
dbCtrl.wUpdateRecord,
dbCtrl.wDeleteRecord 이 네 가지 메소드는 해당 작업을 가져오는 SQL 문입니다(앞에 w가 붙음).
매개변수 규칙:
ASP에는 Arguments 개체가 없고 동적 매개 변수를 사용할 수 없기 때문에 이 클래스의 코드에서는 이 효과를 얻기 위해 Array를 사용합니다. 이 클래스의 일부 매개변수는 배열을 사용할 수 있지만(매개변수 설명에 명시된 대로) 배열을 사용할 때는 다음 형식을 따라야 합니다.
Array("Field1:값1", "Field2:True", "Field3:100")
예, json 형식과 약간 비슷합니다. 변수가 포함된 경우 다음과 같습니다.
Array("필드1:" & 값1, "필드2:" & 값2, "필드3:" & 값3)
이 클래스의 데이터베이스 필드와 관련된 거의 모든 콘텐츠는 위의 배열 형식을 사용하여 조건을 설정하거나 콘텐츠를 얻을 수 있다고 할 수 있습니다. 여기서 가장 큰 특징은 필드를 사용할 때 필드 유형을 고려할 필요가 없다는 것입니다. 필드 뒤에 콜론과 해당 값을 따르기만 하면 됩니다. ASP 프로그램을 직접 작성하는 경우가 많으면 이 방법을 사용하면 데이터 형식 외에도 언제든지 조건을 추가하고 삭제할 수 있어 매우 편리합니다. 아직 사용 방법을 이해하지 못하더라도 문제가 되지 않습니다. 아래에는 이 문제를 설명하는 많은 예가 있습니다.
ASP의 데이터베이스 작업을 캡슐화하는 것은 실제로 어렵지 않습니다. 이전에 비슷한 코드를 만들었거나 다른 사람의 캡슐화된 코드를 빌린 적이 있을 것입니다. 그러나 모두가 알고 있듯이, 캡슐화된 코드를 사용하여 오류가 발생하면 디버깅은 번거로운 문제입니다. 일반적으로 캡슐화된 작업이 간단할수록 디버깅은 더 복잡해집니다. 이 코드를 작성할 때 문제가 발생할 경우 오류를 해결하는 방법을 고려하여 최선을 다했습니다. 사용자가 데이터베이스를 운영할 수 있도록 코드를 최대한 단순화하면서도 언제든지 SQL 문을 출력하여 오류를 해결할 수 있습니다.
마지막으로, 이 기사에 포함된 ASP 데이터베이스 작업은 대용량 데이터에는 적합하지 않습니다. 아시다시피 대용량 데이터를 작업하려면 저장 프로시저를 사용하는 것이 더 좋습니다. . 또한 캡슐화됩니다. 효율성의 문제도 있는데, 높은 효율성을 추구하려면 ASP를 사용할 때 COM+ 등도 고려해야 합니다. 따라서 이 범주는 중소형 ASP 프로젝트에 적합합니다.
좋습니다. 자세한 사용 지침은 다음과 같습니다.
하나. 데이터베이스 연결
대부분의 사람들의 사용 습관을 고려하면 데이터베이스 연결에는 공용 프로세스가 사용되므로 모든 사람이 코드에서 이를 수정해야 합니다. 이미 데이터베이스 연결을 설정한 경우 이 줄을 주석 처리하면 됩니다. 코드에는 MSSql, Access, MySQL 및 Oracle의 4가지 데이터베이스 연결 방법이 내장되어 있습니다. 물론 소스 코드에서 이를 추가하거나 삭제할 수도 있습니다. 수정 예:
Dim a : a = CreatConn(0, "TestData", "localhost", "username", "userpassword")
Dim b : b = CreatConn(1, "Data/%TestDb%.mdb", "", "", "")
설명하자면, 첫 번째 매개변수는 문자열일 수 있습니다. Access를 사용하는 경우 두 번째 매개변수에 상대 경로와 절대 경로를 모두 입력할 수 있습니다. 비밀번호가 있는 경우 다음과 같이 다섯 번째 매개변수에 입력할 수도 있습니다.
Dim c : c = CreatConn("ACCESS", "E:/MyWeb/Data/%TestDB%.mdb", "", "", "mdbpassword")
관련 기능:
프로토타입: CreateConn(dbType, strDB, strServer, strUid, strPwd)
기능: 데이터베이스 연결 문자열 설정
반환 값: 문자열
매개변수:
dbType: 정수 또는 문자열 연결 데이터베이스 유형
(0 또는 "MSSQL") - Microsoft SQL Server
(1 또는 "액세스") - Microsoft Office Access
(2 또는 "MYSQL") - MySQL 서버
(3 또는 "ORACLE") - 오라클 서버
strDB: 문자열 데이터베이스 이름 또는 데이터베이스 주소(Access에서는 절대 경로 또는 상대 경로를 사용할 수 있음)
strServer: 문자열 데이터베이스 서버 주소입니다. Access를 위해 비워 두세요.
strUid: 문자열 데이터베이스 사용자 이름입니다. Access를 위해 비워 두세요.
strPwd: 문자열 데이터베이스 비밀번호
프로토타입: Oc(connStr)
기능: 데이터베이스 연결 열기
반환 값: 개체 데이터베이스 연결 개체
매개변수:
connStr: CreateConn 함수에 의해 생성된 문자열 데이터베이스 연결 문자열
프로토타입: Co(obj)
기능: 객체 닫기
매개변수:
obj: Object 닫을 객체의 이름입니다.
프로토타입: OpenConn
기능: 기본 데이터베이스 연결을 열고 Conn이라는 연결 개체를 자동으로 생성합니다.
매개변수: 없음
프로토타입: CloseConn
기능: Conn이라는 기본 데이터베이스 연결 개체를 닫습니다.
매개변수: 없음
2. 데이터베이스 운영
다음은 본 데이터베이스 연산 클래스의 기능 설명입니다. 이는 매뉴얼로 간주하시기 바랍니다.
프로토타입: dbCtrl.dbConn(objConn)
기능: 데이터베이스 연결 개체를 가져옵니다.
매개변수:
objConn: Object 설정된 데이터베이스 연결 개체입니다.
예:
Dim db : db 설정 = 새 DbCtrl
db.dbConn = Oc(CreatConn(1,"E:/WebSite/MySite/Data/%TestDb%.mdb","","",""))
공동(db)
설명: 이 속성은 선택 사항입니다. 이 속성을 지정하지 않으면 기본 데이터 연결은 페이지에 있는 Conn이라는 데이터베이스 연결 개체입니다.
프로토타입: dbCtrl.AutoID(테이블 이름)
기능: 고유 일련번호 자동 획득(자동 번호 부여)
반환 값: 정수
매개변수:
TableName: String 고유 일련 번호를 가져와야 하는 데이터 테이블의 이름입니다.
예:
희미한 새 ID
newId = db.AutoId("테스트테이블")
응답.쓰기(newId)
프로토타입: dbCtrl.GetRecord(TableName,FieldsList,Condition,OrderField,ShowN)
기능: 조건에 맞는 레코드 세트를 가져옵니다.
반환 값: 개체 레코드 세트 개체
매개변수:
TableName : 문자열 테이블 이름
FieldsList: 쉼표로 구분된 문자열 필드 이름, 모든 필드를 표시하려면 비워 두세요.
조건: 문자열 또는 배열 쿼리 조건입니다. 배열인 경우 이전 매개변수 규칙을 따라야 합니다.
orderField: 문자열 정렬 방법
ShowN: Integer는 SQL의 Select Top N과 동일한 레코드 수를 가져옵니다.
예:
딤머
rs = db.GetRecord("TestTable","fId,fName,fAge","fSex='Male' And IsActive = 1","fName Asc", 0) 설정
rs.eof가 아닌 동안
Response.Write ("이름:" & rs(1) & " 나이:" & rs(2) & "<br />")
rs.movenext()
향하게 하다
DB.C(rs)
위의 예에서는 다음 배열 형식으로 조건을 지정하는 것이 동일합니다.
rs = db.wGetRecord("TestTable","fId,fName,fAge", Array("fSex:Male","IsActive:1"), "fName Asc", 0) 설정
또한 다음 문을 사용하여 이 함수에 의해 생성된 SQL 문을 볼 수 있습니다.
Response.Write(db.wGetRecord("TestTable","fId,fName,fAge", Array("fSex:Male","IsActive:1"), "fName Asc", 0))
보시다시피 원래 함수 앞에 w를 추가하면 됩니다.
프로토타입: dbCtrl.GetRecordBySQL(strSelect)
기능: SQL 문을 기반으로 레코드 세트 가져오기
반환 값: 개체 레코드 세트 개체
매개변수:
strSelect: 레코드세트를 생성하는 데 사용되는 문자열 SQL 문
예:
딤머
Set rs = db.GetRecordBySQL("Select a.Id, a.LastName, b.Group From User a InnerJoin 출발 b On a.GroupId = b.GroupId")
'귀하의 코드는 여기에 있습니다...
DB.C(rs)
프로토타입: dbCtrl.GetRecordDetail(테이블 이름, 조건)
기능: 지정된 기록의 세부 데이터를 기반으로 합니다.
반환 값: 개체 레코드 세트 개체
매개변수:
TableName : 문자열 테이블 이름
조건: 문자열 또는 배열 쿼리 조건입니다. 배열인 경우 이전 매개변수 규칙을 따라야 합니다.
예:
희미한 RS, ID
ID = Request.QueryString("id")
rs = db.GetRecordDetail("TestTable","Id=" & id) 설정
'귀하의 코드는 여기에 있습니다...
DB.C(rs)
설명: 이미 볼 수 있듯이 이는 세부 페이지(예: 뉴스 콘텐츠 페이지)를 여는 데 가장 일반적으로 사용됩니다.
프로토타입: dbCtrl.AddRecord(TableName, ValueList)
기능: 새 레코드 추가
반환 값: 새 레코드의 ID 번호(성공) 또는 0(실패)
매개변수:
TableName : 문자열 테이블 이름
ValueList: 배열 필드와 테이블에 삽입된 값은 배열만 가능하며 이전 매개변수 규칙을 따라야 합니다.
예:
희미한 fName, fSex, fWorkYear, fBirth
fName = "왕 에르탄"
fSex = "남성"
fWorkYear = 12
fBirth = Cdate("1981-10-23")
희미한 결과
result = db.AddRecord("TestTable",Array("이름:"&fName, "Sex:"&fSex, "WorkYear:"&fWorkYear, "Birthday:"&fBirth, "IsActive:True"))
결과<>0이면
Response.Write("레코드를 추가했습니다. 이 레코드의 자동 번호 매기기 ID는 "& 결과입니다)
종료 조건
알다시피, 실제로 필드 유형을 고려할 필요는 없습니다.
코드의 필드와 값을 좀 더 명확하게 보고 싶다면 이렇게 작성할 수도 있는데, 선호도에 따라 다릅니다.
result = db.AddRecord("TestTable",Array("이름:" & fName,_
"섹스:" & fSex,_
"WorkYear:" & fWorkYear,_
"생일:" & f생일,_
"활성화:참"))
또한 다음 문을 사용하여 이 함수에 의해 생성된 SQL 문을 볼 수 있습니다.
Response.Write(db.wAddRecord("TestTable",Array("이름:"&fName, "Sex:"&fSex, "WorkYear:"&fWorkYear, "Birthday:"&fBirth, "IsActive:True")))
참고: 반환된 Id 값은 상대적으로 어리석은 방법을 사용하므로 동시 데이터 양이 많을 경우 정확성을 보장하지 않습니다.
프로토타입: dbCtrl.UpdateRecord(TableName, Condition, ValueList)
기능: 지정된 조건에 따라 기록을 업데이트합니다.
반환 값: 1(성공) 또는 0(실패)
매개변수:
TableName : 문자열 테이블 이름
조건: 문자열 또는 배열 업데이트 조건, 배열인 경우 이전 매개변수 규칙을 따라야 합니다.
ValueList: 문자열 또는 배열 업데이트된 필드 및 값. 배열인 경우 이전 매개변수 규칙을 따라야 합니다.
예:
희미한 fName, fWorkYear
fName = "왕산탄"
fWorkYear = 10
희미한 결과
result = db.UpdateRecord("TestTable", "UId = 1308", Array("이름:"&fName, "WorkYear:"&fWorkYear))
결과<>0이면
Response.Write("데이터를 성공적으로 업데이트했습니다!")
종료 조건
또한 다음 문을 사용하여 이 함수에 의해 생성된 SQL 문을 볼 수 있습니다.
Response.Write(db.wUpdateRecord("TestTable", "UId = 1308", Array("이름:"&fName, "WorkYear:"&fWorkYear)))
프로토타입: dbCtrl.DeleteRecord(TableName,IDFieldName,IDValues)
기능: 조건에 맞는 기록 삭제
반환 값: 1(성공) 또는 0(실패)
매개변수:
TableName : 문자열 테이블 이름
IDFieldName: 문자열 테이블의 Id 필드 이름
IDValues: 문자열 또는 배열 삭제 조건. 쉼표로 구분된 여러 ID 번호일 수 있습니다. 배열인 경우 이전 매개변수 규칙을 따라야 합니다.
예:
희미한 ID, 결과
ids = Request.Form("selectid") '여기에서 얻은 값은 12, 34, 256, 314라고 가정하면 됩니다(체크박스로 제출하는 값은 이렇습니다)
결과 = db.DeleteRecord("TestTable", "UId", ids)
결과<>0이면
Response.Write("데이터를 성공적으로 삭제했습니다!")
종료 조건
물론 다음과 같이 문자열이나 배열을 사용하여 다른 조건을 지정할 수도 있습니다.
result = db.DeleteRecord("TestTable", "UId", "IsActive = 0 And FirstName = 'Tom'")
또한 다음 명령문을 사용하여 이 함수에 의해 생성된 SQL 문을 볼 수 있습니다.
Response.Write(db.wDeleteRecord("TestTable", "UId", ids))
프로토타입: dbCtrl.ReadTable(TableName, Condition, GetFieldNames)
기능: 지정된 조건을 기반으로 레코드의 다른 필드 내용을 가져옵니다.
반환 값: 문자열(GetFieldNames는 단일 필드) 또는 배열(GetFieldNames는 여러 필드)
매개변수:
TableName : 문자열 테이블 이름
조건: 문자열 또는 배열 쿼리 조건입니다. 배열인 경우 이전 매개변수 규칙을 따라야 합니다.
GetFieldNames: 문자열 단일 필드 이름 또는 쉼표로 구분된 여러 필드 이름
예:
희미한 결과, 결과
uid = rs("postid") '이것이 페이지에 설정된 레코드의 사용자 ID 값이라고 가정합니다.
결과 = db.ReadTable("UserTable","UId=" & uid, "UserName")
Response.Write("게시자:" & 결과)
실제 응용 프로그램에서 이 함수가 가장 많이 사용된다고 말씀드리고 싶습니다. 위에서 본 것은 한 값에서 해당 값과 동일한 다른 테이블의 필드를 가져오는 매우 일반적인 예입니다. 발음하기가 조금 어렵지만 정확히 그 의미입니다). 다음 예에서는 이 값을 기반으로 여러 해당 값을 얻는 방법을 보여줍니다.
희미한 결과, 결과
uid = rs("postid") '이것이 페이지에 설정된 레코드의 사용자 ID 값이라고 가정합니다.
결과 = db.ReadTable("UserTable","UId=" & uid, "UserName,UserSex,UserAge")
Response.Write("게시자:" & result(0) & "<br /> 성별: " & result(1) & "<br /> 연령: " &result(2))
보시다시피 여러 필드 이름을 입력하면 배열이 생성됩니다.
프로토타입: dbCtrl.C(objRs)
기능: 레코드 세트 개체 닫기
매개변수:
objRs: Object 페이지의 레코드세트 개체입니다.
예:
딤머
rs = db.GetRecordDetail("TestTable","Id=123" ) 설정
'귀하의 코드는 여기에 있습니다...
DB.C(rs)
이 함수는 위의 많은 예에서 사용되었으므로 자세히 설명하지 않겠습니다. rs.close와 동일합니다: set rs = Nothing.
clsDbctrl.rar