다음을 통해 공유


CDatabase 수업

데이터 소스 작업을 할 수 있는 통로인 데이터 소스에 대한 연결을 나타냅니다.

구문

class CDatabase : public CObject

멤버

공용 생성자

속성 설명
CDatabase::CDatabase CDatabase 개체를 생성합니다. 호출하거나 Open.를 호출 OpenEx 하여 개체를 초기화해야 합니다.

공용 메서드

이름 설명
CDatabase::BeginTrans 연결된 데이터 원본에서 클래스의 , 및 멤버 함수에 AddNewEditDelete대한 일련의 되돌릴 수 있는 호출인 "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, AddNewEdit호출에 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(데이터 원본)개요: 데이터베이스 프로그래밍 문서를 참조하세요.

상속 계층 구조

CObject

CDatabase

요구 사항

머리글: afxdb.h

CDatabase::BeginTrans

이 멤버 함수를 호출하여 연결된 데이터 원본으로 트랜잭션을 시작합니다.

BOOL BeginTrans();

Return Value

호출이 성공하고 변경 내용이 수동으로만 커밋된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

트랜잭션은 개체의 , EditUpdate 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 데이터 원본의 상태가 정의되지 않습니다. 데이터를 확인하여 상태를 확인해야 합니다.

설명

트랜잭션은 멤버 함수에 대한 호출로 AddNewEditDelete시작된 개체의 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::GetBookmarkCRecordset::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

constCString 호출되었거나 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, DeleteUpdate 호출은 해당 호출 시 존재했던 상태로 롤백됩니다.

호출 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, AddNewUpdateCDatabase 개체와 Delete 연결된 모든 레코드 집합에 대한 호출에 영향을 줍니다. 여는 후 레코드 집합에 대한 쿼리 시간 제한 값을 변경해도 레코드 집합의 값은 변경되지 않습니다. 예를 들어 후속 Move 작업은 새 값을 사용하지 않습니다.

쿼리 시간 제한의 기본값은 15초입니다. 모든 데이터 원본이 쿼리 시간 제한 값을 설정하는 기능을 지원하지는 않습니다. 쿼리 제한 시간 값을 0으로 설정하면 시간 제한이 발생하지 않습니다. 데이터 원본과의 통신이 응답하지 않을 수 있습니다. 이 동작은 개발 중에 유용할 수 있습니다. 데이터 원본이 시간 제한을 지원하지 않는 경우 추적 출력을 얻을 수 있지만 예외는 아닙니다.

참고 항목

CObject 클래스
계층 구조 차트
CRecordset 수업