Поделиться через


Класс CDatabase

Представляет подключение к источнику данных, с помощью которого можно получить доступ к данным.

Синтаксис

class CDatabase : public CObject

Участники

Открытые конструкторы

Имя Описание
CDatabase::CDatabase Формирует объект CDatabase. Необходимо инициализировать объект, вызвав OpenEx или Open.

Открытые методы

Имя Описание
CDatabase::BeginTrans Запускает "транзакцию" — серию обратимых вызовов AddNewк функциям класса , EditDeleteи Update членов класса CRecordset — в подключенном источнике данных. Источник данных должен поддерживать транзакции, чтобы BeginTrans иметь какой-либо эффект.
CDatabase::BindParameters Позволяет привязать параметры перед вызовом CDatabase::ExecuteSQL.
CDatabase::Cancel Отменяет асинхронную операцию или процесс из второго потока.
CDatabase::CanTransact Возвращает ненулевое значение, если источник данных поддерживает транзакции.
CDatabase::CanUpdate Возвращает ненулевое значение, если CDatabase объект обновляется (не только для чтения).
CDatabase::Close Закрывает подключение к источнику данных.
CDatabase::CommitTrans Завершает транзакцию, начинаемую BeginTrans. Выполняются команды в транзакции, изменяющей источник данных.
CDatabase::ExecuteSQL Выполняет инструкцию SQL. Записи данных не возвращаются.
CDatabase::GetBookmarkPersistence Определяет операции, с помощью которых закладки сохраняются в объектах набора записей.
CDatabase::GetConnect Возвращает строка подключения ODBC, используемый для подключения CDatabase объекта к источнику данных.
CDatabase::GetCursorCommitBehavior Определяет эффект фиксации транзакции в объекте открытого набора записей.
CDatabase::GetCursorRollbackBehavior Определяет эффект отката транзакции на объект открытого набора записей.
CDatabase::GetDatabaseName Возвращает имя используемой базы данных.
CDatabase::IsOpen Возвращает ненулевое значение, если CDatabase объект в настоящее время подключен к источнику данных.
CDatabase::OnSetOptions Вызывается платформой для задания стандартных параметров подключения. Реализация по умолчанию задает значение времени ожидания запроса. Эти параметры можно установить заранее, вызвав.SetQueryTimeout
CDatabase::Open Устанавливает подключение к источнику данных (через драйвер ODBC).
CDatabase::OpenEx Устанавливает подключение к источнику данных (через драйвер ODBC).
CDatabase::Rollback Отменяет изменения, внесенные во время текущей транзакции. Источник данных возвращается к предыдущему состоянию, как определено при вызове BeginTrans , неуправляемом.
CDatabase::SetLoginTimeout Задает время ожидания подключения к источнику данных в секундах.
CDatabase::SetQueryTimeout Задает время ожидания операций запроса базы данных в секундах. Влияет на все последующие наборы записейOpen, AddNewEditи Delete вызовы.

Открытые члены данных

Имя Описание
CDatabase::m_hdbc Откройте дескриптор подключения к базе данных (ODBC) к источнику данных. Введите HDBC.

Замечания

Источник данных — это конкретный экземпляр данных, размещенных в некоторых системах управления базами данных (СУБД). Примерами являются Microsoft SQL Server, Microsoft Access, Borland dBASE и xBASE. В приложении может быть активен один или несколько CDatabase объектов.

Примечание.

Если вы работаете с классами объектов доступа к данным (DAO), а не с классами Open Database Connectivity (ODBC), используйте вместо этого класс CDaoDatabase . Дополнительные сведения см. в статье "Обзор: программирование баз данных".

Чтобы использовать CDatabase, создайте CDatabase объект и вызовите ее OpenEx функцию-член. Откроется подключение. После создания CRecordset объектов для работы с подключенным источником данных передайте конструктор набора записей указатель на CDatabase объект. Завершив использование подключения, вызовите Close функцию-член и уничтожите CDatabase объект. Close закрывает все наборы записей, которые вы ранее не закрыли.

Дополнительные сведения см. в CDatabaseстатьях о источнике данных (ODBC) и обзоре: программирование баз данных.

Иерархия наследования

CObject

CDatabase

Требования

Заголовок: afxdb.h

CDatabase::BeginTrans

Вызовите эту функцию-член, чтобы начать транзакцию с подключенным источником данных.

BOOL BeginTrans();

Возвращаемое значение

Ненулевое значение, если вызов выполнен успешно, и изменения фиксируются только вручную; в противном случае — 0.

Замечания

Транзакция состоит из одного или нескольких вызовов AddNewфункций объекта , EditDeleteа также Update членовCRecordset. Перед началом транзакции CDatabase объект должен быть уже подключен к источнику данных путем вызова его OpenEx или Open функции-члена. Чтобы завершить транзакцию, вызовите CommitTrans все изменения в источнике данных (и выполните их) или вызов Rollback для прерывания всей транзакции. Вызовите BeginTrans после открытия всех наборов записей, участвующих в транзакции, и как можно ближе к фактическим операциям обновления.

Внимание

В зависимости от драйвера ODBC открытие набора записей перед вызовом BeginTrans может вызвать проблемы при вызове Rollback. Необходимо проверить конкретный драйвер, который вы используете. Например, при использовании драйвера Microsoft Access, включенного в пакет драйвера для настольных компьютеров Microsoft ODBC 3.0, необходимо учесть требование ядра СУБД Jet, которое не должно начинать транзакцию в любой базе данных с открытым курсором. В классах базы данных MFC открытый курсор означает открытый CRecordset объект. Дополнительные сведения см . в техническом примечание 68.

BeginTrans также может блокировать записи данных на сервере в зависимости от запрошенного параллелизма и возможностей источника данных. Сведения о блокировке данных см. в статье Recordset: Locking Records (ODBC).

Определяемые пользователем транзакции описаны в статье "Транзакция (ODBC)".

BeginTrans устанавливает состояние, в которое можно откатить последовательность транзакций (обратно). Чтобы установить новое состояние для откатов, зафиксируйте любую текущую транзакцию, а затем снова вызовите BeginTrans .

Внимание

Повторный вызов без вызова BeginTrans CommitTrans или Rollback ошибка.

Вызовите функцию-член, CanTransact чтобы определить, поддерживает ли драйвер транзакции для данной базы данных. Необходимо также вызвать GetCursorCommitBehavior и GetCursorRollbackBehavior определить поддержку сохранения курсора.

Дополнительные сведения о транзакциях см. в статье "Транзакция (ODBC)".

Пример

См. статью "Транзакция: выполнение транзакции в наборе записей (ODBC)".

CDatabase::BindParameters

Переопределяется BindParameters при необходимости привязки параметров перед вызовом CDatabase::ExecuteSQL.

virtual void BindParameters(HSTMT hstmt);

Параметры

hstmt
Дескриптор инструкции ODBC, для которой требуется привязать параметры.

Замечания

Этот подход полезен, если вам не нужен результирующий набор из хранимой процедуры.

В переопределении вызовите SQLBindParameters и связанные функции ODBC для привязки параметров. MFC вызывает переопределение перед вызовом ExecuteSQL. Вам не нужно вызывать; ExecuteSQL вызывать SQLExecDirect и уничтожать SQLPreparehstmtего, который используется только один раз.

CDatabase::Cancel

Вызовите эту функцию-член, чтобы запросить, чтобы источник данных отменил асинхронную операцию или процесс из второго потока.

void Cancel();

Замечания

Обратите внимание, что классы ODBC MFC больше не используют асинхронную обработку; для выполнения асинхронной операции необходимо напрямую вызвать функцию SQLSetConnectOptionAPI ODBC. Дополнительные сведения см. в разделе Асинхронное выполнение.

CDatabase::CanTransact

Вызовите эту функцию-член, чтобы определить, разрешает ли база данных транзакции.

BOOL CanTransact() const;

Возвращаемое значение

Ненулевое значение, если наборы записей, использующие этот CDatabase объект, разрешают транзакции; в противном случае — значение 0.

Замечания

Сведения о транзакциях см. в статье "Транзакция ( ODBC)".

CDatabase::CanUpdate

Вызовите эту функцию-член, чтобы определить, разрешает ли CDatabase объект обновления.

BOOL CanUpdate() const;

Возвращаемое значение

Ненулевое CDatabase значение, если объект разрешает обновления; в противном случае — значение 0, указывающее, что при TRUE bReadOnly открытии CDatabase объекта или сам источник данных доступен только для чтения. Источник данных доступен только для чтения, если вызов функции SQLGetInfo API ODBC для SQL_DATASOURCE_READ_ONLY возврата y.

Замечания

Не все драйверы поддерживают обновления.

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();

Возвращаемое значение

Ненулевое значение, если обновления были успешно зафиксированы; в противном случае — 0. В случае CommitTrans сбоя состояние источника данных не определено. Необходимо проверить данные, чтобы определить его состояние.

Замечания

Транзакция состоит из ряда вызовов AddNewфункций CRecordset объекта , EditDeleteи Update членов объекта, начинающегося с вызова BeginTrans функции-члена. CommitTrans фиксирует транзакцию. По умолчанию обновления фиксируются немедленно; вызов BeginTrans приводит к задержке обновлений до вызова CommitTrans .

Пока вы CommitTrans не вызовете транзакцию, можно вызвать Rollback функцию-член, чтобы прервать транзакцию и оставить источник данных в исходном состоянии. Чтобы начать новую транзакцию, вызовите BeginTrans еще раз.

Дополнительные сведения о транзакциях см. в статье "Транзакция (ODBC)".

Пример

См. статью "Транзакция: выполнение транзакции в наборе записей (ODBC)".

CDatabase::ExecuteSQL

Вызовите эту функцию-член, если необходимо выполнить команду SQL напрямую.

void ExecuteSQL(LPCTSTR lpszSQL);

Параметры

lpszSQL
Указатель на строку, завершающуюся значением NULL, содержащую допустимую команду SQL для выполнения. Вы можете передать 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

Вызовите эту функцию-член, чтобы определить наличие закладок в объекте recordset после определенных операций.

DWORD GetBookmarkPersistence() const;

Возвращаемое значение

Битовая маска, определяющая операции, при выполнении которых закладки сохраняются в объекте recordset. Дополнительные сведения см. в разделе "Заметки".

Замечания

Например, если вызвать метод 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 операции. Этот параметр просто определяет, поддерживаются ли закладки для объекта recordset в соответствии со значением, возвращенным CRecordset::CanBookmark.
SQL_BP_TRANSACTION Закладки являются действительными после фиксации или отката транзакции.
SQL_BP_UPDATE Закладка для строки действительна после операции в этой строке Update .
SQL_BP_OTHER_HSTMT Закладки, связанные с одним объектом recordset, действительны для второго объекта recordset.

Дополнительные сведения об этом возвращаемом значении см. в функции SQLGetInfo API ODBC в пакете SDK для Windows. Дополнительные сведения о закладках см. в статье Recordset: Закладки и абсолютные позиции (ODBC).

CDatabase::GetConnect

Вызовите эту функцию-член, чтобы получить строка подключения, используемую во время вызова OpenEx или Open подключив CDatabase объект к источнику данных.

const CString GetConnect() const;

Возвращаемое значение

ЗначениеconstCString, содержащее строка подключения, если OpenEx или Open было вызвано; в противном случае пустая строка.

Замечания

СмCDatabase::Open. описание создания строка подключения.

CDatabase::GetCursorCommitBehavior

Вызовите эту функцию-член, чтобы определить, как CommitTrans операция влияет на курсоры на объекты открытого набора записей.

int GetCursorCommitBehavior() const;

Возвращаемое значение

Значение, указывающее влияние транзакций на объекты открытого набора записей. Дополнительные сведения см. в разделе "Заметки".

Замечания

В следующей таблице перечислены возможные возвращаемые значения GetCursorCommitBehavior и соответствующее влияние на открытый набор записей.

Возвращаемое значение Влияние на CRecordset объекты
SQL_CB_CLOSE Вызов сразу CRecordset::Requery после фиксации транзакции.
SQL_CB_DELETE Вызов сразу CRecordset::Close после фиксации транзакции.
SQL_CB_PRESERVE Обычно CRecordset следуйте операциям.

Дополнительные сведения об этом возвращаемом значении см. в функции SQLGetInfo API ODBC в пакете SDK для Windows. Дополнительные сведения о транзакциях см. в статье "Транзакция (ODBC)".

CDatabase::GetCursorRollbackBehavior

Вызовите эту функцию-член, чтобы определить, как Rollback операция влияет на курсоры на объекты открытого набора записей.

int GetCursorRollbackBehavior() const;

Возвращаемое значение

Значение, указывающее влияние транзакций на объекты открытого набора записей. Дополнительные сведения см. в разделе "Заметки".

Замечания

В следующей таблице перечислены возможные возвращаемые значения GetCursorRollbackBehavior и соответствующее влияние на открытый набор записей.

Возвращаемое значение Влияние на CRecordset объекты
SQL_CB_CLOSE Вызовите CRecordset::Requery сразу после отката транзакции.
SQL_CB_DELETE Вызовите CRecordset::Close сразу после отката транзакции.
SQL_CB_PRESERVE Обычно CRecordset следуйте операциям.

Дополнительные сведения об этом возвращаемом значении см. в функции SQLGetInfo API ODBC в пакете SDK для Windows. Дополнительные сведения о транзакциях см. в статье "Транзакция (ODBC)".

CDatabase::GetDatabaseName

Вызовите эту функцию-член, чтобы получить имя подключенной базы данных (при условии, что источник данных определяет именованный объект с именем "база данных").

CString GetDatabaseName() const;

Возвращаемое значение

Значение CString , содержащее имя базы данных в случае успешного выполнения; в противном случае — пустое CString.

Замечания

Это не то же самое, что имя источника данных (DSN), указанное в или Open вызовеOpenEx. Что GetDatabaseName возвращается, зависит от ODBC. Как правило, база данных представляет собой коллекцию таблиц. Если у этой сущности есть имя, GetDatabaseName возвращает его.

Например, вы можете отобразить это имя в заголовке. Если при получении имени из ODBC возникает ошибка, GetDatabaseName возвращает пустое CStringзначение.

CDatabase::IsOpen

Вызовите эту функцию-член, чтобы определить, подключен ли CDatabase объект к источнику данных.

BOOL IsOpen() const;

Возвращаемое значение

Ненулевое CDatabase значение, если объект подключен в данный момент; в противном случае — значение 0.

CDatabase::m_hdbc

Содержит общедоступный дескриптор подключения источника данных ODBC — дескриптор подключения.

Замечания

Как правило, у вас нет необходимости обращаться к этой переменной-члену напрямую. Вместо этого платформа выделяет дескриптор при вызове OpenEx или Open. Платформа освобождает дескриптор при вызове delete CDatabase оператора объекта. Обратите внимание, что Close функция-член не освобождает дескриптор.

Однако в некоторых случаях может потребоваться использовать дескриптор напрямую. Например, если необходимо вызывать функции API ODBC напрямую, а не через класс CDatabase, может потребоваться дескриптор подключения для передачи в качестве параметра. См. приведенный ниже пример кода.

Пример

// 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 задает значение времени ожидания входа. Если были предыдущие вызовы SetQueryTimeout функции-члены, OnSetOptions отражает текущие значения; в противном случае он задает значения по умолчанию.

Примечание.

До MFC 4.2 OnSetOptions также установите режим обработки как синхронный, так и асинхронный. Начиная с MFC 4.2 все операции синхронны. Чтобы выполнить асинхронную операцию, необходимо выполнить прямой вызов функции SQLSetPosAPI ODBC.

Для изменения значения времени ожидания не нужно переопределяться OnSetOptions . Вместо этого, чтобы настроить значение времени ожидания запроса, вызов перед SetQueryTimeout созданием набора записей; OnSetOptions будет использовать новое значение. Значения, заданные для последующих операций во всех наборах записей или прямых вызовах SQL.

Переопределите OnSetOptions , если вы хотите задать дополнительные параметры. Переопределение должно вызывать базовый класс OnSetOptions до или после вызова функции SQLSetStmtOptionAPI ODBC. Выполните метод, показанный в реализации 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 указано в lpszConnect (в форме DSN=<data-source>), оно не должно быть указано снова в lpszDSN. В этом случае lpszDSN должно быть NULL. В противном случае можно передать NULL , если вы хотите представить пользователя с диалоговым окном источника данных, в котором пользователь может выбрать источник данных. Дополнительные сведения см. в примечаниях.

bExclusive
Не поддерживается в этой версии библиотеки классов. В настоящее время утверждение завершается ошибкой, если этот параметр имеет значение TRUE. Источник данных всегда открыт как общий (не эксклюзивный).

bReadOnly
TRUE Если вы планируете, что подключение будет доступно только для чтения, и запретить обновления источника данных. Все зависимые наборы записей наследуют этот атрибут. Значение по умолчанию — FALSE.

lpszConnect
Задает строка подключения. Строка подключения объединяет сведения, возможно, включая имя источника данных, идентификатор пользователя, допустимый в источнике данных, строку проверки подлинности пользователя (пароль, если источник данных требует одного) и другую информацию. Весь строка подключения должен быть префиксирован строкой "ODBC;" (в верхнем или нижнем регистре). Строка "ODBC;" используется для указания того, что подключение к источнику данных ODBC; это для обеспечения совместимости вверх, когда будущие версии библиотеки классов могут поддерживать источники данных, отличные от ODBC.

bUseCursorLib
TRUE Если требуется загрузить библиотеку DLL библиотеки курсоров ODBC. Библиотека курсоров маскирует некоторые функции базового драйвера ODBC, эффективно предотвращая использование dynaset (если драйвер поддерживает их). Единственными курсорами, поддерживаемыми при загрузке библиотеки курсоров, являются статические моментальные снимки и курсоры только для пересылки. Значение по умолчанию — TRUE. Если вы планируете создать объект набора записей непосредственно из CRecordset нее, не следует загружать библиотеку курсоров.

Возвращаемое значение

Ненулевое значение, если подключение успешно выполнено; В противном случае значение 0, если пользователь выбирает отмену при появлении диалогового окна с запросом дополнительных сведений о подключении. Во всех остальных случаях платформа создает исключение.

Замечания

Объект базы данных необходимо инициализировать, прежде чем использовать его для создания объекта набора записей.

Примечание.

OpenEx Вызов функции-члена — предпочтительный способ подключения к источнику данных и инициализации объекта базы данных.

Если параметры в Open вызове не содержат достаточно сведений для подключения, драйвер ODBC открывает диалоговое окно для получения необходимых сведений от пользователя. При вызове OpenlpszConnectстрока подключения хранится в частном порядке в объекте CDatabase и доступен путем вызова GetConnect функции-члена.

Если вы хотите, перед вызовом Open можно открыть собственное диалоговое окно, чтобы получить информацию от пользователя, например пароль, а затем добавить эту информацию в строка подключения, на Openкоторую вы передаете. Или вы можете сохранить строка подключения, чтобы можно было повторно использовать его при следующем вызове Open приложения к объектуCDatabase.

Кроме того, вы можете использовать строка подключения для нескольких уровней авторизации входа (каждый для другого CDatabase объекта) или передавать другие сведения о источнике данных. Дополнительные сведения о строка подключения см. в главе 5 в пакете SDK для Windows.

Возможно время ожидания подключения, если, например, узел СУБД недоступен. Если попытка подключения завершается ошибкой, 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. Сюда входят имя источника данных, а также другие необязательные сведения, например идентификатор пользователя и пароль. Например, "DSN=SQLServer_Source;UID=SA;PWD=abc123" это возможное строка подключения. Обратите внимание, что при передаче NULL lpszConnectStringдиалоговое окно источника данных предложит пользователю выбрать источник данных.

dwOptions
Битовая маска, указывающая сочетание следующих значений. Значение по умолчанию равно 0, то есть база данных будет открыта как общая с доступом на запись, библиотека DLL курсора ODBC не будет загружена, и диалоговое окно подключения ODBC будет отображаться только в том случае, если недостаточно сведений для подключения.

  • CDatabase::openExclusive Не поддерживается в этой версии библиотеки классов. Источник данных всегда открыт как общий (не эксклюзивный). В настоящее время утверждение завершается ошибкой, если указать этот параметр.

  • CDatabase::openReadOnly Откройте источник данных только для чтения.

  • CDatabase::useCursorLib Загрузите библиотеку курсоров ODBC. Библиотека курсоров маскирует некоторые функции базового драйвера ODBC, эффективно предотвращая использование dynaset (если драйвер поддерживает их). Единственными курсорами, поддерживаемыми при загрузке библиотеки курсоров, являются статические моментальные снимки и курсоры только для пересылки. Если вы планируете создать объект набора записей непосредственно из CRecordset нее, не следует загружать библиотеку курсоров.

  • CDatabase::noOdbcDialog Не отображайте диалоговое окно подключения ODBC независимо от того, предоставляется ли достаточно сведений о подключении.

  • CDatabase::forceOdbcDialog Всегда отображает диалоговое окно подключения ODBC.

Возвращаемое значение

Ненулевое значение, если подключение успешно выполнено; В противном случае значение 0, если пользователь выбирает отмену при появлении диалогового окна с запросом дополнительных сведений о подключении. Во всех остальных случаях платформа создает исключение.

Замечания

Объект базы данных необходимо инициализировать, прежде чем использовать его для создания объекта набора записей.

lpszConnectString Если параметр в OpenEx вызове не содержит достаточно сведений для подключения, драйвер ODBC открывает диалоговое окно для получения необходимых сведений от пользователя, если вы не установили CDatabase::noOdbcDialog или CDatabase::forceOdbcDialog в параметреdwOptions. При вызове OpenExlpszConnectStringстрока подключения хранится в частном порядке в объекте CDatabase и доступен путем вызова GetConnect функции-члена.

Если вы хотите, перед вызовом OpenEx можно открыть собственное диалоговое окно, чтобы получить информацию от пользователя, например пароль, а затем добавить эту информацию в строка подключения, на OpenExкоторую вы передаете. Или вы можете сохранить строка подключения, чтобы можно было повторно использовать его при следующем вызове OpenEx приложения к объектуCDatabase.

Кроме того, вы можете использовать строка подключения для нескольких уровней авторизации входа (каждый для другого CDatabase объекта) или передавать другие сведения о источнике данных. Дополнительные сведения о строка подключения см. в главе 6 в справочнике программиста ODBC.

Возможно время ожидания подключения, если, например, узел СУБД недоступен. Если попытка подключения завершается ошибкой, 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();

Возвращаемое значение

Ненулевое значение, если транзакция была успешно отменена; в противном случае — 0. Если вызов завершается сбоем Rollback , состояние источника данных и транзакций не определено. Если Rollback возвращается значение 0, необходимо проверить источник данных, чтобы определить его состояние.

Замечания

Все CRecordset AddNew, EditDeleteи Update вызовы, выполняемые с момента последнего BeginTrans отката в состояние, которое существовало во время этого вызова.

После вызова Rollbackтранзакции снова необходимо вызвать BeginTrans другую транзакцию. Запись, которая была текущей, прежде чем вызываться BeginTrans , снова становится текущей записью после Rollback.

После отката запись, которая была текущей до отката, остается текущей. Дополнительные сведения о состоянии набора записей и источника данных после отката см. в статье "Транзакция (ODBC)".

Пример

См. статью "Транзакция: выполнение транзакции в наборе записей (ODBC)".

CDatabase::SetLoginTimeout

Вызовите эту функцию-член перед вызовом OpenEx или Open переопределите количество секунд по умолчанию, разрешенное до истечения времени ожидания подключения к источнику данных.

void SetLoginTimeout(DWORD dwSeconds);

Параметры

dwSeconds
Количество секунд, разрешаемых до истечения времени ожидания попытки подключения.

Замечания

Попытка подключения может завершиться, если, например, СУБД недоступна. Вызовите SetLoginTimeout после создания неинициализированного CDatabase объекта, но перед вызовом OpenEx или Open.

Значение по умолчанию для времени ожидания входа — 15 секунд. Не все источники данных поддерживают возможность указания значения времени ожидания входа. Если источник данных не поддерживает время ожидания, вы получите выходные данные трассировки, но не исключение. Значение 0 означает "бесконечно".

CDatabase::SetQueryTimeout

Вызовите эту функцию-член, чтобы переопределить количество секунд по умолчанию, чтобы разрешить до последующих операций с подключенным источником данных время ожидания.

void SetQueryTimeout(DWORD dwSeconds);

Параметры

dwSeconds
Количество секунд, разрешаемых до истечения времени ожидания попытки запроса.

Замечания

Операция может истекать из-за проблем с доступом к сети, чрезмерного времени обработки запросов и т. д. Вызовите SetQueryTimeout перед открытием набора записей или перед вызовом функций набора AddNewUpdate записей или Delete элементов, если вы хотите изменить значение времени ожидания запроса. Параметр влияет на все последующие AddNewUpdateOpen, и Delete вызовы любых наборов записей, связанных с этим CDatabase объектом. Изменение значения времени ожидания запроса для набора записей после открытия не изменяет значение набора записей. Например, последующие Move операции не используют новое значение.

Значение по умолчанию для времени ожидания запроса составляет 15 секунд. Не все источники данных поддерживают возможность задания значения времени ожидания запроса. Если задать значение времени ожидания запроса 0, время ожидания не происходит; Связь с источником данных может перестать отвечать. Это поведение может быть полезно во время разработки. Если источник данных не поддерживает время ожидания, вы получите выходные данные трассировки, но не исключение.

См. также

CObject Класс
Диаграмма иерархии
CRecordset Класс