ASP 강의 시리즈(16) 데이터베이스 액세스
저자:Eve Cole
업데이트 시간:2009-05-30 19:58:46
ADO(ActiveX Data Objects)는 웹 페이지에 데이터베이스 액세스를 추가하기 위한 사용하기 쉽고 확장 가능한 기술입니다. ADO를 사용하면 ODBC(Open Database Connectivity) 호환 데이터베이스 및 OLE DB 호환 데이터 소스에 연결하기 위한 간결하고 간결한 스크립트를 작성할 수 있습니다. 데이터베이스 연결에 대한 지식이 있는 스크립터라면 ADO 명령문이 복잡하지 않고 익히기 쉽다는 것을 알게 될 것입니다. 마찬가지로 숙련된 데이터베이스 프로그래머라면 ADO의 고급 언어 독립성 및 쿼리 처리 기능을 높이 평가할 것입니다.
ODBC DSN 파일 만들기 데이터베이스 스크립트를 만들기 전에 ADO가 데이터베이스를 찾고, 식별하고, 통신할 수 있는 방법을 제공해야 합니다. 데이터베이스 드라이버는 데이터 원본 이름(DSN)을 사용하여 특정 ODBC 호환 데이터베이스를 찾고 식별하여 웹 응용 프로그램에서 데이터베이스로 정보를 전달합니다. 일반적으로 DSN에는 데이터베이스 구성, 사용자 보안 및 위치 정보가 포함되어 있으며 Windows NT 레지스트리 키의 테이블이나 텍스트 파일로 얻을 수 있습니다.
ODBC를 사용하면 생성하려는 DSN 유형(사용자, 시스템 또는 파일)을 선택할 수 있습니다. 사용자 및 시스템 DSN은 Windows NT 레지스트리에 저장됩니다. 시스템 DSN을 사용하면 특정 서버에 로그온한 모든 사용자가 데이터베이스에 액세스할 수 있지만 사용자 DSN은 적절한 보안 자격 증명을 사용하여 특정 사용자에게 데이터베이스 연결을 제한합니다. 파일 DSN은 텍스트 파일에서 테이블을 얻는 데 사용되며, 여러 사용자에게 액세스를 제공하고, DSN 파일을 복사하여 한 서버에서 다른 서버로 쉽게 전송할 수 있습니다. 이러한 이유로 이 항목의 예에서는 파일 DSN을 사용합니다.
Windows 시작 메뉴에서 제어판을 열어 DSN 기반 파일을 생성할 수 있습니다. ODBC 아이콘을 두 번 클릭하고 파일 DSN 속성 페이지를 선택한 후 추가를 클릭하고 데이터베이스 드라이버를 선택한 후 다음을 클릭합니다. 데이터베이스 소프트웨어에 대한 DSN을 구성하려면 아래 지침을 따르십시오.
Microsoft Access 데이터베이스에 대한 파일 DSN 구성
새 데이터 원본 만들기 대화 상자의 목록 상자에서 Microsoft Access Driver를 선택하고 다음을 클릭합니다.
DSN 파일 이름을 입력하고 다음을 클릭합니다.
마침을 클릭하여 데이터 소스를 생성합니다.
ODBC Microsoft Access 97 설치 대화 상자에서 선택을 클릭합니다. Microsoft Access 데이터베이스 파일(*.mdb)을 선택하고 확인을 클릭합니다.
참고 성능 및 안정성을 위해 클라이언트-서버 데이터베이스 엔진을 사용하여 10명 이상의 사용자가 동시에 액세스할 수 있어야 하는 웹 응용 프로그램 기반 데이터를 구성하는 것이 좋습니다. ASP는 모든 ODBC 호환 데이터베이스를 사용할 수 있지만 Microsoft ® SQL Server, Oracle 등을 포함한 클라이언트-서버 데이터베이스와 함께 사용하도록 설계되고 엄격하게 테스트되었습니다.
ASP는 유효한 데이터 원본으로 공유 파일 데이터베이스(예: Microsoft Access 또는 FoxPro)를 지원합니다. ASP 설명서의 일부 예에서는 공유 파일 데이터베이스를 사용하지만 이러한 데이터베이스 엔진은 개발 또는 제한된 배포 시나리오에만 사용하는 것이 좋습니다. 공유 파일 데이터베이스는 수요가 많고 품질이 높은 웹 애플리케이션을 제공하는 클라이언트-서버 데이터베이스에 적합하지 않을 수 있습니다.
SQL Server 데이터베이스 파일 DSN 구성
참고 데이터베이스가 원격 서버에 있는 경우 추가 구성 정보는 서버 관리자에게 문의하세요. 다음 절차에서는 SQL Server의 ODBC 기본 설정을 사용하는데, 이는 하드웨어 구성에 적용되지 않을 수 있습니다.
새 데이터 원본 만들기 대화 상자의 목록 상자에서 SQL Server를 선택하고 다음을 클릭합니다.
DSN 파일의 이름을 입력하고 다음을 클릭합니다.
마침을 클릭하여 데이터 소스를 생성합니다.
SQL 서비스 프로그램을 실행하는 서버의 이름, 로그인 ID 및 비밀번호를 입력하십시오.
SQL Server용 새 데이터 원본 만들기 대화 상자의 서버 목록 상자에 SQL Server 데이터베이스가 포함된 서버 이름을 입력하고 다음을 클릭합니다.
로그인 ID 확인 방법을 선택하세요.
SQL 서버 인증을 선택한 경우 로그인 ID와 비밀번호를 입력하고 다음을 클릭하세요.
SQL Server용 새 데이터 원본 만들기 대화 상자에서 기본 데이터베이스, 저장 프로시저 설정용 드라이버 및 ANSI ID를 설정하고 다음을 클릭합니다. (자세한 내용을 보려면 도움말을 클릭하세요.)
대화 상자(SQL Server용 새 데이터 원본 만들기라고도 함)에서 문자 변환 방법을 선택하고 다음을 클릭합니다. (자세한 내용을 보려면 도움말을 클릭하세요.)
다음 대화 상자("SQL Server용 새 데이터 원본 만들기"라고도 함)에서 로그인 설정을 선택합니다.
참고 일반적으로 로그는 데이터베이스 액세스 문제를 디버깅하는 데만 사용할 수 있습니다.
ODBC Microsoft SQL Server 설치 대화 상자에서 데이터 원본 테스트를 클릭합니다. DSN이 올바르게 생성된 경우 테스트 결과 대화 상자에 테스트가 성공적으로 완료되었음을 표시합니다.
SQL Server 연결 및 보안 정보 원격 SQL Server 데이터베이스에 연결하는 ASP 데이터베이스 응용 프로그램을 개발하는 경우 다음 문제를 고려해야 합니다.
연결 옵션 - TCP/IP 소켓과 명명된 파이프 중에서 선택하여 원격 SQL Server 데이터베이스에 액세스할 수 있습니다. 명명된 파이프를 사용하는 경우 연결을 설정하기 전에 데이터베이스 사용자가 Windows NT에 인증되어야 하기 때문에 적절한 SQL Server 액세스 ID는 있지만 컴퓨터에 Windows NT 사용자 계정이 없는 사용자는 명명된 파이프에 대한 액세스가 거부될 수 있습니다. 대안으로, TCP/IP 소켓을 이용한 연결은 네임드 파이프(Named Pipe)를 이용하여 중간 컴퓨터를 거치지 않고 데이터베이스 서버에 직접 연결될 수 있다. TCP/IP 소켓 연결을 사용하여 데이터베이스 서버에 직접 연결할 수 있으므로 사용자는 Windows NT를 통해 인증할 필요 없이 SQL Server 인증을 통해 액세스할 수 있습니다.
참고 TCP/IP 소켓을 사용하면 원격 데이터베이스에 연결할 때 성능이 향상될 수 있습니다.
보안 - SQL Server의 통합 또는 혼합 보안 기능을 사용하고 SQL Server 데이터베이스가 원격 서버에 있는 경우 Windows NT 요청/응답 승인을 사용할 수 없습니다. 즉, Windows NT 요청/응답 ID는 원격 컴퓨터로 전달할 수 없으며 사용자의 사용자 이름과 암호 정보를 기반으로 하는 기본 인증만 사용할 수 있습니다.
이 주제에 대한 자세한 내용은 http://www.microsoft.com/sqlsupport/를 참조하세요.
Microsoft SQL Server 기술 지원 홈 페이지.
Oracle 데이터베이스 파일 DSN 구성
먼저 DSN을 생성할 컴퓨터에 Oracle 사용자 소프트웨어가 제대로 설치되어 있는지 확인하십시오. 자세한 내용은 서버 관리자에게 문의하거나 데이터베이스 소프트웨어 설명서를 참조하세요.
새 데이터 원본 만들기 대화 상자의 목록 상자에서 Oracle용 Microsoft ODBC를 선택한 후 다음을 클릭합니다.
DSN 파일의 이름을 입력하고 다음을 클릭합니다.
마침을 클릭하여 데이터 소스를 생성합니다.
사용자 이름, 비밀번호, 서버 이름을 입력하고 확인을 클릭합니다.
참고 DSN 파일은 .dsn 확장자를 가지며 ProgramsCommon FilesODBCData Sources 디렉터리에 있습니다.
DSN 파일 생성에 대한 자세한 내용을 보려면 Microsoft ODBC 웹 사이트(http://microsoft.com/odbc/)를 방문하십시오.
데이터베이스에 연결 데이터베이스 정보에 액세스하는 첫 번째 단계는 데이터베이스 소스에 대한 연결을 설정하는 것입니다. ADO는 응용 프로그램과 ODBC 데이터베이스 간의 연결을 설정하고 관리하는 데 사용할 수 있는 연결 개체를 제공합니다. Connection 개체에는 데이터베이스 연결을 열고 닫고 정보 업데이트를 위한 쿼리 요청을 만드는 데 사용할 수 있는 다양한 속성과 메서드가 있습니다.
데이터베이스 연결을 설정하려면 먼저 Connection 개체의 인스턴스를 만듭니다. 예를 들어 다음 스크립트는 Connection 객체를 생성한 다음 데이터베이스 연결을 엽니다.
<%
'연결 개체 생성
cn = Server.CreateObject("ADODB.Connection") 설정
'연결을 엽니다. 문자열은 DSN을 나타냅니다.
cn.Open "FILEDSN=MyDatabase.dsn"
%>
참고 DSN 문자열에는 등호(=) 앞이나 뒤에 공백이 포함될 수 없습니다.
이 경우 Connection 개체의 Open 메서드는 데이터베이스에 대한 위치 및 구성 정보가 포함된 DSN 기반 파일을 참조합니다. DSN을 참조하지 않고 공급자, 데이터 소스, 사용자 ID 및 비밀번호를 명시적으로 참조할 수도 있습니다.
연결 개체를 사용하여 쿼리 실행 연결 개체의 Execute 메서드를 사용하면 데이터베이스 소스에 대해 SQL(구조적 쿼리 언어) 쿼리를 실행하고 결과를 검색할 수 있습니다. SQL은 데이터베이스와 통신하기 위한 업계 표준 언어이며 정보를 검색하고 업데이트하기 위한 많은 명령이 있습니다.
다음 스크립트는 특정 데이터베이스 테이블에 데이터를 삽입하는 SQL INSERT 명령을 사용하여 테이블에서 쿼리를 실행하기 위해 Connection 개체의 Execute 메서드를 사용합니다. 다음 예에서 스크립트는 Jose Lugo라는 이름을 Customers라는 데이터베이스 테이블에 삽입합니다.
<%
'파일 기반 DSN 정의
strDSN = "FILEDSN=MyDatabase.dsn"
'Connection 개체를 인스턴스화하고 데이터베이스 연결을 엽니다.
cn = Server.CreateObject("ADODB.Connection") 설정
cn.strDSN 열기
'SQL SELECT 문 정의
strSQL = "고객(이름, 성) 값에 삽입('Jose','Lugo')"
'Execute 메소드를 사용하여 데이터베이스에 SQL 쿼리를 실행합니다.
cn.실행(strSQL)
%>
DSN 경로 문자열을 기반으로 하는 파일에는 등호(=) 앞뒤에 공백이 포함되어서는 안 됩니다.
SQL INSERT 명령 외에도 SQL UPDATE 및 DELETE 명령을 사용하여 데이터베이스 정보를 변경하고 삭제할 수도 있습니다.
SQL UPDATE 명령을 사용하면 데이터베이스 테이블의 각 항목 값을 변경할 수 있습니다. 다음 스크립트는 UPDATE 명령을 사용하여 LastName 필드에 Smith라는 성이 포함된 Customers 테이블의 각 레코드에 대한 FirstName 필드를 Jeff로 변경합니다.
<%
cn = Server.CreateObject("ADODB.Connection") 설정
cn.Open "FILEDSN=MyDatabase.dsn"
cn.Execute "고객 업데이트 SET FirstName = 'Jeff' WHERE LastName = 'Smith'"
%>
데이터베이스 테이블에서 특정 레코드를 삭제하려면 SQL DELETE 명령을 사용하십시오. 다음 스크립트는 Customers 테이블에서 성이 Smith인 모든 행을 삭제합니다.
<%
cn = Server.CreateObject("ADODB.Connection") 설정
cn.Open "FILEDSN=MyDatabase.dsn"
cn."성 = 'Smith'인 고객에서 삭제"를 실행합니다.
%>
참고 SQL DELETE 명령을 사용할 때는 주의해야 합니다. WHERE 절 없이 DELETE 명령을 사용하면 테이블의 모든 행이 삭제됩니다. 삭제할 정확한 행을 지정하려면 SQL WHERE 절을 포함해야 합니다.
레코드 집합 개체를 사용하여 결과 처리 Connection 개체는 데이터베이스에 연결하고 쿼리하는 작업을 단순화하지만 Connection 개체에는 여전히 많은 단점이 있습니다. 특히, 데이터베이스 정보를 검색하고 표시하는 연결 개체는 스크립트를 만드는 데 사용할 수 없습니다. 쿼리를 사용하여 변경 사항을 구현하려면 먼저 데이터베이스에 적용하려는 변경 사항을 정확히 알아야 합니다.
데이터 검색, 결과 확인 및 데이터베이스 변경을 위해 ADO는 Recordset 개체를 제공합니다. 이름에서 알 수 있듯이 Recordset 개체에는 쿼리 제약 조건에 따라 데이터베이스 행 집합 또는 "레코드"를 검색하고 표시하는 데 사용할 수 있는 다양한 기능이 있습니다. Recordset 개체는 쿼리에서 반환된 레코드의 위치를 보유하므로 한 번에 하나씩 결과를 살펴볼 수 있습니다.
Recordset 개체의 PointerType 속성 설정에 따라 레코드를 스크롤하고 업데이트할 수 있습니다. 데이터베이스 포인터를 사용하면 레코드 집합 내에서 특정 항목을 찾을 수 있습니다. 포인터는 레코드를 검색하고 조사한 다음 해당 레코드를 기반으로 작업을 수행하는 데에도 사용됩니다. Recordset 개체에는 포인터의 동작을 정밀하게 제어할 수 있는 속성이 있어 결과를 검사하고 업데이트하는 능력이 향상됩니다. 예를 들어 CursorType 및 CursorLocation 속성을 사용하여 포인터 유형을 설정하고, 결과를 클라이언트 애플리케이션에 반환하고(결과는 일반적으로 데이터베이스 서버에 유지됨), 다른 사용자가 데이터베이스에 적용한 마지막 변경 사항을 표시할 수 있습니다. .
레코드 검색 성공적인 데이터베이스 응용 프로그램은 연결 개체를 사용하여 링크를 설정하고 Recordset 개체를 사용하여 반환된 데이터를 처리합니다. 두 개체의 특정 기능을 "조정"함으로써 거의 모든 데이터 처리 작업을 수행할 수 있는 데이터베이스 응용 프로그램을 개발할 수 있습니다. 예를 들어 다음 서버측 스크립트는 Recordset 개체를 사용하여 SQL SELECT 명령을 실행합니다. SELECT 명령은 쿼리 제한 사항을 기반으로 정보 집합을 검색합니다. 쿼리에는 쿼리 범위를 좁히는 데 사용되는 SQL WHERE 절도 포함되어 있습니다. 이 예에서 WHERE 절은 Customers 데이터베이스 테이블에 Smith라는 성을 포함하는 모든 레코드로 쿼리를 제한합니다.
<%
'데이터 소스와 연결 설정
strDSN = "FILEDSN=MyDatabase.dsn"
cn = Server.CreateObject("ADODB.Connection") 설정
cn.strDSN 열기
'Recordset 개체를 인스턴스화합니다.
rsCustomers = Server.CreateObject("ADODB.Recordset") 설정
'Open 메서드를 사용하여 레코드세트 열기
' 그리고 Connection 개체에 의해 설정된 연결을 사용합니다.
strSQL = "성 = 'Smith'인 고객에서 FirstName, LastName을 선택하세요."
rsCustomers.Open strSQL, cn
'레코드 세트를 순환하고 결과를 표시합니다.
' 그리고 MoveNext 메서드를 사용하여 레코드 위치를 증가시킵니다.
objFirstName = rsCustomers("FirstName") 설정
objLastName = rsCustomers("LastName") 설정
rsCustomers.EOF까지 수행
Response.Write objFirstName & " " & objLastName & "<BR>"
rsCustomers.MoveNext
고리
%>
이전 예제에서는 데이터베이스 연결을 설정하는 데 Connection 개체가 사용되었고 데이터베이스에서 결과를 검색하는 데 Recordset 개체가 이 연결을 사용했습니다. 이 방법은 데이터베이스에 대한 링크를 설정하는 방법을 정확하게 설정해야 할 때 유용합니다. 예를 들어 연결 시도가 실패할 때까지 기다려야 하는 시간을 지정해야 하는 경우 연결 개체를 사용하여 속성을 설정해야 합니다. 그러나 ADO의 기본 연결 속성을 사용하여 연결만 설정하려면 Recordset 개체의 Open 메서드를 사용하여 링크를 설정해야 합니다.
<%
strDSN = "FILEDSN=MyDatabase.dsn"
strSQL = "성 = 'Smith'인 고객에서 FirstName, LastName을 선택하세요."
rsCustomers = Server.CreateObject("ADODB.Recordset") 설정
'Open 메소드를 사용하여 연결 열기
'그리고 Connection 개체에 의해 설정된 연결을 사용합니다.
rsCustomers.Open strSQL, strDSN
'레코드 세트를 순환하고 결과를 표시합니다.
' 그리고 MoveNext 메서드를 사용하여 레코드 위치를 증가시킵니다.
objFirstName = rsCustomers("FirstName") 설정
objLastName = rsCustomers("LastName") 설정
rsCustomers.EOF까지 수행
Response.Write objFirstName & " " & objLastName & "<BR>"
rsCustomers.MoveNext
고리
%>
Recordset 개체의 Open 메서드를 사용하여 연결을 설정하는 경우 연결 보안을 보장하기 위해 Connection 개체를 사용해야 합니다.
Command 개체를 사용하여 쿼리 개선 ADO Command 개체를 사용하면 Connection 및 Recordset 개체에서와 마찬가지로 쿼리를 실행할 수 있습니다. 유일한 차이점은 Command 개체를 사용하면 데이터베이스에서 쿼리를 준비, 컴파일 및 반복할 수 있다는 것입니다. 다른 값 세트를 사용하여 소스를 문의하십시오. 이러한 방식으로 쿼리를 컴파일하면 기존 쿼리에 대해 수정된 요청을 반복적으로 발행하는 데 필요한 시간을 최소화할 수 있다는 이점이 있습니다. 또는 쿼리의 변수 부분에 대한 옵션을 통해 실행하기 전에 SQL 쿼리를 부분적으로 정의되지 않은 상태로 둘 수 있습니다.
Command 개체의 매개변수 컬렉션을 사용하면 쿼리가 다시 실행될 때마다 쿼리를 다시 작성하는 수고를 덜 수 있습니다. 예를 들어, 재고 기반 웹 시스템에서 공급 및 가격 정보를 정기적으로 업데이트해야 하는 경우 다음과 같이 쿼리를 미리 정의할 수 있습니다.
<%
'Connection 개체를 사용하여 연결 열기 Command 개체
'연결을 설정하기 위한 Open 메서드가 없습니다.
strDSN = "FILEDSN=MyDatabase.dsn"
cn = Server.CreateObject("ADODB.Connection") 설정
cn.strDSN 열기
'명령 개체를 인스턴스화하고 ActiveConnection 속성을 사용하여 연결합니다.
'명령 개체에 연결
cm= Server.CreateObject("ADODB.Command") 설정
cm.ActiveConnection = cn으로 설정
'SQL 쿼리 정의
cm.CommandText = "인벤토리에 삽입(자재, 수량) 값(?, ?)"
'CommandText에 지정된 쿼리의 준비된(또는 미리 컴파일된) 버전을 저장합니다.
Command 개체가 처음 실행되기 전의 '속성입니다.
cm.준비됨 = True
'쿼리 매개변수 구성 정보 정의
cm.Parameters.Append cm.CreateParameter("material_type",200, ,255 )
cm.Parameters.Append cm.CreateParameter("수량",200, ,255 )
'첫 번째 삽입 정의 및 실행
cm("material_type") = "전구"
cm("수량") = "40"
cm.실행
'두 번째 삽입 정의 및 실행
cm("material_type") = "퓨즈"
cm("수량") = "600"
cm.실행
%>
위의 예를 확인하면 스크립트가 쿼리를 다시 정의하고 데이터베이스 소스에 다시 보내지 않고 다른 값으로 SQL 쿼리를 반복적으로 빌드하고 실행하는 것을 알 수 있습니다. Command 개체를 사용하여 쿼리를 컴파일하면 SQL 쿼리로 인해 발생하는 문자열 및 테이블 변수 병합 문제도 방지됩니다. 특히 Command 개체의 Parameter 컬렉션을 사용하면 문자열, 날짜 및 시간 변수 유형 정의와 관련된 문제를 피할 수 있습니다. 예를 들어 "'"가 포함된 SQL 쿼리 값으로 인해 쿼리가 실패할 수 있습니다.
strSQL = "고객(이름, 성) 값에 삽입('Robert','O'Hara')"
성 O'Hara에는 SQL VALUES 키워드에서 데이터를 나타내는 데 사용되는 "'"와 충돌하는 "'"가 포함되어 있습니다. 쿼리 값을 Command 개체 매개 변수로 바인딩하면 이러한 유형의 문제를 방지할 수 있습니다.
HTML 테이블과 데이터베이스 결합 HTML 테이블이 포함된 웹 페이지에 액세스하면 사용자는 원격으로 데이터베이스를 쿼리하고 특정 정보를 검색할 수 있습니다. ADO를 사용하면 매우 간단한 스크립트를 만들어 사용자 테이블 정보를 수집하고, 사용자 정의 데이터베이스 쿼리를 만들고, 정보를 사용자에게 반환할 수 있습니다. ASP 요청 개체를 사용하면 HTML 테이블에 입력된 정보를 검색하고 이 정보를 SQL 문에 통합할 수 있습니다. 예를 들어, 다음 스크립트 모듈은 HTML 테이블에서 제공하는 정보를 테이블에 삽입합니다. 이 스크립트는 Request 개체의 Form 컬렉션을 사용하여 사용자 정보를 수집합니다.
<%
'Connection 객체를 사용하여 연결을 엽니다.
'연결을 설정하기 위한 Open 메서드가 없습니다.
strDSN = "FILEDSN=MyDatabase.dsn"
cn = Server.CreateObject("ADODB.Connection") 설정
cn.strDSN 열기
'명령 개체 인스턴스화
'그리고 ActiveConnection 속성을 사용하여 연결합니다.
'명령 개체에 연결
cm= Server.CreateObject("ADODB.Command") 설정
cm.ActiveConnection = cn으로 설정
'SQL 쿼리 정의
cm.CommandText = "MySeedsTable에 삽입(유형) 값(?)"
'쿼리 매개변수 구성 정보 정의
cm.Parameters.Append cm.CreateParameter("유형",200, ,255 )
'삽입 정의 및 실행
cm("유형") = 요청("시드 유형")
cm.실행
%>
데이터베이스 연결 관리 수천 명의 고객에게 서비스를 제공하는 온라인 쇼핑 애플리케이션과 같은 강력한 웹 데이터베이스 애플리케이션을 설계할 때 가장 큰 과제는 데이터베이스 연결을 적절하게 관리하는 것입니다. 정보가 전송되지 않는 경우에도 데이터베이스 연결을 열고 유지하면 데이터베이스 서버 리소스가 심하게 소모될 수 있으며 연결 문제가 발생할 수 있습니다. 잘 설계된 웹 데이터베이스 애플리케이션은 데이터베이스 연결을 재활용하고 네트워크 정체로 인한 지연을 보상할 수 있습니다.
연결 시간 초과 발생 활동이 갑자기 증가하면 데이터베이스 서버가 매우 다루기 어려워지고 데이터베이스 연결을 설정하는 데 걸리는 시간이 크게 늘어날 수 있습니다. 결과적으로 과도한 연결 대기 시간은 데이터베이스 성능을 저하시킵니다.
Connection 객체의 ConnectionTimeout을 사용하면 연결 시도를 포기하고 오류 메시지를 발행하기 전에 애플리케이션이 기다리는 시간을 제한할 수 있습니다. 예를 들어, 다음 스크립트는 연결 시도를 취소하기 전에 20초 동안 기다리도록 ConnectionTimeout 속성을 설정합니다.
cn = Server.CreateObject("ADODB.Connection") 설정
cn.ConnectionTimeout = 20
cn.Open "FILEDSN=MyDatabase.dsn"
기본 ConnectionTimeout 속성은 30초입니다.
참고 ConnectionTimeout 속성을 데이터베이스 응용 프로그램에 통합하기 전에 연결 공급자와 데이터 소스가 해당 속성을 지원하는지 확인하십시오.
공유 연결 데이터베이스 연결을 자주 만들고 끊는 웹 데이터베이스 애플리케이션은 데이터베이스 서버 성능을 저하시킬 수 있습니다. ASP는 ODBC 3.5의 공유 기능을 사용하여 효율적인 연결 관리를 지원합니다. 연결 공유는 열린 데이터베이스 연결을 유지하고 여러 사용자 간의 해당 연결 공유를 관리하여 성능을 유지하고 유휴 연결 수를 줄입니다. 각 연결 요청에 대해 연결 풀은 먼저 풀에 유휴 연결이 있는지 여부를 확인합니다. 존재하는 경우 연결 풀은 데이터베이스에 대한 새 연결을 설정하는 대신 연결을 반환합니다.
ODBC 드라이버가 연결 공유에 참여하도록 하려면 데이터베이스 드라이버를 구성하고 Windows NT 레지스트리에서 드라이버의 CPTimeout 속성을 설정해야 합니다. ODBC 연결이 끊어지면 연결이 끊어지지 않고 풀링됩니다. CPTimeout 속성은 연결 풀에서 연결이 유지되는 기간을 결정합니다. 연결이 CPTimeout 설정보다 오랫동안 풀에 남아 있으면 연결이 닫히고 풀에서 제거됩니다. CPTimeout의 기본값은 60초입니다.
다음과 같이 레지스트리 키 세트를 생성하여 CPTimeout 속성을 선택적으로 설정하면 특정 ODBC 데이터베이스 드라이버에 대한 연결 풀링을 활성화할 수 있습니다.
HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INIdriver-nameCPTimeout = 시간 초과
(REG_SZ, 단위는 초 단위)
예를 들어 다음 키는 SQL Server 드라이버의 연결 풀 시간 초과 설정을 180초(3분)로 설정합니다.
HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INISQL ServerCPTimeout = 180
참고 기본적으로 웹 서버는 CPTimeout을 60초로 설정하여 SQL Server의 연결 풀을 활성화합니다.
페이지 간 연결 사용 ASP의 Application 개체에 연결을 저장하여 페이지 간 연결을 재사용할 수 있지만 항상 연결을 열어 두는 것은 불필요하며 연결 풀링의 장점을 최대한 활용하지 못합니다. 많은 사용자가 동일한 ASP 데이터베이스 응용 프로그램에 연결해야 하는 경우 ASP 응용 프로그램 개체에 페이지 간 연결 문자열을 배치하여 데이터베이스 연결을 재사용하는 것이 좋습니다. 예를 들어 다음 스크립트에 표시된 대로 Global.asa 파일의 Application_OnStart 이벤트 프로시저에서 연결 문자열을 지정할 수 있습니다.
애플리케이션.잠금
Application("ConnectionString") = "FILEDSN=MyDatabase.dsn"
응용 프로그램.잠금 해제
그런 다음 데이터베이스에 액세스하는 각 ASP 파일에 다음을 작성합니다.
<OBJECT RUNAT=서버 ID=cn PROGID="ADODB.Connection"> </OBJECT>
연결 개체의 인스턴스를 만들려면 다음 스크립트를 사용하십시오.
cn.응용 프로그램 열기("ConnectionString")
열린 연결의 경우 페이지 끝에 다음 스크립트를 작성하여 연결을 닫을 수 있습니다.
cn.닫기
단일 사용자가 페이지 간 연결을 재사용해야 하는 상황에서는 Application 개체보다는 Session 개체 연결을 사용하는 것이 더 좋습니다.
연결 종료 연결 풀을 보다 효과적으로 활용하려면 가능한 한 빨리 데이터베이스 연결을 종료해야 합니다. 기본적으로 스크립트 실행이 완료된 후 연결이 종료됩니다. 더 이상 필요하지 않은 연결을 닫으면 데이터베이스 서버에 대한 요구가 줄어들고 다른 사용자가 연결을 사용할 수 있게 됩니다.
Connection 개체의 Close 메서드를 사용하여 Connection 개체와 데이터베이스 간의 연결을 종료할 수 있습니다. 다음 스크립트는 연결을 연 다음 닫습니다.
<% strDSN = "FILEDSN=MyDatabase.dsn"
cn = Server.CreateObject("ADODB.Connection") 설정
cn.열기
cn.닫기
%>