Sdílet prostřednictvím


CDatabase Třída

Představuje připojení ke zdroji dat, prostřednictvím kterého můžete pracovat se zdrojem dat.

Syntaxe

class CDatabase : public CObject

Členové

Veřejné konstruktory

Název Popis
CDatabase::CDatabase CDatabase Vytvoří objekt. Objekt je nutné inicializovat voláním OpenEx nebo Open.

Veřejné metody

Název Popis
CDatabase::BeginTrans Spustí "transakci" – řadu reverzibilních volání AddNewtřídy , Edit, Deletea Update členské funkce třídy CRecordset – na připojeném zdroji dat. Zdroj dat musí podporovat transakce BeginTrans , aby se projevily.
CDatabase::BindParameters Umožňuje vytvořit vazbu parametrů před voláním CDatabase::ExecuteSQL.
CDatabase::Cancel Zruší asynchronní operaci nebo proces z druhého vlákna.
CDatabase::CanTransact Vrátí nenulové, pokud zdroj dat podporuje transakce.
CDatabase::CanUpdate Vrátí nenulovou hodnotu, pokud CDatabase je objekt aktualizovatelný (nikoli jen pro čtení).
CDatabase::Close Zavře připojení ke zdroji dat.
CDatabase::CommitTrans Dokončí transakci zahájenou BeginTrans. Příkazy v transakci, které mění zdroj dat, jsou prováděny.
CDatabase::ExecuteSQL Spustí příkaz SQL. Nejsou vráceny žádné datové záznamy.
CDatabase::GetBookmarkPersistence Identifikuje operace, kterými záložky zůstávají u objektů sady záznamů.
CDatabase::GetConnect Vrátí připojovací řetězec ODBC sloužící k připojení objektu CDatabase ke zdroji dat.
CDatabase::GetCursorCommitBehavior Identifikuje účinek potvrzení transakce na otevřený objekt sady záznamů.
CDatabase::GetCursorRollbackBehavior Identifikuje účinek vrácení transakce na otevřený objekt sady záznamů.
CDatabase::GetDatabaseName Vrátí název aktuálně používané databáze.
CDatabase::IsOpen Vrátí nenulovou hodnotu, CDatabase pokud je objekt aktuálně připojen ke zdroji dat.
CDatabase::OnSetOptions Volal rozhraní pro nastavení standardních možností připojení. Výchozí implementace nastaví hodnotu časového limitu dotazu. Tyto možnosti můžete předem vytvořit voláním SetQueryTimeout.
CDatabase::Open Vytvoří připojení ke zdroji dat (prostřednictvím ovladače ODBC).
CDatabase::OpenEx Vytvoří připojení ke zdroji dat (prostřednictvím ovladače ODBC).
CDatabase::Rollback Vrátí změny provedené během aktuální transakce. Zdroj dat se vrátí do předchozího stavu, jak je definováno při BeginTrans volání, bez omezení.
CDatabase::SetLoginTimeout Nastaví počet sekund, po kterých vyprší časový limit pokusu o připojení ke zdroji dat.
CDatabase::SetQueryTimeout Nastaví počet sekund po vypršení časového limitu databázových operací dotazu. Ovlivňuje všechny následné sady Openzáznamů , AddNew, Edita Delete volání.

Veřejné datové členy

Název Popis
CDatabase::m_hdbc Otevřete popisovač připojení ODBC (Database Connectivity) ke zdroji dat. Zadejte HDBC.

Poznámky

Zdroj dat je konkrétní instance dat hostovaná některým systémem pro správu databází (DBMS). Mezi příklady patří Microsoft SQL Server, Microsoft Access, Borland dBASE a xBASE. V aplikaci můžete mít najednou aktivní jeden nebo více CDatabase objektů.

Poznámka:

Pokud pracujete s třídami DAO (Data Access Objects) místo tříd ODBC (Open Database Connectivity), použijte místo toho třídu CDaoDatabase . Další informace naleznete v článku Přehled: Programování databáze.

Chcete-li použít CDatabase, vytvoření objektu CDatabase a volání jeho OpenEx členské funkce. Tím se otevře připojení. Když pak vytvoříte CRecordset objekty pro provoz na připojeném zdroji dat, předejte konstruktor sady záznamů ukazatel na objekt CDatabase . Po dokončení používání připojení zavolejte členovou Close funkci a odstraňte CDatabase objekt. Close zavře všechny sady záznamů, které jste předtím nezavřeli.

Další informace naleznete v CDatabasečláncích Zdroje dat (ODBC) a Přehled: Programování databáze.

Hierarchie dědičnosti

CObject

CDatabase

Požadavky

Záhlaví: afxdb.h

CDatabase::BeginTrans

Voláním této členské funkce zahájíte transakci s připojeným zdrojem dat.

BOOL BeginTrans();

Návratová hodnota

Nenulové, pokud bylo volání úspěšné a změny jsou potvrzeny pouze ručně; jinak 0.

Poznámky

Transakce se skládá z jednoho nebo více volání AddNew, Edit, Deletea Update členské funkce objektu CRecordset . Před zahájením transakce CDatabase musí být objekt již připojen ke zdroji dat voláním jeho OpenEx nebo Open členské funkce. Chcete-li ukončit transakci, volání CommitTrans přijmout všechny změny ve zdroji dat (a provést je) nebo volání Rollback přerušit celou transakci. Volání BeginTrans po otevření všech sad záznamů zahrnutých v transakci a co nejblíže k skutečným operacím aktualizace.

Upozornění

V závislosti na ovladači ODBC může otevření sady záznamů před voláním BeginTrans způsobit problémy při volání Rollback. Měli byste zkontrolovat konkrétní ovladač, který používáte. Pokud například používáte ovladač Microsoft Accessu zahrnutý v sadě Microsoft ODBC Desktop Driver Pack 3.0, je nutné počítat s požadavkem databázového stroje Jet, že byste neměli začínat transakci u žádné databáze, která má otevřený kurzor. V databázových třídách MFC znamená otevřený kurzor otevřený CRecordset objekt. Další informace naleznete v technické poznámce 68.

BeginTrans může také uzamknout datové záznamy na serveru v závislosti na požadované souběžnosti a možnostech zdroje dat. Informace o uzamčení dat naleznete v článku Sada záznamů: Uzamčení záznamů (ODBC).

Uživatelem definované transakce jsou vysvětleny v článku Transakce (ODBC).

BeginTrans určuje stav, do kterého lze posloupnost transakcí vrátit zpět (obráceně). Chcete-li vytvořit nový stav pro vrácení zpět, potvrďte všechny aktuální transakce a pak znovu zavolejte BeginTrans .

Upozornění

Volání BeginTrans znovu bez volání CommitTrans nebo Rollback je chyba.

Voláním CanTransact členské funkce určíte, jestli ovladač podporuje transakce pro danou databázi. Měli byste také zavolat GetCursorCommitBehavior a GetCursorRollbackBehavior určit podporu zachování kurzoru.

Další informace o transakcích naleznete v článku Transakce (ODBC).

Příklad

Viz článek Transakce: Provádění transakce v sadě záznamů (ODBC).

CDatabase::BindParameters

Přepsat BindParameters , když potřebujete vytvořit vazbu parametrů před voláním CDatabase::ExecuteSQL.

virtual void BindParameters(HSTMT hstmt);

Parametry

hstmt
Popisovač příkazu ODBC, pro který chcete svázat parametry.

Poznámky

Tento přístup je užitečný, pokud nepotřebujete sadu výsledků uložené procedury.

V přepsání volejte SQLBindParameters a související funkce ODBC pro vytvoření vazby parametrů. MFC volá přepsání před voláním .ExecuteSQL Nemusíte volat SQLPrepare; ExecuteSQL volání SQLExecDirect a zničí hstmt, který se používá pouze jednou.

CDatabase::Cancel

Voláním této členské funkce požádejte, aby zdroj dat zrušil probíhající asynchronní operaci nebo proces z druhého vlákna.

void Cancel();

Poznámky

Všimněte si, že třídy MFC ODBC již nepoužívají asynchronní zpracování; k provedení asynchronní operace je nutné přímo volat funkci SQLSetConnectOptionrozhraní ODBC API . Další informace naleznete v tématu Asynchronní spuštění.

CDatabase::CanTransact

Voláním této členské funkce určíte, zda databáze umožňuje transakce.

BOOL CanTransact() const;

Návratová hodnota

Nenulové, pokud sady záznamů používající tento CDatabase objekt umožňují transakce; jinak 0.

Poznámky

Informace o transakcích naleznete v článku Transakce (ODBC).

CDatabase::CanUpdate

Voláním této členské funkce určíte, zda CDatabase objekt umožňuje aktualizace.

BOOL CanUpdate() const;

Návratová hodnota

Nenulové, pokud CDatabase objekt umožňuje aktualizace; jinak 0 označuje, že jste se předali bReadOnly TRUE při otevření objektu CDatabase nebo že samotný zdroj dat je jen pro čtení. Zdroj dat je jen pro čtení, pokud volání funkce SQLGetInfo rozhraní ODBC API pro SQL_DATASOURCE_READ_ONLY vrácení y.

Poznámky

Ne všechny ovladače podporují aktualizace.

CDatabase::CDatabase

CDatabase Vytvoří objekt.

CDatabase();

Poznámky

Po vytvoření objektu je nutné zavolat jeho OpenEx nebo Open členovou funkci k navázání připojení k zadanému zdroji dat.

Může být vhodné CDatabase vložit objekt do třídy dokumentu.

Příklad

Tento příklad ukazuje použití CDatabase v -odvozené CDocumenttřídě.

// 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

Tuto členovou funkci zavolejte, pokud se chcete odpojit od zdroje dat.

virtual void Close();

Poznámky

Před voláním této členské funkce je nutné zavřít všechny sady záznamů přidružené k objektu CDatabase . Protože Close objekt nezničíte CDatabase , můžete objekt znovu použít tak, že otevřete nové připojení ke stejnému zdroji dat nebo jinému zdroji dat.

Všechny čekající AddNew nebo Edit výpisy sad záznamů používající databázi se zruší a všechny čekající transakce se vrátí zpět. Všechny sady záznamů závislé na objektu CDatabase zůstanou v nedefinovaném stavu.

Příklad

// 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

Volání této členské funkce při dokončení transakcí.

BOOL CommitTrans();

Návratová hodnota

Nenulové, pokud byly aktualizace úspěšně potvrzeny; jinak 0. Pokud CommitTrans selže, stav zdroje dat není definován. Abyste zjistili jejich stav, musíte zkontrolovat data.

Poznámky

Transakce se skládá z řady volání AddNew, , EditDeletea Update členské funkce CRecordset objektu, který začal voláním BeginTrans členské funkce. CommitTrans potvrdí transakci. Ve výchozím nastavení jsou aktualizace potvrzeny okamžitě; volání BeginTrans způsobí zpoždění závazku aktualizací, dokud CommitTrans se nevolá.

Dokud nevoláte na ukončení transakce, můžete zavolat CommitTrans Rollback členovou funkci k přerušení transakce a ponechat zdroj dat v původním stavu. Chcete-li zahájit novou transakci, zavolejte BeginTrans znovu.

Další informace o transakcích naleznete v článku Transakce (ODBC).

Příklad

Viz článek Transakce: Provádění transakce v sadě záznamů (ODBC).

CDatabase::ExecuteSQL

Tuto členovou funkci zavolejte, když potřebujete spustit příkaz SQL přímo.

void ExecuteSQL(LPCTSTR lpszSQL);

Parametry

lpszSQL
Ukazatel na řetězec ukončený hodnotou null obsahující platný příkaz SQL ke spuštění. Můžete předat CString.

Poznámky

Vytvořte příkaz jako řetězec ukončený hodnotou null. ExecuteSQL nevrací datové záznamy. Pokud chcete pracovat se záznamy, použijte místo toho objekt sady záznamů.

Většina příkazů pro zdroj dat se vydává prostřednictvím objektů sady záznamů, které podporují příkazy pro výběr dat, vkládání nových záznamů, odstraňování záznamů a úpravy záznamů. Nicméně, ne všechny funkce ODBC jsou přímo podporovány databázovými třídami, takže někdy budete muset provést přímé volání SQL s ExecuteSQL.

Příklad

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

Voláním této členské funkce určíte trvalost záložek u objektu sady záznamů po určitých operacích.

DWORD GetBookmarkPersistence() const;

Návratová hodnota

Bitová maska, která identifikuje operace, kterými záložky zůstávají v objektu sady záznamů. Podrobnosti najdete v části Poznámky.

Poznámky

Pokud například zavoláte CRecordset::GetBookmark a pak zavoláte CRecordset::Requery, záložka získaná z GetBookmark již nemusí být platná. Měli byste volat GetBookmarkPersistence před voláním CRecordset::SetBookmark.

Následující tabulka uvádí hodnoty bitové masky, které lze kombinovat pro návratovou GetBookmarkPersistencehodnotu .

Hodnota bitové masky Trvalost záložek
SQL_BP_CLOSE Záložky jsou platné po Requery operaci.
SQL_BP_DELETE Záložka řádku je platná po Delete operaci na daném řádku.
SQL_BP_DROP Záložky jsou platné po Close operaci.
SQL_BP_SCROLL Záložky jsou platné po jakékoli Move operaci. To jednoduše identifikuje, zda jsou záložky podporovány v sadě záznamů, jak je vráceno CRecordset::CanBookmark.
SQL_BP_TRANSACTION Záložky jsou platné po potvrzení nebo vrácení transakce zpět.
SQL_BP_UPDATE Záložka řádku je platná po Update operaci na daném řádku.
SQL_BP_OTHER_HSTMT Záložky přidružené k jednomu objektu sady záznamů jsou platné u druhé sady záznamů.

Další informace o této návratové hodnotě naleznete v rozhraní ODBC API funkce SQLGetInfo v sadě Windows SDK. Další informace o záložkách naleznete v článku Sada záznamů: Záložky a Absolutní pozice (ODBC).

CDatabase::GetConnect

Voláním této členské funkce načtěte připojovací řetězec použitou při volání OpenEx objektu nebo Open objektu připojeného CDatabase ke zdroji dat.

const CString GetConnect() const;

Návratová hodnota

A constCString obsahující připojovací řetězec, pokud OpenEx nebo Open byl volán; jinak prázdný řetězec.

Poznámky

Popis CDatabase::Open způsobu vytvoření připojovací řetězec

CDatabase::GetCursorCommitBehavior

Voláním této členské funkce určíte, jak CommitTrans operace ovlivňuje kurzory u otevřených objektů sady záznamů.

int GetCursorCommitBehavior() const;

Návratová hodnota

Hodnota označující účinek transakcí na otevřené objekty sady záznamů. Podrobnosti najdete v části Poznámky.

Poznámky

Následující tabulka uvádí možné návratové hodnoty a GetCursorCommitBehavior odpovídající účinek na otevřenou sadu záznamů.

Vrácená hodnota Efekt na CRecordset objekty
SQL_CB_CLOSE Volání CRecordset::Requery bezprostředně za potvrzením transakce.
SQL_CB_DELETE Volání CRecordset::Close bezprostředně za potvrzením transakce.
SQL_CB_PRESERVE Pokračujte normálně s operacemi CRecordset .

Další informace o této návratové hodnotě naleznete v rozhraní ODBC API funkce SQLGetInfo v sadě Windows SDK. Další informace o transakcích naleznete v článku Transakce (ODBC).

CDatabase::GetCursorRollbackBehavior

Voláním této členské funkce určíte, jak Rollback operace ovlivňuje kurzory u otevřených objektů sady záznamů.

int GetCursorRollbackBehavior() const;

Návratová hodnota

Hodnota označující účinek transakcí na otevřené objekty sady záznamů. Podrobnosti najdete v části Poznámky.

Poznámky

Následující tabulka uvádí možné návratové hodnoty a GetCursorRollbackBehavior odpovídající účinek na otevřenou sadu záznamů.

Vrácená hodnota Efekt na CRecordset objekty
SQL_CB_CLOSE Volání CRecordset::Requery okamžitě za vrácením transakce zpět.
SQL_CB_DELETE Volání CRecordset::Close okamžitě za vrácením transakce zpět.
SQL_CB_PRESERVE Pokračujte normálně s operacemi CRecordset .

Další informace o této návratové hodnotě naleznete v rozhraní ODBC API funkce SQLGetInfo v sadě Windows SDK. Další informace o transakcích naleznete v článku Transakce (ODBC).

CDatabase::GetDatabaseName

Voláním této členské funkce načtěte název aktuálně připojené databáze (za předpokladu, že zdroj dat definuje pojmenovaný objekt s názvem "databáze").

CString GetDatabaseName() const;

Návratová hodnota

A CString obsahující název databáze v případě úspěchu, jinak prázdný CString.

Poznámky

To není stejné jako název zdroje dat (DSN) zadaný v OpenEx volání nebo Open volání. Co GetDatabaseName vrací, závisí na rozhraní ODBC. Obecně platí, že databáze je kolekce tabulek. Pokud má tato entita název, GetDatabaseName vrátí ji.

Tento název můžete například zobrazit v nadpisu. Pokud při načítání názvu z rozhraní ODBC dojde k chybě, GetDatabaseName vrátí prázdnou CStringhodnotu .

CDatabase::IsOpen

Voláním této členské funkce určíte, jestli CDatabase je objekt aktuálně připojený ke zdroji dat.

BOOL IsOpen() const;

Návratová hodnota

Nenulové, pokud CDatabase je objekt aktuálně připojen; jinak 0.

CDatabase::m_hdbc

Obsahuje veřejný popisovač připojení ke zdroji dat ODBC – popisovač připojení.

Poznámky

Za normálních okolností nebudete muset přistupovat k této členské proměnné přímo. Místo toho architektura při volání OpenEx nebo Open. Rozhraní uvolní popisovač při volání delete operátoru objektu CDatabase . Všimněte si, že členová Close funkce nezvolí popisovač.

Za určitých okolností však možná budete muset použít popisovač přímo. Pokud například potřebujete volat funkce rozhraní ODBC API přímo než prostřednictvím třídy CDatabase, možná budete potřebovat popisovač připojení, který se má předat jako parametr. Podívejte se na následující příklad kódu.

Příklad

// 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

Architektura volá tuto členská funkce při přímém spuštění příkazu SQL s ExecuteSQL členské funkce.

virtual void OnSetOptions(HSTMT hstmt);

Parametry

hstmt
Popisovač příkazu ODBC, pro které jsou nastaveny možnosti.

Poznámky

CRecordset::OnSetOptions také volá tuto členovu funkci.

OnSetOptions nastaví hodnotu časového limitu přihlášení. Pokud existují předchozí volání SetQueryTimeout funkce a člena, OnSetOptions odráží aktuální hodnoty, jinak nastaví výchozí hodnoty.

Poznámka:

Před mfc 4.2 OnSetOptions také nastavte režim zpracování buď na snychronous nebo asynchronní. Počínaje mfc 4.2 jsou všechny operace synchronní. Chcete-li provést asynchronní operaci, musíte provést přímé volání funkce SQLSetPosrozhraní ODBC API .

Pokud chcete změnit hodnotu časového limitu, nemusíte ji přepsat OnSetOptions . Místo toho pro přizpůsobení hodnoty časového limitu dotazu volání SetQueryTimeout před vytvořením sady záznamů; OnSetOptions použije novou hodnotu. Hodnoty nastavené pro následné operace u všech sad záznamů nebo přímých volání SQL.

Pokud chcete nastavit další možnosti, přepsat OnSetOptions . Přepsání by mělo volat základní třídu OnSetOptions buď před nebo po volání funkce SQLSetStmtOptionrozhraní ODBC API . Postupujte podle metody znázorněné ve výchozí implementaci OnSetOptionsrozhraní .

CDatabase::Open

Voláním této členské funkce inicializujete nově vytvořený CDatabase objekt.

virtual BOOL Open(
    LPCTSTR lpszDSN,
    BOOL bExclusive = FALSE,
    BOOL bReadOnly = FALSE,
    LPCTSTR lpszConnect = _T("ODBC;"),
    BOOL bUseCursorLib = TRUE);

Parametry

lpszDSN
Určuje název zdroje dat – název zaregistrovaný v rozhraní ODBC prostřednictvím programu správce ODBC. Je-li zadána hodnota DSN ( lpszConnect ve tvaru "DSN=<data-source>"), nesmí být znovu zadána v lpszDSN. V tomto případě lpszDSN by měl být NULL. Jinak můžete předat NULL , pokud chcete uživateli prezentovat dialogové okno Zdroj dat, ve kterém uživatel může vybrat zdroj dat. Další informace najdete v tématu Poznámky.

bExclusive
Tato verze knihovny tříd není podporována. V současné době kontrolní výraz selže, pokud je TRUEtento parametr . Zdroj dat se vždy otevře jako sdílený (ne exkluzivní).

bReadOnly
TRUE pokud máte v úmyslu připojení jen pro čtení a zakázat aktualizace zdroje dat. Všechny závislé sady záznamů dědí tento atribut. Výchozí hodnota je FALSE.

lpszConnect
Určuje připojovací řetězec. Připojovací řetězec zřetězí informace, například název zdroje dat, ID uživatele platné pro zdroj dat, ověřovací řetězec uživatele (heslo, pokud zdroj dat vyžaduje) a další informace. Celý připojovací řetězec musí mít předponu řetězec "ODBC;" (velká nebo malá). Řetězec "ODBC;" se používá k označení, že připojení je ke zdroji dat ODBC. To je kvůli zvýšení kompatibility, pokud budoucí verze knihovny tříd mohou podporovat zdroje dat jiného typu než ODBC.

bUseCursorLib
TRUE Chcete-li načíst knihovnu DLL knihovny kurzorů ODBC. Knihovna kurzorů maskuje některé funkce základního ovladače ODBC, což účinně brání použití dynaset (pokud je ovladač podporuje). Jedinými podporovanými kurzory, pokud je načtena knihovna kurzorů, jsou statické snímky a kurzory pouze vpřed. Výchozí hodnota je TRUE. Pokud plánujete vytvořit objekt sady záznamů přímo z CRecordset něj bez odvození, neměli byste načíst knihovnu kurzorů.

Návratová hodnota

Nenulové, pokud je připojení úspěšně provedeno; jinak 0, pokud uživatel zvolí Zrušit při zobrazení dialogového okna s žádostí o další informace o připojení. Ve všech ostatních případech architektura vyvolá výjimku.

Poznámky

Než ho budete moct použít k vytvoření objektu sady záznamů, je nutné inicializovat databázový objekt.

Poznámka:

OpenEx Volání členské funkce je upřednostňovaným způsobem připojení ke zdroji dat a inicializace databázového objektu.

Pokud parametry ve volání Open neobsahují dostatek informací pro vytvoření připojení, ovladač ODBC otevře dialogové okno pro získání potřebných informací od uživatele. Při volání Open, připojovací řetězec , lpszConnectje uložen soukromě v CDatabase objektu a je k dispozici voláním GetConnect členské funkce.

Pokud chcete, můžete otevřít vlastní dialogové okno před voláním Open získat informace od uživatele, například heslo, a pak tyto informace přidat do připojovací řetězec, do Openkterého předáte . Nebo můžete chtít uložit připojovací řetězec, které předáte, abyste ho mohli znovu použít při příštím volání Open aplikace na CDatabase objekt.

Můžete také použít připojovací řetězec pro více úrovní autorizace přihlášení (každý pro jiný CDatabase objekt) nebo k předávání dalších informací specifických pro zdroj dat. Další informace o připojovací řetězec naleznete v kapitole 5 v sadě Windows SDK.

Pokud je například hostitel DBMS nedostupný, může dojít k vypršení časového limitu připojení. Pokud pokus o připojení selže, Open vyvolá CDBExceptionchybu .

Příklad

// 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

Voláním této členské funkce inicializujete nově vytvořený CDatabase objekt.

virtual BOOL OpenEx(
    LPCTSTR lpszConnectString,
    DWORD dwOptions = 0);

Parametry

lpszConnectString
Určuje připojovací řetězec ODBC. To zahrnuje název zdroje dat a také další volitelné informace, jako je ID uživatele a heslo. Je to například "DSN=SQLServer_Source;UID=SA;PWD=abc123" možné připojovací řetězec. Všimněte si, že pokud předáte NULL lpszConnectString, dialogové okno Zdroj dat vyzve uživatele k výběru zdroje dat.

dwOptions
Bitová maska, která určuje kombinaci následujících hodnot. Výchozí hodnota je 0, což znamená, že databáze bude otevřena jako sdílená s přístupem k zápisu, knihovna DLL kurzoru ODBC nebude načtena a dialogové okno připojení ODBC se zobrazí pouze v případě, že není dostatek informací pro vytvoření připojení.

  • CDatabase::openExclusive Tato verze knihovny tříd není podporována. Zdroj dat je vždy otevřen jako sdílený (ne exkluzivní). V současné době kontrolní výraz selže, pokud zadáte tuto možnost.

  • CDatabase::openReadOnly Otevřete zdroj dat jen pro čtení.

  • CDatabase::useCursorLib Načtěte knihovnu DLL knihovny kurzorů ODBC. Knihovna kurzorů maskuje některé funkce základního ovladače ODBC, což účinně brání použití dynaset (pokud je ovladač podporuje). Jedinými podporovanými kurzory, pokud je načtena knihovna kurzorů, jsou statické snímky a kurzory pouze vpřed. Pokud plánujete vytvořit objekt sady záznamů přímo z CRecordset něj bez odvození, neměli byste načíst knihovnu kurzorů.

  • CDatabase::noOdbcDialog Nezobrazovat dialogové okno připojení ODBC bez ohledu na to, zda je zadán dostatek informací o připojení.

  • CDatabase::forceOdbcDialog Vždy zobrazte dialogové okno připojení ODBC.

Návratová hodnota

Nenulové, pokud je připojení úspěšně provedeno; jinak 0, pokud uživatel zvolí Zrušit při zobrazení dialogového okna s žádostí o další informace o připojení. Ve všech ostatních případech architektura vyvolá výjimku.

Poznámky

Než ho budete moct použít k vytvoření objektu sady záznamů, je nutné inicializovat databázový objekt.

lpszConnectString Pokud parametr ve vašem OpenEx volání neobsahuje dostatek informací pro vytvoření připojení, ovladač ODBC otevře dialogové okno pro získání potřebných informací od uživatele za předpokladu, že jste nenastavili CDatabase::noOdbcDialog nebo CDatabase::forceOdbcDialog v parametrudwOptions. Při volání OpenEx, připojovací řetězec , lpszConnectStringje uložen soukromě v CDatabase objektu a je k dispozici voláním GetConnect členské funkce.

Pokud chcete, můžete otevřít vlastní dialogové okno před voláním OpenEx získat informace od uživatele, například heslo, a pak tyto informace přidat do připojovací řetězec, do OpenExkterého předáte . Nebo můžete chtít uložit připojovací řetězec, které předáte, abyste ho mohli znovu použít při příštím volání OpenEx aplikace na CDatabase objekt.

Můžete také použít připojovací řetězec pro více úrovní autorizace přihlášení (každý pro jiný CDatabase objekt) nebo k předávání dalších informací specifických pro zdroj dat. Další informace o připojovací řetězec naleznete v kapitole 6 v referenční dokumentaci programátora ODBC.

Pokud je například hostitel DBMS nedostupný, může dojít k vypršení časového limitu připojení. Pokud pokus o připojení selže, OpenEx vyvolá CDBExceptionchybu .

Příklad

// 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

Voláním této členské funkce zrušíte změny provedené během transakce.

BOOL Rollback();

Návratová hodnota

Nenulové, pokud transakce byla úspěšně obrácena; jinak 0. Rollback Pokud volání selže, zdroj dat a stavy transakcí nejsou definovány. Pokud Rollback vrátí hodnotu 0, je nutné zkontrolovat zdroj dat a určit jeho stav.

Poznámky

Všechna CRecordset AddNewvolání a DeleteEditUpdate volání se od posledního BeginTrans volání vrátí zpět do stavu, který existoval v době volání.

Po volání Rollback, transakce je překonaná a je nutné volat BeginTrans znovu pro jinou transakci. Záznam, který byl aktuální předtím, než jste volali BeginTrans , se stane aktuálním záznamem znovu za Rollback.

Po vrácení zpět zůstane záznam, který byl aktuální před vrácením zpět. Podrobnosti o stavu sady záznamů a zdroje dat po vrácení zpět naleznete v článku Transakce (ODBC).

Příklad

Viz článek Transakce: Provádění transakce v sadě záznamů (ODBC).

CDatabase::SetLoginTimeout

Zavolejte tuto členovou funkci – před voláním OpenEx nebo Open – a přepište výchozí počet sekund povolených před vypršením časového limitu připojení zdroje dat.

void SetLoginTimeout(DWORD dwSeconds);

Parametry

dwSeconds
Počet sekund, které se mají povolit, než vyprší časový limit pokusu o připojení.

Poznámky

Pokud například DBMS není k dispozici, může dojít k vypršení časového limitu pokusu o připojení. Volání SetLoginTimeout po vytvoření neinicializovaného CDatabase objektu, ale před voláním OpenEx nebo Open.

Výchozí hodnota časových limitů přihlášení je 15 sekund. Ne všechny zdroje dat podporují možnost zadat hodnotu časového limitu přihlášení. Pokud zdroj dat nepodporuje časový limit, získáte výstup trasování, ale ne výjimku. Hodnota 0 znamená "nekonečné".

CDatabase::SetQueryTimeout

Voláním této členské funkce přepíšete výchozí počet sekund, který povolíte před vypršením časového limitu následných operací v připojeném zdroji dat.

void SetQueryTimeout(DWORD dwSeconds);

Parametry

dwSeconds
Počet sekund, které se mají povolit, než vyprší časový limit pokusu o dotaz.

Poznámky

Kvůli problémům se síťovým přístupem, nadměrnému zpracování dotazů atd. může dojít k vypršení časového limitu operace. Pokud SetQueryTimeout chcete změnit hodnotu časového limitu dotazu, Update zavolejte před otevřením sady záznamů nebo před voláním sady AddNewzáznamů nebo Delete členských funkcí. Nastavení ovlivní všechny následující Open, AddNew, Updatea Delete volání všech sad záznamů přidružených k tomuto CDatabase objektu. Změna hodnoty časového limitu dotazu pro sadu záznamů po otevření nezmění hodnotu sady záznamů. Například následující Move operace nepoužívají novou hodnotu.

Výchozí hodnota časových limitů dotazu je 15 sekund. Ne všechny zdroje dat podporují možnost nastavit hodnotu časového limitu dotazu. Pokud nastavíte hodnotu časového limitu dotazu 0, nedojde k žádnému vypršení časového limitu; komunikace se zdrojem dat může přestat reagovat. Toto chování může být užitečné při vývoji. Pokud zdroj dat nepodporuje časový limit, získáte výstup trasování, ale ne výjimku.

Viz také

CObject Třída
Graf hierarchie
CRecordset Třída