Share via


CDatabase-klasse

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Vertegenwoordigt een verbinding met een gegevensbron, waarmee u kunt werken op de gegevensbron.

Syntaxis

class CDatabase : public CObject

Leden

Openbare constructors

Naam Description
CDatabase::CDatabase Maakt een CDatabase object. U moet het object initialiseren door aan te roepen OpenEx of Open.

Openbare methoden

Naam Description
CDatabase::BeginTrans Hiermee start u een 'transactie', een reeks omkeerbare aanroepen naar de AddNewfuncties , EditDeleteen Update leden van klasse CRecordset - op de verbonden gegevensbron. De gegevensbron moet transacties ondersteunen om BeginTrans enig effect te hebben.
CDatabase::BindParameters Hiermee kunt u parameters binden voordat u aanroept CDatabase::ExecuteSQL.
CDatabase::Cancel Hiermee wordt een asynchrone bewerking of een proces van een tweede thread geannuleerd.
CDatabase::CanTransact Retourneert niet-nul als de gegevensbron transacties ondersteunt.
CDatabase::CanUpdate Retourneert niet-nul als het CDatabase object kan worden bijgewerkt (niet alleen-lezen).
CDatabase::Close Hiermee sluit u de verbinding met de gegevensbron.
CDatabase::CommitTrans Hiermee voltooit u een transactie die is gestart.BeginTrans Opdrachten in de transactie die de gegevensbron wijzigen, worden uitgevoerd.
CDatabase::ExecuteSQL Voert een SQL-instructie uit. Er worden geen gegevensrecords geretourneerd.
CDatabase::GetBookmarkPersistence Identificeert de bewerkingen waarmee bladwijzers op recordsetobjecten worden bewaard.
CDatabase::GetConnect Retourneert de ODBC-verbindingsreeks die wordt gebruikt om het CDatabase object te verbinden met een gegevensbron.
CDatabase::GetCursorCommitBehavior Identificeert het effect van het doorvoeren van een transactie op een geopend recordset-object.
CDatabase::GetCursorRollbackBehavior Identificeert het effect van het terugdraaien van een transactie op een geopend recordset-object.
CDatabase::GetDatabaseName Retourneert de naam van de database die momenteel in gebruik is.
CDatabase::IsOpen Retourneert niet-nul als het CDatabase object momenteel is verbonden met een gegevensbron.
CDatabase::OnSetOptions Aangeroepen door het framework om standaardverbindingsopties in te stellen. Met de standaard implementatie wordt de time-outwaarde van de query ingesteld. U kunt deze opties vooraf instellen door te bellen SetQueryTimeout.
CDatabase::Open Hiermee wordt een verbinding tot stand gebracht met een gegevensbron (via een ODBC-stuurprogramma).
CDatabase::OpenEx Hiermee wordt een verbinding tot stand gebracht met een gegevensbron (via een ODBC-stuurprogramma).
CDatabase::Rollback Hiermee worden wijzigingen omgekeerd die zijn aangebracht tijdens de huidige transactie. De gegevensbron keert terug naar de vorige status, zoals gedefinieerd tijdens de BeginTrans aanroep, ongewijzigd.
CDatabase::SetLoginTimeout Hiermee stelt u het aantal seconden in waarna er een time-out optreedt voor een verbindingspoging van een gegevensbron.
CDatabase::SetQueryTimeout Hiermee stelt u het aantal seconden in waarna er een time-out optreedt voor databasequerybewerkingen. Is van invloed op alle volgende recordsetOpen, AddNewen EditDelete aanroepen.

Leden van openbare gegevens

Naam Description
CDatabase::m_hdbc Open de ODBC-verbindingsgreep (Database Connectivity) met een gegevensbron. Typ HDBC.

Opmerkingen

Een gegevensbron is een specifiek exemplaar van gegevens die worden gehost door een databasebeheersysteem (DBMS). Voorbeelden hiervan zijn Microsoft SQL Server, Microsoft Access, Borland dBASE en xBASE. U kunt een of meer CDatabase objecten tegelijk in uw toepassing activeren.

Opmerking

Als u werkt met de DAO-klassen (Data Access Objects) in plaats van de ODBC-klassen (Open Database Connectivity), gebruikt u in plaats daarvan klasse CDaoDatabase . Zie het artikel Overzicht: Databaseprogrammering voor meer informatie.

Als u een object wilt gebruiken CDatabase, maakt u een CDatabase object en roept u de OpenEx lidfunctie aan. Hiermee opent u een verbinding. Wanneer u vervolgens objecten maakt CRecordset voor gebruik op de verbonden gegevensbron, geeft u de recordsetconstructor een aanwijzer door aan uw CDatabase object. Wanneer u klaar bent met het gebruik van de verbinding, roept u de Close lidfunctie aan en vernietigt u het CDatabase object. Close sluit alle recordsets die u nog niet eerder hebt gesloten.

Zie de artikelen Gegevensbron (ODBC) en Overzicht: Databaseprogrammering voor meer informatie.CDatabase

Overnamehiërarchie

CObject

CDatabase

Requirements

Rubriek:afxdb.h

CDatabase::BeginTrans

Roep deze lidfunctie aan om een transactie te starten met de verbonden gegevensbron.

BOOL BeginTrans();

Retourwaarde

Niet-nul als de aanroep is geslaagd en wijzigingen alleen handmatig worden doorgevoerd; anders 0.

Opmerkingen

Een transactie bestaat uit een of meer aanroepen naar de AddNewEdit, en DeleteUpdate lidfuncties van een CRecordset object. Voordat u een transactie start, moet het CDatabase object al zijn verbonden met de gegevensbron door de bijbehorende of Open lidfunctie aan te roepenOpenEx. Als u de transactie wilt beëindigen, roept CommitTrans u aan om alle wijzigingen in de gegevensbron te accepteren (en deze uit te voeren) of Rollback roept u aan om de hele transactie af te breken. Roep BeginTrans aan nadat u recordsets hebt geopend die betrokken zijn bij de transactie en zo dicht mogelijk bij de werkelijke updatebewerkingen.

Waarschuwing

Afhankelijk van uw ODBC-stuurprogramma kan het openen van een recordset voordat bellen BeginTrans problemen veroorzaken bij het aanroepen Rollback. Controleer het specifieke stuurprogramma dat u gebruikt. Wanneer u bijvoorbeeld het Microsoft Access-stuurprogramma gebruikt dat is opgenomen in het Microsoft ODBC Desktop Driver Pack 3.0, moet u rekening houden met de vereiste van de Jet-database-engine dat u geen transactie moet starten op een database met een geopende cursor. In de MFC-databaseklassen betekent een geopende cursor een geopend CRecordset object. Zie Technische opmerking 68 voor meer informatie.

BeginTrans kan ook gegevensrecords op de server vergrendelen, afhankelijk van de aangevraagde gelijktijdigheid en de mogelijkheden van de gegevensbron. Zie het artikel Recordset: Recordset: Vergrendelingsrecords (ODBC) voor informatie over het vergrendelen van gegevens.

Door de gebruiker gedefinieerde transacties worden uitgelegd in het artikel Transaction (ODBC).

BeginTrans stelt de status vast waarop de volgorde van transacties kan worden teruggedraaid (omgekeerd). Als u een nieuwe status wilt instellen voor terugdraaiacties, voert u een huidige transactie door en roept u BeginTrans deze opnieuw aan.

Waarschuwing

Opnieuw bellen zonder te bellen BeginTransCommitTrans of Rollback een fout is.

Roep de CanTransact lidfunctie aan om te bepalen of uw stuurprogramma transacties voor een bepaalde database ondersteunt. U moet ook bellen GetCursorCommitBehavior en GetCursorRollbackBehavior de ondersteuning voor het behoud van cursors bepalen.

Zie het artikel Transaction (ODBC) voor meer informatie over transacties.

Example

Zie het artikel Transaction: Performing a Transaction in a Recordset (ODBC).

CDatabase::BindParameters

Overschrijven BindParameters wanneer u parameters moet binden voordat u aanroept CDatabase::ExecuteSQL.

virtual void BindParameters(HSTMT hstmt);

Parameterwaarden

hstmt
De ODBC-instructiegreep waarvoor u parameters wilt binden.

Opmerkingen

Deze methode is handig wanneer u de resultatenset niet nodig hebt uit een opgeslagen procedure.

Roep in uw overschrijving SQLBindParameters ODBC-functies aan om de parameters te binden. MFC roept uw overschrijving aan voordat uw oproep naar ExecuteSQL. U hoeft niet te bellen SQLPrepare; ExecuteSQL oproepen SQLExecDirect en vernietigt de hstmt, die slechts eenmaal wordt gebruikt.

CDatabase::Cancel

Roep deze lidfunctie aan om aan te vragen dat de gegevensbron een asynchrone bewerking annuleert die wordt uitgevoerd of een proces vanuit een tweede thread.

void Cancel();

Opmerkingen

Houd er rekening mee dat de MFC ODBC-klassen geen asynchrone verwerking meer gebruiken; als u een asynchrone bewerking wilt uitvoeren, moet u de ODBC-API-functie SQLSetConnectOptionrechtstreeks aanroepen. Zie Asynchrone uitvoering voor meer informatie.

CDatabase::CanTransact

Roep deze lidfunctie aan om te bepalen of de database transacties toestaat.

BOOL CanTransact() const;

Retourwaarde

Niet-nul als recordsets die dit CDatabase object gebruiken transacties toestaan; anders 0.

Opmerkingen

Zie het artikel Transaction (ODBC) voor meer informatie over transacties.

CDatabase::CanUpdate

Roep deze lidfunctie aan om te bepalen of het CDatabase object updates toestaat.

BOOL CanUpdate() const;

Retourwaarde

Niet-nul als het CDatabase object updates toestaat; anders 0, wat aangeeft dat u hebt doorgegeven TRUEbReadOnly bij het openen van het CDatabase object of dat de gegevensbron zelf alleen-lezen is. De gegevensbron heeft het kenmerk Alleen-lezen als een aanroep naar de ODBC-API-functie SQLGetInfo wordt SQL_DATASOURCE_READ_ONLY geretourneerd y.

Opmerkingen

Niet alle stuurprogramma's ondersteunen updates.

CDatabase::CDatabase

Maakt een CDatabase object.

CDatabase();

Opmerkingen

Nadat u het object hebt gemaakt, moet u de bijbehorende of Open lidfunctie aanroepen OpenEx om een verbinding tot stand te brengen met een opgegeven gegevensbron.

Het is misschien handig om het CDatabase object in te sluiten in uw documentklasse.

Example

In dit voorbeeld wordt het gebruik CDatabase in een CDocument-afgeleide klasse geïllustreerd.

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

Roep deze lidfunctie aan als u de verbinding met een gegevensbron wilt verbreken.

virtual void Close();

Opmerkingen

U moet recordsets sluiten die aan het CDatabase object zijn gekoppeld voordat u deze lidfunctie aanroept. Omdat Close het CDatabase object niet wordt vernietigd, kunt u het object opnieuw gebruiken door een nieuwe verbinding met dezelfde gegevensbron of een andere gegevensbron te openen.

Alle recordsets die in behandeling zijn AddNew of Edit instructies van recordsets die de database gebruiken, worden geannuleerd en alle transacties die in behandeling zijn, worden teruggedraaid. Recordsets die afhankelijk zijn van het CDatabase object, blijven in een niet-gedefinieerde status.

Example

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

Roep deze lidfunctie aan bij het voltooien van transacties.

BOOL CommitTrans();

Retourwaarde

Niet-nul als de updates zijn doorgevoerd; anders 0. Als CommitTrans dit mislukt, is de status van de gegevensbron niet gedefinieerd. U moet de gegevens controleren om de status ervan te bepalen.

Opmerkingen

Een transactie bestaat uit een reeks aanroepen naar de AddNew, Editen DeleteUpdate lidfuncties van een CRecordset object dat is begonnen met een aanroep naar de BeginTrans lidfunctie. CommitTrans de transactie doorvoert. Updates worden standaard onmiddellijk doorgevoerd; het aanroepen BeginTrans zorgt ervoor dat de toezegging van updates wordt uitgesteld totdat CommitTrans deze wordt aangeroepen.

Totdat u CommitTrans een transactie beëindigt, kunt u de lidfunctie aanroepen om de Rollback transactie af te breken en de gegevensbron in de oorspronkelijke staat te laten staan. Als u een nieuwe transactie wilt starten, belt u BeginTrans opnieuw.

Zie het artikel Transaction (ODBC) voor meer informatie over transacties.

Example

Zie het artikel Transaction: Performing a Transaction in a Recordset (ODBC).

CDatabase::ExecuteSQL

Roep deze lidfunctie aan wanneer u rechtstreeks een SQL-opdracht moet uitvoeren.

void ExecuteSQL(LPCTSTR lpszSQL);

Parameterwaarden

lpszSQL
Aanwijzer naar een door null beëindigde tekenreeks met een geldige SQL-opdracht die moet worden uitgevoerd. Je kunt een CString.

Opmerkingen

Maak de opdracht als een door null beëindigde tekenreeks. ExecuteSQL retourneert geen gegevensrecords. Als u wilt werken op records, gebruikt u in plaats daarvan een recordsetobject.

De meeste opdrachten voor een gegevensbron worden uitgegeven via recordsetobjecten, die ondersteuning bieden voor opdrachten voor het selecteren van gegevens, het invoegen van nieuwe records, het verwijderen van records en het bewerken van records. Niet alle ODBC-functionaliteit wordt echter rechtstreeks ondersteund door de databaseklassen, dus mogelijk moet u soms een directe SQL-aanroep uitvoeren met ExecuteSQL.

Example

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

Roep deze lidfunctie aan om de persistentie van bladwijzers op een recordsetobject te bepalen na bepaalde bewerkingen.

DWORD GetBookmarkPersistence() const;

Retourwaarde

Een bitmasker waarmee de bewerkingen worden geïdentificeerd waarmee bladwijzers op een recordsetobject worden bewaard. Zie Opmerkingen voor meer informatie.

Opmerkingen

Als u bijvoorbeeld belt CRecordset::GetBookmark en vervolgens aanroept CRecordset::Requery, is de bladwijzer die u hebt GetBookmark verkregen, mogelijk niet meer geldig. U moet bellen GetBookmarkPersistence voordat u belt CRecordset::SetBookmark.

De volgende tabel bevat de bitmaskerwaarden die kunnen worden gecombineerd voor de retourwaarde van GetBookmarkPersistence.

Bitmaskerwaarde Persistentie van bladwijzers
SQL_BP_CLOSE Bladwijzers zijn geldig na een Requery bewerking.
SQL_BP_DELETE De bladwijzer voor een rij is geldig na een Delete bewerking in die rij.
SQL_BP_DROP Bladwijzers zijn geldig na een Close bewerking.
SQL_BP_SCROLL Bladwijzers zijn geldig na een bewerking Move . Hiermee wordt eenvoudig geïdentificeerd of bladwijzers worden ondersteund in de recordset, zoals geretourneerd door CRecordset::CanBookmark.
SQL_BP_TRANSACTION Bladwijzers zijn geldig nadat een transactie is doorgevoerd of teruggedraaid.
SQL_BP_UPDATE De bladwijzer voor een rij is geldig na een Update bewerking op die rij.
SQL_BP_OTHER_HSTMT Bladwijzers die aan één recordsetobject zijn gekoppeld, zijn geldig in een tweede recordset.

Zie de FUNCTIE ODBC-API SQLGetInfo in de Windows SDK voor meer informatie over deze retourwaarde. Zie het artikel Recordset: Bookmarks and Absolute Positions (ODBC) voor meer informatie over bladwijzers.

CDatabase::GetConnect

Roep deze lidfunctie aan om de verbindingsreeks op te halen die tijdens de aanroep naar OpenEx of Open die het CDatabase object heeft verbonden met een gegevensbron.

const CString GetConnect() const;

Retourwaarde

Een constCString met de verbindingsreeks als OpenEx of Open is aangeroepen, anders een lege tekenreeks.

Opmerkingen

Zie CDatabase::Open voor een beschrijving van hoe de verbindingsreeks wordt gemaakt.

CDatabase::GetCursorCommitBehavior

Roep deze lidfunctie aan om te bepalen hoe een CommitTrans bewerking van invloed is op cursors op geopende recordsetobjecten.

int GetCursorCommitBehavior() const;

Retourwaarde

Een waarde die het effect van transacties op geopende recordsetobjecten aangeeft. Zie Opmerkingen voor meer informatie.

Opmerkingen

De volgende tabel bevat de mogelijke retourwaarden voor GetCursorCommitBehavior en het bijbehorende effect op de geopende recordset.

Retourwaarde Effect op CRecordset objecten
SQL_CB_CLOSE Roep CRecordset::Requery direct na de transactiedoorvoering aan.
SQL_CB_DELETE Roep CRecordset::Close direct na de transactiedoorvoering aan.
SQL_CB_PRESERVE Ga normaal door met CRecordset bewerkingen.

Zie de FUNCTIE ODBC-API SQLGetInfo in de Windows SDK voor meer informatie over deze retourwaarde. Zie het artikel Transaction (ODBC) voor meer informatie over transacties.

CDatabase::GetCursorRollbackBehavior

Roep deze lidfunctie aan om te bepalen hoe een Rollback bewerking van invloed is op cursors op geopende recordsetobjecten.

int GetCursorRollbackBehavior() const;

Retourwaarde

Een waarde die het effect van transacties op geopende recordsetobjecten aangeeft. Zie Opmerkingen voor meer informatie.

Opmerkingen

De volgende tabel bevat de mogelijke retourwaarden voor GetCursorRollbackBehavior en het bijbehorende effect op de geopende recordset.

Retourwaarde Effect op CRecordset objecten
SQL_CB_CLOSE Oproep CRecordset::Requery onmiddellijk na het terugdraaien van de transactie.
SQL_CB_DELETE Oproep CRecordset::Close onmiddellijk na het terugdraaien van de transactie.
SQL_CB_PRESERVE Ga normaal door met CRecordset bewerkingen.

Zie de FUNCTIE ODBC-API SQLGetInfo in de Windows SDK voor meer informatie over deze retourwaarde. Zie het artikel Transaction (ODBC) voor meer informatie over transacties.

CDatabase::GetDatabaseName

Roep deze lidfunctie aan om de naam van de momenteel verbonden database op te halen (mits de gegevensbron een benoemd object met de naam 'database' definieert).

CString GetDatabaseName() const;

Retourwaarde

Een CString met de databasenaam als dit lukt; anders een lege CString.

Opmerkingen

Dit is niet hetzelfde als de naam van de gegevensbron (DSN) die is opgegeven in de of Open aanroepOpenEx. Wat GetDatabaseName retourneert, is afhankelijk van ODBC. Over het algemeen is een database een verzameling tabellen. Als deze entiteit een naam heeft, GetDatabaseName wordt deze geretourneerd.

U wilt deze naam bijvoorbeeld weergeven in een kop. Als er een fout optreedt tijdens het ophalen van de naam van ODBC, GetDatabaseName wordt een lege CStringwaarde geretourneerd.

CDatabase::IsOpen

Roep deze lidfunctie aan om te bepalen of het CDatabase object momenteel is verbonden met een gegevensbron.

BOOL IsOpen() const;

Retourwaarde

Niet-nul als het CDatabase object momenteel is verbonden; anders 0.

CDatabase::m_hdbc

Bevat een openbare ingang voor een ODBC-gegevensbronverbinding, een 'verbindingsgreep'.

Opmerkingen

Normaal gesproken hebt u geen rechtstreeks toegang tot deze lidvariabele nodig. In plaats daarvan wijst het framework de ingang toe wanneer u aanroept OpenEx of Open. Het framework maakt de toewijzing van de ingang ongedaan wanneer u de delete operator voor het CDatabase object aanroept. Houd er rekening mee dat de toewijzing van de ingang niet ongedaan wordt gemaakt door de Close lidfunctie.

In sommige omstandigheden moet u de ingang echter mogelijk rechtstreeks gebruiken. Als u bijvoorbeeld ODBC-API-functies rechtstreeks moet aanroepen in plaats van via klasse CDatabase, hebt u mogelijk een verbindingsgreep nodig om als parameter door te geven. Zie het onderstaande codevoorbeeld.

Example

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

Het framework roept deze lidfunctie aan bij het rechtstreeks uitvoeren van een SQL-instructie met de ExecuteSQL lidfunctie.

virtual void OnSetOptions(HSTMT hstmt);

Parameterwaarden

hstmt
De ODBC-instructiegreep waarvoor opties worden ingesteld.

Opmerkingen

CRecordset::OnSetOptions roept deze lidfunctie ook aan.

OnSetOptions stelt de time-outwaarde voor aanmelding in. Als er eerdere aanroepen naar de functie en de SetQueryTimeout lidfunctie zijn geweest, OnSetOptions geeft u de huidige waarden weer. Anders worden standaardwaarden ingesteld.

Opmerking

Vóór MFC 4.2 stelt OnSetOptions u ook de verwerkingsmodus in op snychronous of asynchroon. Vanaf MFC 4.2 zijn alle bewerkingen synchroon. Als u een asynchrone bewerking wilt uitvoeren, moet u een directe aanroep uitvoeren naar de ODBC-API-functie SQLSetPos.

U hoeft de time-outwaarde niet te overschrijven OnSetOptions . Als u in plaats daarvan de time-outwaarde van de query wilt aanpassen, roept SetQueryTimeout u aan voordat u een recordset maakt. OnSetOptions Hierbij wordt de nieuwe waarde gebruikt. De waarden die zijn ingesteld, zijn van toepassing op volgende bewerkingen op alle recordsets of directe SQL-aanroepen.

Overschrijven OnSetOptions als u extra opties wilt instellen. Uw onderdrukking moet de basisklasse OnSetOptions aanroepen voor of nadat u de ODBC-API-functie SQLSetStmtOptionhebt aangeroepen. Volg de methode die wordt geïllustreerd in de standaard implementatie van het framework.OnSetOptions

CDatabase::Open

Roep deze lidfunctie aan om een nieuw samengesteld CDatabase object te initialiseren.

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

Parameterwaarden

lpszDSN
Hiermee geeft u een gegevensbronnaam op: een naam die is geregistreerd bij ODBC via het ODBC Administrator-programma. Als een DSN-waarde is opgegeven in lpszConnect (in de vorm "DSN=<gegevensbron>"), mag deze niet opnieuw worden opgegeven in lpszDSN. In dit geval lpszDSN moet dit zijn NULL. Anders kunt u doorgeven NULL als u de gebruiker wilt presenteren met een dialoogvenster Gegevensbron waarin de gebruiker een gegevensbron kan selecteren. Zie Opmerkingen voor meer informatie.

bExclusive
Niet ondersteund in deze versie van de klassebibliotheek. Op dit moment mislukt een assertie als deze parameter is TRUE. De gegevensbron wordt altijd geopend als gedeeld (niet exclusief).

bReadOnly
TRUE als u van plan bent om de verbinding alleen-lezen te hebben en updates voor de gegevensbron te verbieden. Alle afhankelijke recordsets nemen dit kenmerk over. De standaardwaarde is FALSE.

lpszConnect
Hiermee geeft u een verbindingsreeks. De verbindingsreeks voegt informatie samen, waaronder een naam van een gegevensbron, een gebruikers-id die geldig is voor de gegevensbron, een gebruikersverificatietekenreeks (wachtwoord, als de gegevensbron hiervoor een vereist is) en andere informatie. De hele verbindingsreeks moet worden voorafgegaan door de tekenreeks "ODBC;" (hoofdletters of kleine letters). De "ODBC;" tekenreeks wordt gebruikt om aan te geven dat de verbinding met een ODBC-gegevensbron is. Dit is voor opwaartse compatibiliteit wanneer toekomstige versies van de klassebibliotheek mogelijk niet-ODBC-gegevensbronnen ondersteunen.

bUseCursorLib
TRUE als u wilt dat het DLL-bestand van de ODBC Cursor Library wordt geladen. De cursorbibliotheek maskert bepaalde functionaliteit van het onderliggende ODBC-stuurprogramma, waardoor het gebruik van dynasets effectief wordt voorkomen (als het stuurprogramma deze ondersteunt). De enige cursors die worden ondersteund als de cursorbibliotheek wordt geladen, zijn statische momentopnamen en alleen-doorsturende cursors. De standaardwaarde is TRUE. Als u van plan bent een recordsetobject rechtstreeks te CRecordset maken zonder hiervan af te leiden, moet u de cursorbibliotheek niet laden.

Retourwaarde

Niet-nul als de verbinding tot stand is gebracht; anders 0 als de gebruiker Annuleren kiest bij het weergeven van een dialoogvenster waarin wordt gevraagd om meer verbindingsgegevens. In alle andere gevallen genereert het framework een uitzondering.

Opmerkingen

Het databaseobject moet worden geïnitialiseerd voordat u het kunt gebruiken om een recordsetobject te maken.

Opmerking

Het aanroepen van de OpenEx lidfunctie is de voorkeurswijze om verbinding te maken met een gegevensbron en uw databaseobject te initialiseren.

Als de parameters in uw Open aanroep onvoldoende informatie bevatten om de verbinding te maken, opent het ODBC-stuurprogramma een dialoogvenster om de benodigde informatie van de gebruiker te verkrijgen. Wanneer u aanroept Open, wordt uw verbindingsreeks lpszConnectprivé opgeslagen in het CDatabase object en is deze beschikbaar door de lidfunctie aan te GetConnect roepen.

Als u wilt, kunt u uw eigen dialoogvenster openen voordat u belt Open om informatie van de gebruiker op te halen, zoals een wachtwoord, en die informatie vervolgens toevoegen aan de verbindingsreeks die u doorgeeft.Open U kunt ook de verbindingsreeks opslaan die u doorgeeft, zodat u deze opnieuw kunt gebruiken wanneer uw toepassing de volgende keer een CDatabase object aanroeptOpen.

U kunt ook de verbindingsreeks gebruiken voor meerdere aanmeldingsniveaus (elk voor een ander CDatabase object) of om andere gegevensbronspecifieke informatie over te brengen. Zie hoofdstuk 5 in de Windows SDK voor meer informatie over verbindingsreeksen.

Het is mogelijk dat er een time-out optreedt voor een verbinding als de DBMS-host bijvoorbeeld niet beschikbaar is. Als de verbindingspoging mislukt, Open genereert u een CDBException.

Example

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

Roep deze lidfunctie aan om een nieuw samengesteld CDatabase object te initialiseren.

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

Parameterwaarden

lpszConnectString
Hiermee geeft u een ODBC-verbindingsreeks op. Dit omvat de naam van de gegevensbron en andere optionele informatie, zoals een gebruikers-id en wachtwoord. Is bijvoorbeeld "DSN=SQLServer_Source;UID=SA;PWD=abc123" een mogelijke verbindingsreeks. Als u doorgeeft NULLlpszConnectString, wordt de gebruiker gevraagd om een gegevensbron te selecteren.

dwOptions
Een bitmasker dat een combinatie van de volgende waarden aangeeft. De standaardwaarde is 0, wat betekent dat de database wordt geopend als gedeeld met schrijftoegang, het DLL-bestand van de ODBC-cursorbibliotheek wordt niet geladen en het dialoogvenster ODBC-verbinding wordt alleen weergegeven als er onvoldoende informatie is om de verbinding te maken.

  • CDatabase::openExclusive Niet ondersteund in deze versie van de klassebibliotheek. Een gegevensbron wordt altijd geopend als gedeeld (niet exclusief). Op dit moment mislukt een assertie als u deze optie opgeeft.

  • CDatabase::openReadOnly Open de gegevensbron als alleen-lezen.

  • CDatabase::useCursorLib Laad het DLL-bestand van de ODBC Cursor Library. De cursorbibliotheek maskert bepaalde functionaliteit van het onderliggende ODBC-stuurprogramma, waardoor het gebruik van dynasets effectief wordt voorkomen (als het stuurprogramma deze ondersteunt). De enige cursors die worden ondersteund als de cursorbibliotheek wordt geladen, zijn statische momentopnamen en alleen-doorsturende cursors. Als u van plan bent een recordsetobject rechtstreeks te CRecordset maken zonder hiervan af te leiden, moet u de cursorbibliotheek niet laden.

  • CDatabase::noOdbcDialog Het dialoogvenster ODBC-verbinding niet weergeven, ongeacht of er voldoende verbindingsgegevens zijn opgegeven.

  • CDatabase::forceOdbcDialog Het dialoogvenster ODBC-verbinding altijd weergeven.

Retourwaarde

Niet-nul als de verbinding tot stand is gebracht; anders 0 als de gebruiker Annuleren kiest bij het weergeven van een dialoogvenster waarin wordt gevraagd om meer verbindingsgegevens. In alle andere gevallen genereert het framework een uitzondering.

Opmerkingen

Het databaseobject moet worden geïnitialiseerd voordat u het kunt gebruiken om een recordsetobject te maken.

Als de parameter in uw OpenExlpszConnectString aanroep onvoldoende informatie bevat om de verbinding te maken, opent het ODBC-stuurprogramma een dialoogvenster om de benodigde informatie van de gebruiker te verkrijgen, mits u de parameter niet hebt ingesteld CDatabase::noOdbcDialog of CDatabase::forceOdbcDialog in de dwOptions parameter. Wanneer u aanroept OpenEx, wordt uw verbindingsreeks lpszConnectStringprivé opgeslagen in het CDatabase object en is deze beschikbaar door de lidfunctie aan te GetConnect roepen.

Als u wilt, kunt u uw eigen dialoogvenster openen voordat u belt OpenEx om informatie van de gebruiker op te halen, zoals een wachtwoord, en die informatie vervolgens toevoegen aan de verbindingsreeks die u doorgeeft.OpenEx U kunt ook de verbindingsreeks opslaan die u doorgeeft, zodat u deze opnieuw kunt gebruiken wanneer uw toepassing de volgende keer een CDatabase object aanroeptOpenEx.

U kunt ook de verbindingsreeks gebruiken voor meerdere aanmeldingsniveaus (elk voor een ander CDatabase object) of om andere gegevensbronspecifieke informatie over te brengen. Zie hoofdstuk 6 in de ODBC-referentie voor programmeurs voor meer informatie over verbindingsreeksen.

Het is mogelijk dat er een time-out optreedt voor een verbinding als de DBMS-host bijvoorbeeld niet beschikbaar is. Als de verbindingspoging mislukt, OpenEx genereert u een CDBException.

Example

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

Roep deze lidfunctie aan om de wijzigingen die zijn aangebracht tijdens een transactie om te keren.

BOOL Rollback();

Retourwaarde

Niet-nul als de transactie is omgekeerd; anders 0. Als een Rollback aanroep mislukt, zijn de gegevensbron- en transactiestatussen niet gedefinieerd. Als Rollback 0 wordt geretourneerd, moet u de gegevensbron controleren om de status ervan te bepalen.

Opmerkingen

Alle CRecordsetAddNew, Editen DeleteUpdate aanroepen die sinds de laatste BeginTrans keer worden uitgevoerd, worden teruggedraaid naar de status die bestond op het moment van die aanroep.

Na een aanroep naar Rollback, is de transactie voorbij en moet u opnieuw bellen BeginTrans voor een andere transactie. De record die actueel was voordat u aangeroepen BeginTrans werd, wordt opnieuw de huidige record na Rollback.

Na een terugdraaibewerking blijft de record die actueel was voordat het terugdraaien actueel blijft. Zie het artikel Transaction (ODBC) voor meer informatie over de status van de recordset en de gegevensbron na het terugdraaien.

Example

Zie het artikel Transaction: Performing a Transaction in a Recordset (ODBC).

CDatabase::SetLoginTimeout

Roep deze lidfunctie aan ( voordat u aanroept OpenEx of Open — om het standaardaantal seconden te overschrijven dat is toegestaan voordat er een time-out optreedt voor een poging tot een gegevensbronverbinding.

void SetLoginTimeout(DWORD dwSeconds);

Parameterwaarden

dwSeconds
Het aantal seconden dat moet worden toegestaan voordat er een time-out optreedt voor een verbindingspoging.

Opmerkingen

Er kan een time-out optreedt voor een verbindingspoging als de DBMS bijvoorbeeld niet beschikbaar is. Aanroepen SetLoginTimeout nadat u het niet-geïnitialiseerde object hebt gemaakt CDatabase , maar voordat u aanroept OpenEx of Open.

De standaardwaarde voor aanmeldingstime-outs is 15 seconden. Niet alle gegevensbronnen ondersteunen de mogelijkheid om een time-outwaarde voor aanmelding op te geven. Als de gegevensbron geen time-out ondersteunt, krijgt u traceringsuitvoer, maar geen uitzondering. Een waarde van 0 betekent 'oneindig'.

CDatabase::SetQueryTimeout

Roep deze lidfunctie aan om het standaardaantal seconden te overschrijven dat moet worden toegestaan voordat er een time-out optreedt voor de verbonden gegevensbron.

void SetQueryTimeout(DWORD dwSeconds);

Parameterwaarden

dwSeconds
Het aantal seconden dat moet worden toegestaan voordat er een time-out optreedt voor een querypoging.

Opmerkingen

Een bewerking kan een time-out veroorzaken vanwege problemen met netwerktoegang, overmatige verwerkingstijd voor query's, enzovoort. Roep SetQueryTimeout aan voordat u de recordset opent of voordat u de recordset-functies AddNewUpdate of Delete lidfuncties aanroept als u de time-outwaarde van de query wilt wijzigen. De instelling is van invloed op alle volgende Openrecordsets AddNewdie UpdateDelete aan dit CDatabase object zijn gekoppeld. Als u de time-outwaarde van de query voor een recordset wijzigt nadat deze is geopend, wordt de waarde voor de recordset niet gewijzigd. Bij volgende Move bewerkingen wordt de nieuwe waarde bijvoorbeeld niet gebruikt.

De standaardwaarde voor querytime-outs is 15 seconden. Niet alle gegevensbronnen ondersteunen de mogelijkheid om een time-outwaarde voor query's in te stellen. Als u een time-outwaarde voor query's van 0 instelt, treedt er geen time-out op; de communicatie met de gegevensbron kan stoppen met reageren. Dit gedrag kan nuttig zijn tijdens de ontwikkeling. Als de gegevensbron geen time-out ondersteunt, krijgt u traceringsuitvoer, maar geen uitzondering.

Zie ook

CObject klasse
Hiërarchiegrafiek
CRecordset klasse