Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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
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::openExclusiveNiet 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::openReadOnlyOpen de gegevensbron als alleen-lezen.CDatabase::useCursorLibLaad 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 teCRecordsetmaken zonder hiervan af te leiden, moet u de cursorbibliotheek niet laden.CDatabase::noOdbcDialogHet dialoogvenster ODBC-verbinding niet weergeven, ongeacht of er voldoende verbindingsgegevens zijn opgegeven.CDatabase::forceOdbcDialogHet 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.