Класс CDatabase
Представляет подключение к источнику данных, с помощью которого можно получить доступ к данным.
Синтаксис
class CDatabase : public CObject
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CDatabase::CDatabase |
Формирует объект CDatabase . Необходимо инициализировать объект, вызвав OpenEx или Open . |
Открытые методы
Имя | Описание |
---|---|
CDatabase::BeginTrans |
Запускает "транзакцию" — серию обратимых вызовов AddNew к функциям класса , Edit Delete и 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 , AddNew Edit и 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) и обзоре: программирование баз данных.
Иерархия наследования
CDatabase
Требования
Заголовок: afxdb.h
CDatabase::BeginTrans
Вызовите эту функцию-член, чтобы начать транзакцию с подключенным источником данных.
BOOL BeginTrans();
Возвращаемое значение
Ненулевое значение, если вызов выполнен успешно, и изменения фиксируются только вручную; в противном случае — 0.
Замечания
Транзакция состоит из одного или нескольких вызовов AddNew
функций объекта , Edit
Delete
а также 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
и уничтожать SQLPrepare
hstmt
его, который используется только один раз.
CDatabase::Cancel
Вызовите эту функцию-член, чтобы запросить, чтобы источник данных отменил асинхронную операцию или процесс из второго потока.
void Cancel();
Замечания
Обратите внимание, что классы ODBC MFC больше не используют асинхронную обработку; для выполнения асинхронной операции необходимо напрямую вызвать функцию SQLSetConnectOption
API 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
объекта , Edit
Delete
и 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;
Возвращаемое значение
Значениеconst
CString
, содержащее строка подключения, если 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 все операции синхронны. Чтобы выполнить асинхронную операцию, необходимо выполнить прямой вызов функции SQLSetPos
API ODBC.
Для изменения значения времени ожидания не нужно переопределяться OnSetOptions
. Вместо этого, чтобы настроить значение времени ожидания запроса, вызов перед SetQueryTimeout
созданием набора записей; OnSetOptions
будет использовать новое значение. Значения, заданные для последующих операций во всех наборах записей или прямых вызовах SQL.
Переопределите OnSetOptions
, если вы хотите задать дополнительные параметры. Переопределение должно вызывать базовый класс OnSetOptions
до или после вызова функции SQLSetStmtOption
API 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 открывает диалоговое окно для получения необходимых сведений от пользователя. При вызове Open
lpszConnect
строка подключения хранится в частном порядке в объекте 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
. При вызове OpenEx
lpszConnectString
строка подключения хранится в частном порядке в объекте 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
, Edit
Delete
и 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
перед открытием набора записей или перед вызовом функций набора AddNew
Update
записей или Delete
элементов, если вы хотите изменить значение времени ожидания запроса. Параметр влияет на все последующие AddNew
Update
Open
, и Delete
вызовы любых наборов записей, связанных с этим CDatabase
объектом. Изменение значения времени ожидания запроса для набора записей после открытия не изменяет значение набора записей. Например, последующие Move
операции не используют новое значение.
Значение по умолчанию для времени ожидания запроса составляет 15 секунд. Не все источники данных поддерживают возможность задания значения времени ожидания запроса. Если задать значение времени ожидания запроса 0, время ожидания не происходит; Связь с источником данных может перестать отвечать. Это поведение может быть полезно во время разработки. Если источник данных не поддерживает время ожидания, вы получите выходные данные трассировки, но не исключение.