CDatabase
수업
데이터 소스 작업을 할 수 있는 통로인 데이터 소스에 대한 연결을 나타냅니다.
구문
class CDatabase : public CObject
멤버
공용 생성자
속성 | 설명 |
---|---|
CDatabase::CDatabase |
CDatabase 개체를 생성합니다. 호출하거나 Open .를 호출 OpenEx 하여 개체를 초기화해야 합니다. |
공용 메서드
이름 | 설명 |
---|---|
CDatabase::BeginTrans |
연결된 데이터 원본에서 클래스의 , 및 멤버 함수에 AddNew Edit Delete 대한 일련의 되돌릴 수 있는 호출인 "transaction"을 시작합니다 CRecordset .Update 데이터 원본은 영향을 미치려면 트랜잭션을 BeginTrans 지원해야 합니다. |
CDatabase::BindParameters |
를 호출 CDatabase::ExecuteSQL 하기 전에 매개 변수를 바인딩할 수 있습니다. |
CDatabase::Cancel |
두 번째 스레드에서 비동기 작업 또는 프로세스를 취소합니다. |
CDatabase::CanTransact |
데이터 원본이 트랜잭션을 지원하는 경우 0이 아닌 값을 반환합니다. |
CDatabase::CanUpdate |
개체를 CDatabase 업다이팅할 수 있으면 0이 아닌 값을 반환합니다(읽기 전용이 아님). |
CDatabase::Close |
데이터 원본 연결을 닫습니다. |
CDatabase::CommitTrans |
에 의해 BeginTrans 시작된 트랜잭션을 완료합니다. 데이터 원본을 변경하는 트랜잭션의 명령이 수행됩니다. |
CDatabase::ExecuteSQL |
SQL 문을 실행합니다. 데이터 레코드가 반환되지 않습니다. |
CDatabase::GetBookmarkPersistence |
책갈피가 레코드 집합 개체에 유지되는 작업을 식별합니다. |
CDatabase::GetConnect |
개체를 데이터 원본에 연결하는 CDatabase 데 사용되는 ODBC 연결 문자열 반환합니다. |
CDatabase::GetCursorCommitBehavior |
열려 있는 레코드 집합 개체에서 트랜잭션을 커밋하는 효과를 식별합니다. |
CDatabase::GetCursorRollbackBehavior |
열려 있는 레코드 집합 개체에서 트랜잭션을 롤백하는 효과를 식별합니다. |
CDatabase::GetDatabaseName |
현재 사용 중인 데이터베이스의 이름을 반환합니다. |
CDatabase::IsOpen |
개체가 현재 데이터 원본에 CDatabase 연결된 경우 0이 아닌 값을 반환합니다. |
CDatabase::OnSetOptions |
표준 연결 옵션을 설정하기 위해 프레임워크에서 호출됩니다. 기본 구현은 쿼리 시간 제한 값을 설정합니다. 를 호출 SetQueryTimeout 하여 이러한 옵션을 미리 설정할 수 있습니다. |
CDatabase::Open |
데이터 원본에 대한 연결을 설정합니다(ODBC 드라이버를 통해). |
CDatabase::OpenEx |
데이터 원본에 대한 연결을 설정합니다(ODBC 드라이버를 통해). |
CDatabase::Rollback |
현재 트랜잭션 중에 변경된 내용을 반대로 바꿉니다. 데이터 원본은 호출 시 BeginTrans 정의된 대로 이전 상태로 돌아갑니다. |
CDatabase::SetLoginTimeout |
데이터 원본 연결 시도 시간이 초과되는 시간(초)을 설정합니다. |
CDatabase::SetQueryTimeout |
데이터베이스 쿼리 작업 시간이 초과되는 시간(초)을 설정합니다. 모든 후속 레코드 집합 Open , AddNew 및 Edit 호출에 Delete 영향을 줍니다. |
공용 데이터 멤버
속성 | 설명 |
---|---|
CDatabase::m_hdbc |
데이터 원본에 대한 ODBC(데이터베이스 연결) 연결 핸들을 엽니다. HDBC를 입력 합니다. |
설명
데이터 원본은 일부 DBMS(데이터베이스 관리 시스템)에서 호스트하는 데이터의 특정 인스턴스입니다. 예를 들어 Microsoft SQL Server, Microsoft Access, Borland dBASE 및 xBASE가 있습니다. 애플리케이션에서 한 번에 하나 이상의 CDatabase
개체를 활성화할 수 있습니다.
참고 항목
ODBC(Open Database Connectivity) 클래스 대신 DAO(Data Access Objects) 클래스를 사용하는 경우 대신 클래스 CDaoDatabase
를 사용합니다. 자세한 내용은 개요: 데이터베이스 프로그래밍 문서를 참조하세요.
사용 CDatabase
하려면 개체를 CDatabase
생성하고 해당 멤버 함수를 호출합니다 OpenEx
. 그러면 연결이 열립니다. 그런 다음 연결된 데이터 원본에서 작동할 개체를 생성 CRecordset
할 때 레코드 집합 생성자에 포인터를 개체에 전달합니다 CDatabase
. 연결 사용을 마치면 멤버 함수를 Close
호출하고 개체를 삭제합니다 CDatabase
. Close
이전에 닫지 않은 레코드 집합을 닫습니다.
자세한 CDatabase
내용은 ODBC(데이터 원본) 및 개요: 데이터베이스 프로그래밍 문서를 참조하세요.
상속 계층 구조
CDatabase
요구 사항
머리글: afxdb.h
CDatabase::BeginTrans
이 멤버 함수를 호출하여 연결된 데이터 원본으로 트랜잭션을 시작합니다.
BOOL BeginTrans();
Return Value
호출이 성공하고 변경 내용이 수동으로만 커밋된 경우 0이 아닌 경우 그렇지 않으면 0입니다.
설명
트랜잭션은 개체의 , Edit
및 Update
Delete
멤버 함수에 AddNew
대한 하나 이상의 호출로 CRecordset
구성됩니다. 트랜잭션 CDatabase
을 시작하기 전에 해당 또는 Open
멤버 함수를 호출 OpenEx
하여 개체가 데이터 원본에 이미 연결되어 있어야 합니다. 트랜잭션을 종료하려면 데이터 원본에 대한 모든 변경 내용을 수락하거나 이를 수행하도록 호출 CommitTrans
하거나 전체 트랜잭션을 중단하도록 호출 Rollback
합니다. 트랜잭션과 관련된 레코드 집합을 열고 실제 업데이트 작업에 최대한 가깝게 호출 BeginTrans
합니다.
주의
ODBC 드라이버에 따라 호출하기 전에 레코드 집합을 열면 호출 BeginTrans
Rollback
시 문제가 발생할 수 있습니다. 사용 중인 특정 드라이버를 확인해야 합니다. 예를 들어 Microsoft ODBC 데스크톱 드라이버 팩 3.0에 포함된 Microsoft Access 드라이버를 사용하는 경우 열려 있는 커서가 있는 데이터베이스에서 트랜잭션을 시작해서는 안 된다는 Jet 데이터베이스 엔진의 요구 사항을 고려해야 합니다. MFC 데이터베이스 클래스에서 열린 커서는 열린 CRecordset
개체를 의미합니다. 자세한 내용은 Technical Note 68을 참조 하세요.
BeginTrans
는 요청된 동시성 및 데이터 원본의 기능에 따라 서버의 데이터 레코드를 잠글 수도 있습니다. 데이터 잠금에 대한 자세한 내용은 Recordset: Locking Records(ODBC) 문서를 참조하세요.
사용자 정의 트랜잭션은 ODBC(Transaction) 문서에 설명되어 있습니다.
BeginTrans
는 트랜잭션 시퀀스를 롤백(반전)할 수 있는 상태를 설정합니다. 롤백에 대한 새 상태를 설정하려면 현재 트랜잭션을 커밋한 다음 다시 호출 BeginTrans
합니다.
주의
호출하지 않고 다시 호출 BeginTrans
CommitTrans
하거나 Rollback
오류입니다.
멤버 함수를 호출하여 드라이버가 CanTransact
지정된 데이터베이스에 대한 트랜잭션을 지원하는지 여부를 확인합니다. 또한 커서 보존에 대한 지원을 호출 GetCursorCommitBehavior
하고 GetCursorRollbackBehavior
확인해야 합니다.
트랜잭션에 대한 자세한 내용은 ODBC(Transaction) 문서를 참조하세요.
예시
트랜잭션: 레코드 집합에서 트랜잭션 수행(ODBC) 문서를 참조하세요.
CDatabase::BindParameters
를 호출CDatabase::ExecuteSQL
하기 전에 매개 변수를 바인딩해야 하는 경우 재정 BindParameters
의합니다.
virtual void BindParameters(HSTMT hstmt);
매개 변수
hstmt
매개 변수를 바인딩할 ODBC 문 핸들입니다.
설명
이 방법은 저장 프로시저의 결과 집합이 필요하지 않은 경우에 유용합니다.
재정의에서 호출 SQLBindParameters
및 관련 ODBC 함수를 호출하여 매개 변수를 바인딩합니다. MFC는 호출하기 전에 재정의를 호출합니다 ExecuteSQL
. 당신은 호출 SQLPrepare
할 필요가 없습니다; ExecuteSQL
호출 SQLExecDirect
하고 hstmt
한 번만 사용되는 파괴.
CDatabase::Cancel
이 멤버 함수를 호출하여 데이터 원본이 진행 중인 비동기 작업 또는 두 번째 스레드의 프로세스를 취소하도록 요청합니다.
void Cancel();
설명
MFC ODBC 클래스는 더 이상 비동기 처리를 사용하지 않습니다. 비동기 작업을 수행하려면 ODBC API 함수 SQLSetConnectOption
를 직접 호출해야 합니다. 자세한 내용은 비동기 실행을 참조하세요.
CDatabase::CanTransact
데이터베이스에서 트랜잭션을 허용하는지 여부를 확인하려면 이 멤버 함수를 호출합니다.
BOOL CanTransact() const;
Return Value
이 CDatabase
개체를 사용하는 레코드 집합에서 트랜잭션을 허용하는 경우 0이 아니고, 그렇지 않으면 0입니다.
설명
트랜잭션에 대한 자세한 내용은 ODBC(Transaction) 문서를 참조하세요.
CDatabase::CanUpdate
이 멤버 함수를 호출하여 개체에서 CDatabase
업데이트를 허용하는지 여부를 확인합니다.
BOOL CanUpdate() const;
Return Value
개체가 CDatabase
업데이트를 허용하는 경우 0이 아니고, 그렇지 않으면 개체를 열 CDatabase
때 전달했거나 TRUE
bReadOnly
데이터 원본 자체가 읽기 전용임을 나타내는 0입니다. 반환y
을 위해 ODBC API 함수 SQLGetInfo
SQL_DATASOURCE_READ_ONLY
를 호출하는 경우 데이터 원본은 읽기 전용입니다.
설명
모든 드라이버가 업데이트를 지원하지는 않습니다.
CDatabase::CDatabase
CDatabase
개체를 생성합니다.
CDatabase();
설명
개체를 생성한 후에는 OpenEx
해당 또는 Open
멤버 함수를 호출하여 지정된 데이터 원본에 대한 연결을 설정해야 합니다.
문서 클래스에 개체를 포함하는 CDatabase
것이 편리할 수 있습니다.
예시
이 예제에서는 파생 클래스에서 사용하는 CDatabase
방법을 CDocument
보여 줍니다.
// This fragment is taken from the declaration for CMyDatabaseDoc
// CMyDatabaseDoc is derived from CDocument.
public:
// Declare a CDatabase embedded in the document
CDatabase m_dbCust;
// Initialize when needed
CDatabase *CMyDatabaseDoc::GetDatabase()
{
// Connect the object to a data source
if (!m_dbCust.IsOpen() && !m_dbCust.OpenEx(NULL))
return NULL;
return &m_dbCust;
}
CDatabase::Close
데이터 원본에서 연결을 끊으려면 이 멤버 함수를 호출합니다.
virtual void Close();
설명
이 멤버 함수를 호출하기 전에 개체와 연결된 레코드 집합을 CDatabase
닫아야 합니다. Close
개체를 CDatabase
삭제하지 않으므로 동일한 데이터 원본 또는 다른 데이터 원본에 대한 새 연결을 열어 개체를 다시 사용할 수 있습니다.
데이터베이스를 AddNew
사용하는 모든 보류 중 또는 Edit
레코드 집합 문이 취소되고 보류 중인 모든 트랜잭션이 롤백됩니다. 개체에 종속된 CDatabase
모든 레코드 집합은 정의되지 않은 상태로 남아 있습니다.
예시
// Close the current connection
m_dbCust.Close();
// Perhaps connect the object to a
// different data source
m_dbCust.OpenEx(_T("DSN=MFC_ODBCTest;UID=JOES"));
CDatabase::CommitTrans
트랜잭션을 완료할 때 이 멤버 함수를 호출합니다.
BOOL CommitTrans();
Return Value
업데이트가 성공적으로 커밋된 경우 0이 아닌 경우 그렇지 않으면 0입니다. 실패하면 CommitTrans
데이터 원본의 상태가 정의되지 않습니다. 데이터를 확인하여 상태를 확인해야 합니다.
설명
트랜잭션은 멤버 함수에 대한 호출로 AddNew
Edit
Delete
시작된 개체의 CRecordset
일련의 호출, 및 Update
멤버 함수로 BeginTrans
구성됩니다. CommitTrans
트랜잭션을 커밋합니다. 기본적으로 업데이트는 즉시 커밋됩니다. 호출 BeginTrans
하면 업데이트 약정이 호출될 때까지 CommitTrans
지연됩니다.
트랜잭션을 종료하기 위해 호출 CommitTrans
할 때까지 멤버 함수를 Rollback
호출하여 트랜잭션을 중단하고 데이터 원본을 원래 상태로 둘 수 있습니다. 새 트랜잭션을 시작하려면 다시 호출 BeginTrans
합니다.
트랜잭션에 대한 자세한 내용은 ODBC(Transaction) 문서를 참조하세요.
예시
트랜잭션: 레코드 집합에서 트랜잭션 수행(ODBC) 문서를 참조하세요.
CDatabase::ExecuteSQL
SQL 명령을 직접 실행해야 하는 경우 이 멤버 함수를 호출합니다.
void ExecuteSQL(LPCTSTR lpszSQL);
매개 변수
lpszSQL
실행할 유효한 SQL 명령이 포함된 null로 끝나는 문자열에 대한 포인터입니다. 를 전달할 CString
수 있습니다.
설명
명령을 null로 종료된 문자열로 만듭니다. ExecuteSQL
는 데이터 레코드를 반환하지 않습니다. 레코드에서 작업하려면 레코드 집합 개체를 대신 사용합니다.
데이터 원본에 대한 대부분의 명령은 데이터 선택, 새 레코드 삽입, 레코드 삭제 및 레코드 편집 명령을 지원하는 레코드 집합 개체를 통해 발급됩니다. 그러나 모든 ODBC 기능이 데이터베이스 클래스에서 직접 지원되는 것은 아니므로 때때로 직접 SQL을 호출 ExecuteSQL
해야 할 수 있습니다.
예시
try
{
m_dbCust.ExecuteSQL(
_T("UPDATE Taxes ")
_T("SET Rate = '36' ")
_T("WHERE Name = 'Federal'"));
}
catch (CDBException *pe)
{
// The error code is in pe->m_nRetCode
pe->ReportError();
pe->Delete();
}
CDatabase::GetBookmarkPersistence
특정 작업 후 레코드 집합 개체에 책갈피가 유지되는지 확인하려면 이 멤버 함수를 호출합니다.
DWORD GetBookmarkPersistence() const;
Return Value
레코드 집합 개체에 책갈피를 유지하는 작업을 식별하는 비트 마스크입니다. 자세한 내용은 설명을 참조하세요.
설명
예를 들어 CRecordset::GetBookmark
와 CRecordset::Requery
를 차례로 호출하면 GetBookmark
에서 가져온 책갈피가 더 이상 유효하지 않게 될 수 있습니다. GetBookmarkPersistence
를 호출하기 전에 CRecordset::SetBookmark
를 호출해야 합니다.
다음 테이블에는 GetBookmarkPersistence
의 반환 값에 대해 결합할 수 있는 비트 마스크 값이 나와 있습니다.
비트 마스크 값 | 책갈피 유지 |
---|---|
SQL_BP_CLOSE |
책갈피는 작업 후에 유효합니다 Requery . |
SQL_BP_DELETE |
행의 책갈피는 해당 행에 대한 작업 후에 Delete 유효합니다. |
SQL_BP_DROP |
책갈피는 작업 후에 유효합니다 Close . |
SQL_BP_SCROLL |
책갈피는 모든 작업 후에 Move 유효합니다. 따라서 CRecordset::CanBookmark 에서 반환되는 책갈피가 레코드 집합에서 지원되는지를 쉽게 파악할 수 있습니다. |
SQL_BP_TRANSACTION |
트랜잭션이 커밋되거나 롤백된 후에 책갈피가 유효합니다. |
SQL_BP_UPDATE |
행의 책갈피는 해당 행에 대한 작업 후에 Update 유효합니다. |
SQL_BP_OTHER_HSTMT |
레코드 집합 개체 하나와 연결된 책갈피가 두 번째 레코드 집합에서도 유효합니다. |
이 반환 값에 대한 자세한 내용은 Windows SDK의 ODBC API 함수 SQLGetInfo
를 참조하세요. 책갈피에 대한 자세한 내용은 레코드 집합: 책갈피 및 절대 위치(ODBC) 문서를 참조하세요.
CDatabase::GetConnect
이 멤버 함수를 호출하여 호출 중에 사용되거나 Open
개체를 데이터 원본에 OpenEx
연결 CDatabase
한 연결 문자열 검색합니다.
const CString GetConnect() const;
Return Value
const
CString
호출되었거나 Open
호출된 경우 OpenEx
연결 문자열 포함하는 값입니다. 그렇지 않으면 빈 문자열입니다.
설명
연결 문자열 만드는 방법에 대한 설명을 참조 CDatabase::Open
하세요.
CDatabase::GetCursorCommitBehavior
이 멤버 함수를 호출하여 연산이 열려 있는 CommitTrans
레코드 집합 개체의 커서에 미치는 영향을 결정합니다.
int GetCursorCommitBehavior() const;
Return Value
열려 있는 레코드 집합 개체에 대한 트랜잭션의 영향을 나타내는 값입니다. 자세한 내용은 설명을 참조하세요.
설명
다음 표에서는 가능한 반환 값 GetCursorCommitBehavior
과 열려 있는 레코드 집합에 대한 해당 효과를 나열합니다.
반환 값 | 개체에 미치는 CRecordset 영향 |
---|---|
SQL_CB_CLOSE |
트랜잭션 커밋 직후에 호출 CRecordset::Requery 합니다. |
SQL_CB_DELETE |
트랜잭션 커밋 직후에 호출 CRecordset::Close 합니다. |
SQL_CB_PRESERVE |
작업을 정상적으로 CRecordset 진행합니다. |
이 반환 값에 대한 자세한 내용은 Windows SDK의 ODBC API 함수 SQLGetInfo
를 참조하세요. 트랜잭션에 대한 자세한 내용은 ODBC(Transaction) 문서를 참조하세요.
CDatabase::GetCursorRollbackBehavior
이 멤버 함수를 호출하여 연산이 열려 있는 Rollback
레코드 집합 개체의 커서에 미치는 영향을 결정합니다.
int GetCursorRollbackBehavior() const;
Return Value
열려 있는 레코드 집합 개체에 대한 트랜잭션의 영향을 나타내는 값입니다. 자세한 내용은 설명을 참조하세요.
설명
다음 표에서는 가능한 반환 값 GetCursorRollbackBehavior
과 열려 있는 레코드 집합에 대한 해당 효과를 나열합니다.
반환 값 | 개체에 미치는 CRecordset 영향 |
---|---|
SQL_CB_CLOSE |
트랜잭션 롤백 직후에 호출 CRecordset::Requery 합니다. |
SQL_CB_DELETE |
트랜잭션 롤백 직후에 호출 CRecordset::Close 합니다. |
SQL_CB_PRESERVE |
작업을 정상적으로 CRecordset 진행합니다. |
이 반환 값에 대한 자세한 내용은 Windows SDK의 ODBC API 함수 SQLGetInfo
를 참조하세요. 트랜잭션에 대한 자세한 내용은 ODBC(Transaction) 문서를 참조하세요.
CDatabase::GetDatabaseName
이 멤버 함수를 호출하여 현재 연결된 데이터베이스의 이름을 검색합니다(데이터 원본이 "database"라는 명명된 개체를 정의하는 경우).
CString GetDatabaseName() const;
Return Value
CString
성공하면 데이터베이스 이름을 포함하는 것이고, 그렇지 않으면 빈 CString
이름입니다.
설명
이는 또는 Open
호출에 지정된 OpenEx
DSN(데이터 원본 이름)과 동일하지 않습니다. 반환되는 항목 GetDatabaseName
은 ODBC에 따라 달라집니다. 일반적으로 데이터베이스는 테이블의 컬렉션입니다. 이 엔터티에 이름이 있으면 해당 엔터티를 GetDatabaseName
반환합니다.
예를 들어 제목에 이 이름을 표시할 수 있습니다. ODBC GetDatabaseName
에서 이름을 검색하는 동안 오류가 발생하면 빈 CString
이름을 반환합니다.
CDatabase::IsOpen
이 멤버 함수를 호출하여 개체가 현재 데이터 원본에 CDatabase
연결되어 있는지 여부를 확인합니다.
BOOL IsOpen() const;
Return Value
개체가 CDatabase
현재 연결되어 있으면 0이 아니고, 그렇지 않으면 0입니다.
CDatabase::m_hdbc
"연결 핸들"인 ODBC 데이터 원본 연결에 대한 공용 핸들을 포함합니다.
설명
일반적으로 이 멤버 변수에 직접 액세스할 필요가 없습니다. 대신 호출하거나 Open
호출할 때 OpenEx
프레임워크에서 핸들을 할당합니다. 프레임워크는 개체에서 연산자를 호출할 때 핸들의 delete
할당을 CDatabase
취소합니다. 멤버 함수는 핸들의 Close
할당을 취소하지 않습니다.
그러나 경우에 따라 핸들을 직접 사용해야 할 수 있습니다. 예를 들어 클래스 CDatabase
를 통하지 않고 ODBC API 함수를 직접 호출해야 하는 경우 매개 변수로 전달하려면 연결 핸들이 필요할 수 있습니다. 아래 코드 예제를 참조하세요.
예시
// Using m_hdbc for a direct ODBC API call.
// m_dbCust is the CDatabase object; m_hdbc is
// its HDBC member variable
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue);
CDatabase::OnSetOptions
프레임워크는 멤버 함수를 사용하여 SQL 문을 직접 실행할 때 이 멤버 함수를 ExecuteSQL
호출합니다.
virtual void OnSetOptions(HSTMT hstmt);
매개 변수
hstmt
옵션을 설정하는 ODBC 문 핸들입니다.
설명
CRecordset::OnSetOptions
또한 이 멤버 함수를 호출합니다.
OnSetOptions
는 로그인 시간 제한 값을 설정합니다. 및 멤버 함수 OnSetOptions
에 대한 SetQueryTimeout
이전 호출이 있는 경우 현재 값을 반영하고, 그렇지 않으면 기본값을 설정합니다.
참고 항목
MFC 4.2 OnSetOptions
이전에도 처리 모드를 스니크로나 비동기 모드로 설정합니다. MFC 4.2부터 모든 작업이 동기식입니다. 비동기 작업을 수행하려면 ODBC API 함수 SQLSetPos
를 직접 호출해야 합니다.
시간 제한 값을 변경하기 위해 재정 OnSetOptions
의할 필요가 없습니다. 대신 쿼리 시간 제한 값을 사용자 지정하려면 레코드 집합 OnSetOptions
을 만들기 전에 호출 SetQueryTimeout
합니다. 새 값을 사용합니다. 설정된 값은 모든 레코드 집합 또는 직접 SQL 호출에 대한 후속 작업에 적용됩니다.
추가 옵션을 설정하려는 경우 재정 OnSetOptions
의합니다. 재정의는 ODBC API 함수SQLSetStmtOption
를 호출하기 전이나 후에 기본 클래스 OnSetOptions
를 호출해야 합니다. 프레임워크의 기본 구현 OnSetOptions
에 설명된 메서드를 따릅니다.
CDatabase::Open
이 멤버 함수를 호출하여 새로 생성된 CDatabase
개체를 초기화합니다.
virtual BOOL Open(
LPCTSTR lpszDSN,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _T("ODBC;"),
BOOL bUseCursorLib = TRUE);
매개 변수
lpszDSN
ODBC 관리자 프로그램을 통해 ODBC에 등록된 이름인 데이터 원본 이름을 지정합니다. DSN 값이 "DSN=<data-source>" 형식으로 지정된 lpszConnect
경우 다시 지정해서는 lpszDSN
안 됩니다. 이 경우 lpszDSN
여야 NULL
합니다. 그렇지 않으면 사용자가 데이터 원본을 선택할 수 있는 데이터 원본 대화 상자를 사용자에게 표시하려는 경우 전달할 NULL
수 있습니다. 자세한 내용은 비고를 참조하세요.
bExclusive
이 버전의 클래스 라이브러리에서는 지원되지 않습니다. 현재 이 매개 변수가 .인 경우 어설션이 TRUE
실패합니다. 데이터 원본은 항상 공유(배타적이지 않음)로 열립니다.
bReadOnly
TRUE
연결을 읽기 전용으로 사용하고 데이터 원본에 대한 업데이트를 금지하려면 입니다. 모든 종속 레코드 집합은 이 특성을 상속합니다. 기본값은 FALSE
입니다.
lpszConnect
연결 문자열 지정합니다. 연결 문자열 데이터 원본 이름, 데이터 원본에 유효한 사용자 ID, 사용자 인증 문자열(데이터 원본에 필요한 경우 암호) 및 기타 정보를 포함하여 정보를 연결합니다. 전체 연결 문자열 문자열 "ODBC;"
(대문자 또는 소문자)으로 접두사를 지정해야 합니다. 문자열은 "ODBC;"
ODBC 데이터 원본에 대한 연결임을 나타내는 데 사용됩니다. 이는 이후 버전의 클래스 라이브러리가 ODBC가 아닌 데이터 원본을 지원할 수 있는 경우 상향 호환성을 위해 사용됩니다.
bUseCursorLib
TRUE
ODBC 커서 라이브러리 DLL을 로드하려면 입니다. 커서 라이브러리는 기본 ODBC 드라이버의 일부 기능을 마스크하여 다이너셋 사용을 효과적으로 방지합니다(드라이버가 지원하는 경우). 커서 라이브러리가 로드되는 경우 지원되는 커서는 정적 스냅샷 및 정방향 전용 커서뿐입니다. 기본값은 TRUE
입니다. 레코드 집합 개체를 CRecordset
파생하지 않고 직접 만들려는 경우 커서 라이브러리를 로드하면 안 됩니다.
Return Value
연결이 성공적으로 수행되면 0이 아닌 경우 그렇지 않으면 사용자가 추가 연결 정보를 요청하는 대화 상자를 표시할 때 취소를 선택하는 경우 0입니다. 다른 모든 경우에서 프레임워크는 예외를 throw합니다.
설명
데이터베이스 개체를 사용하여 레코드 집합 개체를 생성하려면 먼저 데이터베이스 개체를 초기화해야 합니다.
참고 항목
멤버 함수를 OpenEx
호출하는 것이 데이터 원본에 연결하고 데이터베이스 개체를 초기화하는 기본 방법입니다.
호출의 매개 변수에 Open
연결하기에 충분한 정보가 포함되어 있지 않으면 ODBC 드라이버가 대화 상자를 열어 사용자로부터 필요한 정보를 얻습니다. 호출Open
할 때 연결 문자열 lpszConnect
개체에 CDatabase
비공개로 저장되며 멤버 함수를 GetConnect
호출하여 사용할 수 있습니다.
원하는 경우 사용자로부터 암호와 같은 정보를 가져오기 위해 호출 Open
하기 전에 고유한 대화 상자를 연 다음 전달한 연결 문자열 Open
해당 정보를 추가할 수 있습니다. 또는 다음에 애플리케이션이 개체를 호출 Open
CDatabase
할 때 다시 사용할 수 있도록 전달한 연결 문자열 저장할 수 있습니다.
여러 수준의 로그인 권한 부여에 연결 문자열 사용하거나(각각 다른 CDatabase
개체에 대해) 다른 데이터 원본 관련 정보를 전달할 수도 있습니다. 연결 문자열 대한 자세한 내용은 Windows SDK의 5장을 참조하세요.
예를 들어 DBMS 호스트를 사용할 수 없는 경우 연결 시도 시간이 초과할 수 있습니다. 연결 시도가 실패 Open
CDBException
하면 .
예시
// m_dbCust is a CDatabase object embedded in a CDocument class
if (bDefault)
{
// Connect the object to a data source (no password)
// the ODBC connection dialog box will always remain hidden
m_dbCust.Open(_T("MFC_ODBCTest"), FALSE, FALSE, _T("ODBC;UID=JOES"));
}
else
{
// ...Or, query the user for all connection information
m_dbCust.Open(NULL);
}
CDatabase::OpenEx
이 멤버 함수를 호출하여 새로 생성된 CDatabase
개체를 초기화합니다.
virtual BOOL OpenEx(
LPCTSTR lpszConnectString,
DWORD dwOptions = 0);
매개 변수
lpszConnectString
ODBC 연결 문자열 지정합니다. 여기에는 데이터 원본 이름뿐만 아니라 사용자 ID 및 암호와 같은 기타 선택적 정보가 포함됩니다. 예를 들어 가능한 "DSN=SQLServer_Source;UID=SA;PWD=abc123"
연결 문자열. 전달 NULL
lpszConnectString
하면 데이터 원본 대화 상자에서 사용자에게 데이터 원본을 선택하라는 메시지가 표시됩니다.
dwOptions
다음 값의 조합을 지정하는 비트 마스크입니다. 기본값은 0입니다. 즉, 데이터베이스가 쓰기 액세스와 공유로 열리고, ODBC 커서 라이브러리 DLL이 로드되지 않으며, ODBC 연결 대화 상자가 연결하기에 충분한 정보가 없는 경우에만 표시됩니다.
CDatabase::openExclusive
이 버전의 클래스 라이브러리에서는 지원되지 않습니다. 데이터 원본은 항상 공유(배타적이지 않음)로 열립니다. 현재 이 옵션을 지정하면 어설션이 실패합니다.CDatabase::openReadOnly
데이터 원본을 읽기 전용으로 엽니다.CDatabase::useCursorLib
ODBC 커서 라이브러리 DLL을 로드합니다. 커서 라이브러리는 기본 ODBC 드라이버의 일부 기능을 마스크하여 다이너셋 사용을 효과적으로 방지합니다(드라이버가 지원하는 경우). 커서 라이브러리가 로드되는 경우 지원되는 커서는 정적 스냅샷 및 정방향 전용 커서뿐입니다. 레코드 집합 개체를CRecordset
파생하지 않고 직접 만들려는 경우 커서 라이브러리를 로드하면 안 됩니다.CDatabase::noOdbcDialog
충분한 연결 정보가 제공되었는지 여부에 관계없이 ODBC 연결 대화 상자를 표시하지 마세요.CDatabase::forceOdbcDialog
항상 ODBC 연결 대화 상자를 표시합니다.
Return Value
연결이 성공적으로 수행되면 0이 아닌 경우 그렇지 않으면 사용자가 추가 연결 정보를 요청하는 대화 상자를 표시할 때 취소를 선택하는 경우 0입니다. 다른 모든 경우에서 프레임워크는 예외를 throw합니다.
설명
데이터베이스 개체를 사용하여 레코드 집합 개체를 생성하려면 먼저 데이터베이스 개체를 초기화해야 합니다.
호출의 lpszConnectString
매개 변수에 OpenEx
연결하기에 충분한 정보가 없는 경우 ODBC 드라이버는 사용자가 설정 CDatabase::noOdbcDialog
하지 않았거나 CDatabase::forceOdbcDialog
매개 변수에 dwOptions
있는 경우 사용자에게 필요한 정보를 가져오는 대화 상자를 엽니다. 호출OpenEx
할 때 연결 문자열 lpszConnectString
개체에 CDatabase
비공개로 저장되며 멤버 함수를 GetConnect
호출하여 사용할 수 있습니다.
원하는 경우 사용자로부터 암호와 같은 정보를 가져오기 위해 호출 OpenEx
하기 전에 고유한 대화 상자를 연 다음 전달한 연결 문자열 OpenEx
해당 정보를 추가할 수 있습니다. 또는 다음에 애플리케이션이 개체를 호출 OpenEx
CDatabase
할 때 다시 사용할 수 있도록 전달한 연결 문자열 저장할 수 있습니다.
여러 수준의 로그인 권한 부여에 연결 문자열 사용하거나(각각 다른 CDatabase
개체에 대해) 다른 데이터 원본 관련 정보를 전달할 수도 있습니다. 연결 문자열 대한 자세한 내용은 ODBC 프로그래머 참조의 6장을 참조하세요.
예를 들어 DBMS 호스트를 사용할 수 없는 경우 연결 시도 시간이 초과할 수 있습니다. 연결 시도가 실패 OpenEx
CDBException
하면 .
예시
// m_dbCust is a CDatabase object embedded in a CDocument class.
// Connect the object to a read-only data source where
// the ODBC connection dialog box will always remain hidden
m_dbCust.OpenEx(_T("DSN=MFC_ODBCTest;UID=JOES"),
CDatabase::openReadOnly | CDatabase::noOdbcDialog);
CDatabase::Rollback
트랜잭션 중에 변경된 내용을 되돌리려면 이 멤버 함수를 호출합니다.
BOOL Rollback();
Return Value
트랜잭션이 성공적으로 취소된 경우 0이 아닌 경우 그렇지 않으면 0입니다. 호출이 Rollback
실패하면 데이터 원본 및 트랜잭션 상태가 정의되지 않습니다. 0을 반환하는 경우 Rollback
데이터 원본을 확인하여 상태를 확인해야 합니다.
설명
마지막 BeginTrans
이후 실행된 모든 CRecordset
AddNew
, Edit
, Delete
및 Update
호출은 해당 호출 시 존재했던 상태로 롤백됩니다.
호출 Rollback
후 트랜잭션이 끝났으며 다른 트랜잭션에 대해 다시 호출 BeginTrans
해야 합니다. 호출 BeginTrans
하기 전에 현재 레코드가 다시 현재 레코드 Rollback
가 됩니다.
롤백 후 롤백 전의 현재 레코드는 현재 상태로 유지됩니다. 롤백 후 레코드 집합의 상태 및 데이터 원본에 대한 자세한 내용은 ODBC(Transaction) 문서를 참조하세요.
예시
트랜잭션: 레코드 집합에서 트랜잭션 수행(ODBC) 문서를 참조하세요.
CDatabase::SetLoginTimeout
호출하거나 Open
호출하기 전에 이 멤버 함수를 호출 OpenEx
하여 시도된 데이터 원본 연결 시간이 초과되기 전에 허용되는 기본 시간(초)을 재정의합니다.
void SetLoginTimeout(DWORD dwSeconds);
매개 변수
dwSeconds
연결 시도 시간이 초과되기 전에 허용할 시간(초)입니다.
설명
예를 들어 DBMS를 사용할 수 없는 경우 연결 시도가 시간 초과될 수 있습니다. 초기화 CDatabase
되지 않은 개체를 생성한 후 호출하거나 Open
호출하기 전에 호출 OpenEx
SetLoginTimeout
합니다.
로그인 시간 제한의 기본값은 15초입니다. 모든 데이터 원본이 로그인 시간 제한 값을 지정하는 기능을 지원하지는 않습니다. 데이터 원본이 시간 제한을 지원하지 않는 경우 추적 출력을 얻을 수 있지만 예외는 아닙니다. 값이 0이면 "infinite"를 의미합니다.
CDatabase::SetQueryTimeout
이 멤버 함수를 호출하여 연결된 데이터 원본에 대한 후속 작업이 시간 초과되기 전에 허용할 기본 시간(초)을 재정의합니다.
void SetQueryTimeout(DWORD dwSeconds);
매개 변수
dwSeconds
쿼리 시도 시간이 초과되기 전에 허용할 시간(초)입니다.
설명
네트워크 액세스 문제, 과도한 쿼리 처리 시간 등으로 인해 작업이 시간 초과될 수 있습니다. 쿼리 시간 제한 값을 변경하려면 레코드 집합을 열기 전이나 Delete
레코드 집합의 Update
AddNew
또는 멤버 함수를 호출하기 전에 호출 SetQueryTimeout
합니다. 이 설정은 모든 후속 Open
, AddNew
및 Update
이 CDatabase
개체와 Delete
연결된 모든 레코드 집합에 대한 호출에 영향을 줍니다. 여는 후 레코드 집합에 대한 쿼리 시간 제한 값을 변경해도 레코드 집합의 값은 변경되지 않습니다. 예를 들어 후속 Move
작업은 새 값을 사용하지 않습니다.
쿼리 시간 제한의 기본값은 15초입니다. 모든 데이터 원본이 쿼리 시간 제한 값을 설정하는 기능을 지원하지는 않습니다. 쿼리 제한 시간 값을 0으로 설정하면 시간 제한이 발생하지 않습니다. 데이터 원본과의 통신이 응답하지 않을 수 있습니다. 이 동작은 개발 중에 유용할 수 있습니다. 데이터 원본이 시간 제한을 지원하지 않는 경우 추적 출력을 얻을 수 있지만 예외는 아닙니다.