共用方式為


CDatabase 類別

表示資料來源的連接,您可以透過這個連接來操作資料來源。

語法

class CDatabase : public CObject

成員

公用建構函式

名稱 描述
CDatabase::CDatabase 建構 CDatabase 物件。 您必須呼叫 OpenExOpen來初始化 物件。

公用方法

名稱 描述
CDatabase::BeginTrans 在連接的數據源上啟動「交易」,這是對 類別EditAddNewDeleteUpdate 成員函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 傳回用來將物件連接到數據源的 CDatabase ODBC 連接字串。
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 設定資料庫查詢作業逾時后的秒數。影響所有後續的記錄集 OpenAddNewEditDelete 呼叫。

公用資料成員

名稱 描述
CDatabase::m_hdbc 開啟數據源的資料庫連線能力 (ODBC) 連接句柄。 輸入 HDBC

備註

數據來源是某些資料庫管理系統 (DBMS) 所裝載的特定數據實例。 範例包括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。

備註

交易是由物件、、 和 Update 成員CRecordset函式的AddNew一或多個Delete呼叫所組成。 Edit 開始交易之前, CDatabase 對象必須已經藉由呼叫其 OpenExOpen 成員函式連接到數據源。 若要結束交易,請呼叫 CommitTrans 以接受數據源的所有變更(並加以執行),或呼叫 Rollback 中止整個交易。 BeginTrans開啟交易中涉及的任何記錄集,並盡可能接近實際更新作業之後呼叫 。

警告

視 ODBC 驅動程式而定,在呼叫 BeginTrans 之前開啟記錄集可能會導致呼叫 Rollback時發生問題。 您應該檢查您使用的特定驅動程式。 例如,使用包含在 Microsoft ODBC Desktop Driver Pack 3.0 中的 Microsoft Access 驅動程式時,您必須考慮 Jet 資料庫引擎的需求,即不應在任何具有開啟數據指標的資料庫上開始交易。 在 MFC 資料庫類別中,開啟的數據指標表示開啟 CRecordset 的物件。 如需詳細資訊,請參閱 技術附註 68

BeginTrans 也可以根據要求的並行存取和數據源的功能,鎖定伺服器上的數據記錄。 如需鎖定數據的相關信息,請參閱記錄集:鎖定記錄(ODBC)一文

使用者定義交易會在交易(ODBC)一文中說明。

BeginTrans 會建立可回復交易序列的狀態(反轉)。 若要建立復原的新狀態,請認可任何目前的交易,然後再呼叫 BeginTrans 一次。

警告

在沒有呼叫 或 的情況下再次呼叫 BeginTrans CommitTransRollback 則為錯誤。

CanTransact呼叫成員函式,以判斷驅動程式是否支援指定資料庫的交易。 您也應該呼叫 GetCursorCommitBehaviorGetCursorRollbackBehavior 來判斷數據指標保留的支援。

如需交易的詳細資訊,請參閱交易(ODBC)一文

範例

請參閱交易:在 Recordset 中執行交易一文 (ODBC)

CDatabase::BindParameters

呼叫 之前需要係結參數時,請覆CDatabase::ExecuteSQLBindParameters

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;

傳回值

如果使用此 CDatabase 物件記錄集允許交易,則為非零,否則為 0。

備註

如需交易的相關信息,請參閱交易(ODBC)一文

CDatabase::CanUpdate

呼叫這個成員函式,以判斷物件是否 CDatabase 允許更新。

BOOL CanUpdate() const;

傳回值

如果CDatabase物件允許更新,則為非零;否則為 0,表示您在開啟CDatabase物件時傳入TRUEbReadOnly,或數據源本身是唯讀的。 如果 對 ODBC API 函SQLGetInfoSQL_DATASOURCE_READ_ONLY式的呼叫傳回 ,則數據源是唯讀的y

備註

並非所有驅動程式都支援更新。

CDatabase::CDatabase

建構 CDatabase 物件。

CDatabase();

備註

建構 物件之後,您必須呼叫其 OpenExOpen 成員函式,以建立與指定數據源的連線。

您可能會發現在檔案類別中內嵌 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 物件,因此您可以開啟與相同數據源或不同數據源的新連接,以重複使用物件。

使用資料庫的所有暫止 AddNewEdit 記錄集語句都會取消,並回復所有暫止的交易。 相依於 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 失敗,則數據源的狀態為未定義。 您必須檢查數據以判斷其狀態。

備註

交易是由一連串呼叫 AddNewEdit、、 DeleteUpdate 成員函CRecordset式的物件函式所組成,該函式開頭為成員函式的呼叫BeginTransCommitTrans 認可交易。 根據預設,會立即認可更新;呼叫 BeginTrans 會導致更新的承諾延遲到呼叫為止 CommitTrans

在您呼叫 CommitTrans 結束交易之前,您可以呼叫 Rollback 成員函式來中止交易,並將數據源保留為其原始狀態。 若要開始新的交易,請再次呼叫 BeginTrans

如需交易的詳細資訊,請參閱交易(ODBC)一文

範例

請參閱交易:在 Recordset 中執行交易一文 (ODBC)

CDatabase::ExecuteSQL

當您需要直接執行 SQL 命令時,請呼叫此成員函式。

void ExecuteSQL(LPCTSTR lpszSQL);

參數

lpszSQL
包含要執行之有效 SQL 命令之 Null 終止字串的指標。 您可以傳遞 CString

備註

將命令建立為 Null 終止的字串。 ExecuteSQL 不會傳回數據記錄。 如果您想要在記錄上操作,請改用 recordset 物件。

數據源的大部分命令都是透過 recordset 對象發出,這些物件支援選取資料、插入新記錄、刪除記錄和編輯記錄的命令。 不過,資料庫類別並不直接支援所有 ODBC 功能,因此有時您可能需要使用 ExecuteSQL進行直接 SQL 呼叫。

範例

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;

傳回值

位元遮罩,用於識別在記錄集物件上保存書籤所使用的作業。 如需詳細資料,請參閱<備註>。

備註

例如,如果您呼叫 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 。 如需書籤的詳細資訊,請參閱 Recordset:Bookmarks 和 Absolute Positions (ODBC)一文

CDatabase::GetConnect

呼叫這個成員函式,擷取呼叫OpenEx期間所使用的 連接字串,或OpenCDatabase對象連接到數據源。

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 作業。

如需此傳回值的詳細資訊,請參閱 Windows SDK 中的 ODBC API 函式 SQLGetInfo 。 如需交易的詳細資訊,請參閱交易(ODBC)一文

CDatabase::GetCursorRollbackBehavior

呼叫這個成員函式,以判斷作業如何影響 Rollback 開啟記錄集對象上的數據指標。

int GetCursorRollbackBehavior() const;

傳回值

值,表示交易對開啟記錄集物件的影響。 如需詳細資料,請參閱<備註>。

備註

下表列出的可能傳回值 GetCursorRollbackBehavior ,以及開啟記錄集的對應效果。

傳回值 對物件的影響CRecordset
SQL_CB_CLOSE 緊接在交易回復之後呼叫 CRecordset::Requery
SQL_CB_DELETE 緊接在交易回復之後呼叫 CRecordset::Close
SQL_CB_PRESERVE 正常繼續進行 CRecordset 作業。

如需此傳回值的詳細資訊,請參閱 Windows SDK 中的 ODBC API 函式 SQLGetInfo 。 如需交易的詳細資訊,請參閱交易(ODBC)一文

CDatabase::GetDatabaseName

呼叫這個成員函式以擷取目前連接資料庫的名稱(前提是數據源定義名為 “database” 的具名物件)。

CString GetDatabaseName() const;

傳回值

CString如果成功,則包含資料庫名稱的 ,否則為空CString的 。

備註

這與 或 Open 呼叫中指定的OpenEx數據來源名稱 (DSN) 不同。 傳回的內容 GetDatabaseName 取決於 ODBC。 一般而言,資料庫是數據表的集合。 如果此實體有名稱,則 GetDatabaseName 傳回它。

例如,您可能會想要在標題中顯示此名稱。 如果從 ODBC 擷取名稱時發生錯誤, GetDatabaseName 則傳回空 CString的 。

CDatabase::IsOpen

呼叫這個成員函式,以判斷物件目前是否 CDatabase 連接到數據源。

BOOL IsOpen() const;

傳回值

如果物件目前已連接,則為 CDatabase 非零,否則為 0。

CDatabase::m_hdbc

包含 ODBC 資料源連接的公用句柄 — 「連接句柄」。

備註

一般而言,您不需要直接存取這個成員變數。 相反地,架構會在您呼叫 OpenExOpen時配置句柄。 當您在物件上CDatabase呼叫 delete 運算符時,架構會解除分配句柄。 請注意, Close 成員函式不會解除分配句柄。

不過,在某些情況下,您可能需要直接使用句柄。 例如,如果您需要直接呼叫 ODBC API 函式,而不是透過 類別 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

架構會在使用 ExecuteSQL 成員函式直接執行 SQL 語句時呼叫這個成員函式。

virtual void OnSetOptions(HSTMT hstmt);

參數

hstmt
要設定選項的 ODBC 語句句柄。

備註

CRecordset::OnSetOptions 也會呼叫這個成員函式。

OnSetOptions 會設定登入逾時值。 如果先前已呼叫 SetQueryTimeout 和成員函式, OnSetOptions 則會反映目前的值,否則會設定預設值。

注意

在 MFC 4.2 之前, OnSetOptions 也會將處理模式設定為 snychronous 或異步。 從 MFC 4.2 開始,所有作業都是同步的。 若要執行異步操作,您必須直接呼叫 ODBC API 函式 SQLSetPos

您不需要覆寫 OnSetOptions 即可變更逾時值。 相反地,若要自定義查詢逾時值,請在建立記錄集之前呼叫 SetQueryTimeout ; OnSetOptions 將會使用新的值。 設定的值會套用至所有記錄集或直接 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 註冊的名稱。 如果在 中 lpszConnect 指定 DSN 值(格式為 “DSN=<data-source>”),則不得在 中 lpszDSN再次指定。 在這裡情況下, lpszDSN 應該是 NULL。 否則,如果您要向使用者顯示資料來源對話框,使用者可以在其中選取資料來源,則可以傳遞 NULL 。 如需詳細資訊,請參閱。

bExclusive
此類別庫版本不支援。 目前,如果此參數為 TRUE,則判斷提示會失敗。 數據源一律會以共用方式開啟(非獨佔)。

bReadOnly
TRUE 如果您想要連接是唯讀的,而且禁止更新數據源。 所有相依記錄集都會繼承此屬性。 預設值是 FALSE

lpszConnect
指定 連接字串。 連接字串 串連資訊,可能包括數據源名稱、數據源上有效的使用者標識碼、使用者驗證字串(密碼,如果數據源需要密碼),以及其他資訊。 整個 連接字串 前面必須加上字串"ODBC;"(大寫或小寫)。 字串 "ODBC;" 用來指出連接是 ODBC 數據源;當未來版本的類別庫可能支援非 ODBC 數據源時,這是為了向上相容性。

bUseCursorLib
TRUE 如果您要載入 ODBC 資料指標連結庫 DLL。 數據指標連結庫會遮罩基礎 ODBC 驅動程式的某些功能,有效地防止使用動態集(如果驅動程式支援它們)。 載入數據指標連結庫時,唯一支持的數據指標是靜態快照集和向前數據指標。 預設值是 TRUE。 如果您打算直接從 CRecordset 建立 recordset 物件,而不衍生自該物件,則不應該載入數據指標連結庫。

傳回值

如果成功建立連線,則為非零;否則,如果使用者在顯示對話框時選擇 [取消],要求取得更多連線資訊,則為 0。 在其他所有情況下,架構都會擲回例外狀況。

備註

您的資料庫對象必須先初始化,才能使用它來建構記錄集物件。

注意

OpenEx呼叫成員函式是連線至數據源並初始化資料庫物件的慣用方法。

如果呼叫中的 Open 參數未包含足夠的資訊來建立連線,ODBC 驅動程式會開啟對話方塊,以從使用者取得必要的資訊。 當您呼叫 Open時,您的 連接字串 會lpszConnect私下儲存在 物件中CDatabase,而且可藉由呼叫GetConnect成員函式來取得。

如果您想要的話,您可以在呼叫 Open 以取得使用者的資訊之前開啟自己的對話框,例如密碼,然後將該資訊新增至您傳遞給 Open的 連接字串。 或者,您可能想要儲存您傳遞的 連接字串,以便在下次應用程式在 物件上CDatabase呼叫Open時重複使用它。

您也可以將 連接字串 用於多個層級的登入授權(每個層級為不同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 連接字串。 這包括數據來源名稱以及其他選擇性資訊,例如使用者標識碼和密碼。 例如,"DSN=SQLServer_Source;UID=SA;PWD=abc123"是可能的 連接字串。 請注意,如果您針對 傳遞 NULL lpszConnectString,[數據源] 對話框將會提示用戶選取數據源。

dwOptions
位掩碼,指定下列值的組合。 默認值為 0,這表示資料庫會以寫入存取權共用方式開啟、不會載入 ODBC 數據指標連結庫 DLL,而且只有在沒有足夠的資訊可建立連接時,才會顯示 [ODBC 連接] 對話框。

  • CDatabase::openExclusive 此類別庫版本不支援。 數據源一律會以共用方式開啟(非獨佔)。 目前,如果您指定此選項,判斷提示就會失敗。

  • CDatabase::openReadOnly 以唯讀模式開啟數據源。

  • CDatabase::useCursorLib 載入 ODBC 資料指標連結庫 DLL。 數據指標連結庫會遮罩基礎 ODBC 驅動程式的某些功能,有效地防止使用動態集(如果驅動程式支援它們)。 載入數據指標連結庫時,唯一支持的數據指標是靜態快照集和向前數據指標。 如果您打算直接從 CRecordset 建立 recordset 物件,而不衍生自該物件,則不應該載入數據指標連結庫。

  • CDatabase::noOdbcDialog 不論是否提供足夠的連接資訊,都不要顯示 [ODBC 連接] 對話方塊。

  • CDatabase::forceOdbcDialog 一律顯示 [ODBC 連接] 對話框。

傳回值

如果成功建立連線,則為非零;否則,如果使用者在顯示對話框時選擇 [取消],要求取得更多連線資訊,則為 0。 在其他所有情況下,架構都會擲回例外狀況。

備註

您的資料庫對象必須先初始化,才能使用它來建構記錄集物件。

lpszConnectString如果呼叫中的 OpenEx 參數未包含足夠的資訊來建立連接,ODBC 驅動程式會開啟對話方塊,以從使用者取得必要的資訊,前提是您尚未設定 CDatabase::noOdbcDialogCDatabase::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();

傳回值

如果交易成功反轉,則為非零;否則為 0。 Rollback如果呼叫失敗,則數據源和交易狀態為未定義。 如果 Rollback 傳回 0,您必須檢查數據源以判斷其狀態。

備註

自上次BeginTrans之後執行的所有 CRecordset AddNewEditDeleteUpdate 呼叫都會回復到該呼叫時存在的狀態。

呼叫 Rollback之後,交易已結束,您必須再次呼叫 BeginTrans 另一個交易。 在您呼叫 BeginTrans 之前目前記錄的記錄會在 之後 Rollback再次變成目前的記錄。

復原之後,復原之前的記錄會維持目前狀態。 如需復原後記錄集和數據源狀態的詳細資訊,請參閱交易(ODBC)一文

範例

請參閱交易:在 Recordset 中執行交易一文 (ODBC)

CDatabase::SetLoginTimeout

呼叫這個成員函式之前,請先呼叫 OpenExOpen ,以覆寫嘗試的數據源連接逾時之前所允許的預設秒數。

void SetLoginTimeout(DWORD dwSeconds);

參數

dwSeconds
在連線嘗試逾時之前所允許的秒數。

備註

例如,如果 DBMS 無法使用,連線嘗試可能會逾時。 SetLoginTimeout在您建構未初始化CDatabase的物件之後呼叫 ,但在呼叫 或 Open之前呼叫 OpenEx

登入逾時的預設值為15秒。 並非所有數據源都支援指定登入逾時值的能力。 如果數據源不支援逾時,您會取得追蹤輸出,但不會發生例外狀況。 值為 0 表示「無限」。

CDatabase::SetQueryTimeout

呼叫此成員函式以覆寫預設的秒數,以在連線數據源上的後續作業逾時之前允許。

void SetQueryTimeout(DWORD dwSeconds);

參數

dwSeconds
查詢嘗試逾時前所允許的秒數。

備註

作業可能會因為網路存取問題、查詢處理時間過長等而逾時。 SetQueryTimeout如果您要變更查詢逾時值,請在開啟記錄集之前或呼叫記錄集的AddNewUpdateDelete 成員函式之前呼叫 。 此設定會影響與這個CDatabase物件相關聯之任何記錄集的所有後續OpenAddNewUpdate、 和 Delete 呼叫。 開啟之後變更記錄集的查詢逾時值並不會變更記錄集的值。 例如,後續 Move 作業不會使用新的值。

查詢逾時的預設值為15秒。 並非所有數據源都支援設定查詢逾時值的能力。 如果您設定查詢逾時值為 0,則不會發生逾時;與數據源的通訊可能會停止回應。 此行為在開發期間可能很有用。 如果數據源不支援逾時,您會取得追蹤輸出,但不會發生例外狀況。

另請參閱

CObject 類別
階層架構圖表
CRecordset