액티브엑스 데이터 오브젝트
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
액티브엑스 데이터 오브젝트(ADO)는 데이터베이스 관리 시스템(DBMS)이나 다른 데이터 소스에 연결하고, 데이터를 조작하기 위한 객체 집합이다. 주요 객체로는 연결 객체, 레코드셋 객체, 명령 객체가 있으며, 일반 객체로는 레코드 객체, 스트림 객체, 오류 객체, 필드 객체, 변수 객체, 속성 객체가 있다. ADO는 VBA, VBA for Office 등 다양한 환경에서 지원되며, 데이터베이스 연결 설정, 레코드셋 생성, 데이터 검색 및 처리, 업데이트 등의 기본 사용법을 따른다. ADO.NET은 ADO를 대체하는 .NET 프레임워크 기반의 기술이다.
더 읽어볼만한 페이지
- 마이크로소프트 API - 윈도우 API
윈도우 API는 마이크로소프트 윈도우 운영 체제에서 응용 프로그램이 시스템 기능에 접근하도록 돕는 인터페이스 집합이며, 다양한 버전으로 발전해 왔고, 현재 Win32가 널리 사용되며, 유연성을 제공하지만 복잡하다는 단점을 보완하기 위해 다양한 래퍼 라이브러리가 개발되었다. - 마이크로소프트 API - WinFS
WinFS는 마이크로소프트가 개발한 파일 시스템으로, 검색 기능 내장 및 메타데이터 관리를 통해 데이터 관리 효율성을 높이는 것을 목표로 했으나 별도 제품으로 출시되지는 못하고 핵심 기능들이 윈도우 비스타 이후 기술에 통합되었다.
액티브엑스 데이터 오브젝트 |
---|
2. 종류
- 주요 객체
- * 연결 객체
- * 레코드셋 객체
- * 명령 객체
- 일반 객체
- * 레코드 객체
- * 스트림 객체
- * 오류 객체
- * 필드 객체
- * 변수 객체
- * 속성 객체
2. 1. 주요 객체
ADO는 다음과 같은 주요 객체들로 구성된다.- '''Connection (연결)'''
- : DBMS이나 다른 데이터 소스에 대한 연결을 설정한다. 데이터베이스에 쿼리를 보낼 수도 있다.
- '''Recordset (레코드셋)'''
- : 레코드 그룹인 결과 응답이 들어 있다.
- '''Command (명령)'''
- : SQL 명령어를 대표한다.
2. 2. 컬렉션
ADO는 다음과 같은 컬렉션들을 포함하고 있다.; 필드
: 이 컬렉션은 `Field` 객체의 집합을 포함한다. 이 컬렉션은 `Recordset` 객체 또는 `Record` 객체에서 사용할 수 있다. `Recordset` 객체에서 `Fields` 컬렉션을 구성하는 각 `Field` 객체는 해당 `Recordset` 객체의 열에 해당한다. `Record` 객체에서 `Field`는 네임스페이스의 트리 구조를 가리키는 절대 또는 상대 URL(Microsoft OLE DB Provider for Internet Publishing과 같은 반구조적 데이터 공급자에 사용됨)이거나 해당 `Record` 객체와 연결된 기본 `Stream` 객체에 대한 참조일 수 있다.
; 속성
: 객체는 여러 `Property` 객체를 가질 수 있으며, 이 객체는 객체의 `Properties` 컬렉션에 포함되어 있다.
; 매개 변수
: `Command` 객체는 미리 정의된 동작을 변경하기 위해 여러 `Parameter` 명령을 가질 수 있으며, 각 `Parameter` 객체는 `Command` 객체의 `Parameters` 컬렉션에 포함되어 있다.
; 오류
: 공급자가 생성한 모든 오류는 `Error` 객체의 컬렉션으로 전달되며, `Errors` 컬렉션 자체는 `Connection` 객체에 포함되어 있다. ADO 작업으로 인해 오류가 발생하면 컬렉션이 지워지고 컬렉션에 새로운 `Error` 객체 그룹이 생성된다.
2. 3. 기타 객체
- 일반 객체
- * 레코드 객체
- * 스트림 객체
- * 오류 객체
- * 필드 객체
- * 변수 객체
- * 속성 객체
3. ADO 객체의 상세
ADO는 연결(Connection), 명령(Command), 레코드 집합(Recordset), 레코드(Record), 스트림(Stream), 매개변수(Parameter), 필드(Field), 속성(Property), 오류(Error) 등의 객체를 포함한다.
- Connection (연결): OLE DB를 통해 데이터베이스에 연결하는 역할을 한다. 자세한 내용은 Connection(연결) 하위 섹션을 참조하라.
- Command (명령): 데이터베이스에 쿼리를 보내는 데 사용된다. 자세한 내용은 Command(커맨드) 하위 섹션을 참조하라.
- Recordset (레코드 집합): 쿼리 결과나 테이블 데이터를 담는 객체이다. 자세한 내용은 Recordset(레코드 세트) 하위 섹션을 참조하라.
- Record (레코드): 데이터베이스의 한 행(row)을 나타낸다. 자세한 내용은 Record(레코드) 하위 섹션을 참조하라.
- Stream (스트림): 데이터를 읽고 쓰는 데 사용된다. 자세한 내용은 Stream(스트림) 하위 섹션을 참조하라.
- Parameter (매개변수): 저장 프로시저 등에 값을 전달하는 데 사용된다. 자세한 내용은 Parameter(파라미터) 하위 섹션을 참조하라.
- Field (필드): 레코드 집합이나 레코드의 한 열(column)을 나타낸다. 자세한 내용은 Field(필드) 하위 섹션을 참조하라.
- Property (속성): OLE DB 공급자의 기능을 정의한다. 자세한 내용은 Property(프로퍼티) 하위 섹션을 참조하라.
- Error (오류): OLE DB 공급자 오류 정보를 담는다. 자세한 내용은 Error(에러) 하위 섹션을 참조하라.
3. 1. Connection(연결)
연결 객체는 OLE DB를 통해 데이터 저장소에 연결하는 ADO의 연결이다. 연결 객체는 세션에 대한 정보를 저장하고 데이터 저장소에 연결하는 메서드를 제공한다. 일부 데이터 저장소는 연결을 설정하는 다른 메서드를 가지고 있으므로 특정 OLE DB 공급자에 대한 연결 객체에서 일부 메서드가 지원되지 않을 수 있다. 연결 객체는 키-값 쌍 목록(예: "Provider='SQLOLEDB';Data Source='TheSqlServer'; Initial Catalog='Northwind';Integrated Security='SSPI';")으로 연결을 지정하는 연결 문자열을 사용하여 'Open' 메서드를 통해 데이터 저장소에 연결한다. 이 연결 문자열의 시작 부분은 연결 객체에서 필요로 하는 데이터 저장소 연결 유형을 식별해야 한다.- OLE DB 공급자(예: SQLOLEDB)는 "provider=" 구문을 사용한다.
- 파일 이름은 "file name=" 구문을 사용한다.
- 원격 공급자 및 서버(RDS 참조)는 "Remote provider=" 및 "Remote server=" 구문을 사용한다.
- 절대 URL은 "URL=" 구문을 사용한다.
3. 2. Command(커맨드)
연결 객체가 데이터 소스에 대한 세션을 설정한 후, 명령 객체를 통해 데이터 공급자에게 명령이 전송된다. 명령 객체는 `CommandText` 속성을 사용하여 SQL 쿼리를 직접 공급자에게 전송하거나, `Parameter` 객체 또는 `Parameters` 컬렉션을 사용하여 매개변수화된 쿼리 또는 저장 프로시저를 보낼 수 있다. 또한 `Execute` 메서드를 통해 쿼리를 실행하고 결과를 데이터 집합 객체로 반환할 수 있다. `Stream`, `RecordSet` 또는 `Connection` 객체와 같이 다른 객체와 관련된 명령 객체에서 사용할 수 있는 여러 가지 다른 메서드가 있다.3. 3. Recordset(레코드 세트)
레코드 집합은 레코드 그룹이며, 기본 테이블에서 가져오거나 테이블에 대한 쿼리의 결과로 나타날 수 있다. RecordSet 객체에는 Fields 컬렉션과 Properties 컬렉션이 포함되어 있다. Fields 컬렉션은 테이블의 해당 열인 Field 객체 집합이다. Properties 컬렉션은 OLE DB 공급자의 특정 기능을 정의하는 Property 객체 집합이다. RecordSet에는 내부에 존재하는 데이터를 검사하기 위한 수많은 메서드와 속성이 있다. 레코드의 값을 변경한 다음 Update 또는 UpdateBatch 메서드를 호출하여 레코드 집합에서 레코드를 업데이트할 수 있다.레코드 집합의 잠금 방식은 다음과 같다.
- Immediate(즉시): adLockOptimistic 또는 adLockPessimistic 잠금을 사용한다. 레코드가 변경되고 Update 메서드가 호출된 후 데이터 소스에서 데이터가 업데이트된다.
- Batch(일괄 처리): adLockBatchOptimistic 잠금을 사용하며 Update가 호출될 때마다 데이터가 임시 버퍼에서 업데이트된다. 마지막으로 UpdateBatch가 호출되면 데이터는 데이터 소스로 완전히 업데이트된다. 모든 작업이 메모리에서 수행되므로 문제가 발생하면 UpdateCancel이 호출되고 업데이트가 데이터 소스로 전송되지 않는다.
- Transaction(트랜잭션): OLE DB 공급자가 허용하는 경우 트랜잭션을 사용할 수 있다. 트랜잭션을 시작하려면 BeginTrans 메서드를 호출하고 필요한 업데이트를 수행한다. 모든 작업이 완료되면 CommitTrans 메서드를 호출한다. RollbackTrans를 호출하여 트랜잭션 내에서 이루어진 모든 변경 사항을 취소하고 트랜잭션이 시작되기 전의 상태로 데이터베이스를 롤백할 수 있다.
3. 4. Record(레코드)
이 객체는 데이터베이스의 한 레코드를 나타내며 필드 컬렉션을 포함한다. RecordSet은 Record 객체의 컬렉션으로 구성된다.3. 5. Stream(스트림)
주로 레코드 집합 객체에서 사용되는 스트림은 바이트 스트림을 읽고 쓰는 수단이다. XML영어 형식으로 레코드 집합을 저장하고, CommandText영어 객체 대신 OLE DB영어 공급자에게 명령을 보내고, 바이너리 또는 텍스트 파일의 내용을 포함하는 데 주로 사용된다.3. 6. Parameter(파라미터)
매개변수는 일반적인 기능의 동작을 변경하는 수단이다. 예를 들어, 저장 프로시저는 수행해야 하는 작업에 따라 다른 매개변수를 전달받을 수 있으며, 이를 매개변수화된 명령이라고 한다.3. 7. Field(필드)
이 컬렉션은 Field 객체의 집합을 포함하며, Recordset 객체 또는 Record 객체에서 사용할 수 있다. Recordset 객체에서 Fields 컬렉션을 구성하는 각 Field 객체는 해당 Recordset 객체의 열에 해당한다. Record 객체에서 Field는 네임스페이스의 트리 구조를 가리키는 절대 또는 상대 URL(Microsoft OLE DB Provider for Internet Publishing과 같은 반구조적 데이터 공급자에 사용됨)이거나, 해당 Record 객체와 연결된 기본 Stream 객체에 대한 참조일 수 있다. 각 Record 객체에는 많은 필드가 포함되어 있으며, RecordSet 객체에도 해당 Field 객체가 있다. RecordSet 객체의 Field 객체는 참조하는 데이터베이스 테이블의 열에 해당한다.3. 8. Property(프로퍼티)
객체는 여러 Property 객체를 가질 수 있으며, 이 객체는 객체의 Properties 컬렉션에 포함되어 있다. Property 객체는 OLE DB 공급자에 고유하며 공급자가 구현한 기능을 정의한다. 속성 객체는 기본 제공 속성(ADO에서 이미 구현되어 변경할 수 없는 잘 정의된 속성)이거나, 기본 데이터 공급자가 정의하고 변경할 수 있는 동적 속성일 수 있다.3. 9. Error(에러)
공급자가 생성한 모든 오류는 Error 객체의 컬렉션으로 전달되며, Errors 컬렉션 자체는 ADO의 Connection 객체에 포함된다. ADO 작업으로 인해 오류가 발생하면 Errors 컬렉션이 지워지고 새 Error 객체 그룹이 생성된다.RecordSet 또는 Field 객체와 같이 데이터를 조작할 때 발생하는 오류는 Error 객체에 들어가지 않고, Status 속성에 저장된다.
4. 기본 사용법
ADO를 사용하여 데이터에 접근하고 이용하는 기본적인 과정은 다음과 같다.
# 데이터베이스 연결 객체를 생성한다.
# 레코드셋 객체를 생성한다.
# 연결을 연다.
# `open` 함수에 원하는 테이블 이름이나 SQL 명령을 전달하여 레코드셋을 연다.
# 데이터를 가져와서(fetch) 검색 및 처리한다.
# `Update`나 `UpdateBatch` 메서드를 사용하여 변경 사항을 저장한다.
# 레코드셋과 연결을 닫는다.
4. 1. ASP 예제
다음은 ADO를 사용하여 "Phonebook" 테이블에서 "PhoneNumber"가 "555-5555"와 같은 "Name" 필드를 선택하는 ASP 예제이다.```vbscript
dim myconnection, myrecordset, name
set myconnection = server.createobject("ADODB.Connection")
set myrecordset = server.createobject("ADODB.Recordset")
myconnection.open mydatasource
myrecordset.open "Phonebook", myconnection
myrecordset.find "PhoneNumber = '555-5555'"
name = myrecordset.fields.item("Name")
myrecordset.close
set myrecordset = nothing
set myconnection = nothing
```
이는 레코드 집합 객체의 기능 대신 일반 SQL을 사용하는 다음 ASP 코드와 동일하다.
```vbscript
dim myconnection, myrecordset, name
set myconnection = server.createobject("ADODB.connection")
myconnection.open mydatasource
set myrecordset = myconnection.execute("SELECT Name FROM Phonebook WHERE PhoneNumber = '555-5555'")
name = myrecordset(0)
4. 2. VBA 예제
vbDim myconnection As New ADODB.Connection
Dim myrecordset As New ADODB.Recordset
Set myconnection = CurrentProject.AccessConnection
myrecordset.Open "items", myconnection, adOpenKeyset, adLockOptimistic, adCmdTable
myrecordset.Find "item_code = 'GI8293-23'"
If (Not myrecordset.EOF) Then 'If the specified criteria cannot be satisfied, then the current record is EOF
myrecordset!item_name = "My New Item"
End If
myrecordset.Update 'Actually commit the update to the data source
myrecordset.Close
myconnection.Close
5. 소프트웨어 지원
ADO는 VBA와 VBA for Office에서 지원을 받을 수 있다. ADO는 바이너리 COM 인터페이스에 바인딩을 지원하는 모든 개발 언어에서 지원된다. 이러한 언어에는 ASP, 델파이, 파워빌더, VBA가 포함된다. ADO 지원은 dBase Plus 8에 추가되었다.
6. 레거시
ADO.NET은 C#/.NET이 C/Win32를 윈도우 애플리케이션 개발의 주된 방식으로 대체한 것과 마찬가지로 ADO를 대체했다. ADO.NET은 ADO와 동일한 설계 패턴을 따라, ADO 개발자가 .NET 프레임워크로 전환할 때 쉽게 적응할 수 있도록 한다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com