Freigeben über


CDatabase-Klasse

Stellt eine Verbindung mit einer Datenquelle dar, über welche die Datenquelle bearbeitet werden kann.

Syntax

class CDatabase : public CObject

Member

Öffentliche Konstruktoren

Name Beschreibung
CDatabase::CDatabase Erstellt ein CDatabase-Objekt. Sie müssen das Objekt durch Aufrufen oder Open.OpenEx

Öffentliche Methoden

Name Beschreibung
CDatabase::BeginTrans Startet eine "Transaktion" – eine Reihe umkehrbarer Aufrufe an die AddNewKlassenfunktionen , Edit, Deleteund Update Memberfunktionen der Klasse CRecordset – in der verbundenen Datenquelle. Die Datenquelle muss Transaktionen unterstützen, damit BeginTrans sie wirksam werden können.
CDatabase::BindParameters Ermöglicht das Binden von Parametern vor dem Aufrufen CDatabase::ExecuteSQL.
CDatabase::Cancel Bricht einen asynchronen Vorgang oder einen Prozess aus einem zweiten Thread ab.
CDatabase::CanTransact Gibt "nonzero" zurück, wenn die Datenquelle Transaktionen unterstützt.
CDatabase::CanUpdate Gibt nonzero zurück, wenn das CDatabase Objekt aktualisierbar ist (nicht schreibgeschützt).
CDatabase::Close Schließt die Datenquellenverbindung.
CDatabase::CommitTrans Schließt eine Transaktion ab, die mit BeginTrans. Befehle in der Transaktion, die die Datenquelle ändern, werden ausgeführt.
CDatabase::ExecuteSQL Führt eine SQL-Anweisung aus. Es werden keine Datensätze zurückgegeben.
CDatabase::GetBookmarkPersistence Gibt die Vorgänge an, über die Lesezeichen für Recordsetobjekte beibehalten werden.
CDatabase::GetConnect Gibt die ODBC-Verbindungszeichenfolge zurück, die zum Verbinden des CDatabase Objekts mit einer Datenquelle verwendet wird.
CDatabase::GetCursorCommitBehavior Gibt die Auswirkung des Commits einer Transaktion auf ein geöffnetes Recordset-Objekt an.
CDatabase::GetCursorRollbackBehavior Gibt die Auswirkung des Rollbacks einer Transaktion auf ein geöffnetes Recordsetobjekt an.
CDatabase::GetDatabaseName Gibt den Namen der aktuell verwendeten Datenbank zurück.
CDatabase::IsOpen Gibt "nonzero" zurück, wenn das CDatabase Objekt zurzeit mit einer Datenquelle verbunden ist.
CDatabase::OnSetOptions Vom Framework aufgerufen, um Standardverbindungsoptionen festzulegen. Die Standardimplementierung legt den Abfragetimeoutwert fest. Sie können diese Optionen vorab einrichten, indem Sie aufrufen SetQueryTimeout.
CDatabase::Open Stellt eine Verbindung mit einer Datenquelle (über einen ODBC-Treiber) her.
CDatabase::OpenEx Stellt eine Verbindung mit einer Datenquelle (über einen ODBC-Treiber) her.
CDatabase::Rollback Kehrt Änderungen zurück, die während der aktuellen Transaktion vorgenommen wurden. Die Datenquelle wird in den vorherigen Zustand zurückgerückt, wie beim BeginTrans Aufruf definiert, unverändert.
CDatabase::SetLoginTimeout Legt die Anzahl der Sekunden fest, nach denen ein Datenquellenverbindungsversuch timeout wird.
CDatabase::SetQueryTimeout Legt die Anzahl der Sekunden fest, nach denen Datenbankabfragevorgänge timeout werden. Betrifft alle nachfolgenden Recordset Open-, AddNew, , Editund Delete Aufrufe.

Öffentliche Datenmember

Name Beschreibung
CDatabase::m_hdbc Open Database Connectivity (ODBC)-Verbindungshandle mit einer Datenquelle. Geben Sie HDBC ein.

Hinweise

Eine Datenquelle ist eine bestimmte Instanz von Daten, die von einem Datenbankverwaltungssystem (DBMS) gehostet werden. Beispiele sind Microsoft SQL Server, Microsoft Access, Borland dBASE und xBASE. Sie können jeweils ein oder CDatabase mehrere Objekte in Ihrer Anwendung aktiv haben.

Hinweis

Wenn Sie mit den DAO-Klassen (Data Access Objects) anstelle der ODBC-Klassen (Open Database Connectivity) arbeiten, verwenden Sie stattdessen die Klasse CDaoDatabase . Weitere Informationen finden Sie im Artikel Übersicht: Datenbankprogrammierung.

Erstellen Sie zum Verwenden CDatabaseein CDatabase Objekt, und rufen Sie dessen OpenEx Memberfunktion auf. Dadurch wird eine Verbindung geöffnet. Wenn Sie dann Objekte für die Verwendung in der verbundenen Datenquelle erstellen CRecordset , übergeben Sie den Recordset-Konstruktor einen Zeiger auf das CDatabase Objekt. Wenn Sie mit der Verwendung der Verbindung fertig sind, rufen Sie die Close Memberfunktion auf, und zerstören Sie das CDatabase Objekt. Close schließt alle Recordsets, die Sie zuvor nicht geschlossen haben.

Weitere Informationen CDatabasefinden Sie in den Artikeln Data Source (ODBC) und Übersicht: Datenbankprogrammierung.

Vererbungshierarchie

CObject

CDatabase

Anforderungen

Header: afxdb.h

CDatabase::BeginTrans

Rufen Sie diese Memberfunktion auf, um eine Transaktion mit der verbundenen Datenquelle zu beginnen.

BOOL BeginTrans();

Rückgabewert

Nonzero, wenn der Anruf erfolgreich war und Änderungen nur manuell ausgeführt werden; andernfalls 0.

Hinweise

Eine Transaktion besteht aus einem oder mehreren Aufrufen der AddNew, Edit, Deleteund Update Memberfunktionen eines CRecordset Objekts. Bevor sie eine Transaktion beginnen, muss das CDatabase Objekt bereits mit der Datenquelle verbunden sein, indem die OpenEx Zugehörige oder Open Memberfunktion aufgerufen wird. Rufen Sie CommitTrans zum Beenden der Transaktion auf, um alle Änderungen an der Datenquelle zu akzeptieren (und auszuführen), oder rufen Sie auf Rollback , um die gesamte Transaktion abzubrechen. Rufen Sie den Aufruf BeginTrans auf, nachdem Sie datensätze, die an der Transaktion beteiligt sind, und so nah wie möglich an den tatsächlichen Aktualisierungsvorgängen.

Achtung

Je nach ODBC-Treiber kann das Öffnen eines Recordsets vor dem Aufrufen zu Problemen beim Aufrufen BeginTrans Rollbackführen. Überprüfen Sie den jeweiligen Treiber, den Sie verwenden. Wenn Sie beispielsweise den microsoft Access-Treiber verwenden, der im Microsoft ODBC Desktop Driver Pack 3.0 enthalten ist, müssen Sie die Anforderung des Jet-Datenbankmoduls berücksichtigen, dass Sie keine Transaktion mit einer Datenbank beginnen sollten, die über einen geöffneten Cursor verfügt. In den MFC-Datenbankklassen bedeutet ein geöffneter Cursor ein geöffnetes CRecordset Objekt. Weitere Informationen finden Sie in technischem Hinweis 68.

BeginTrans kann auch Datensätze auf dem Server sperren, abhängig von der angeforderten Parallelität und den Funktionen der Datenquelle. Informationen zum Sperren von Daten finden Sie im Artikel "Recordset: Locking Records (ODBC)".

Benutzerdefinierte Transaktionen werden im Artikel Transaction (ODBC) erläutert.

BeginTrans legt den Zustand fest, auf den die Abfolge von Transaktionen zurückgesetzt werden kann (umgekehrt). Um einen neuen Status für Rollbacks einzurichten, übernehmen Sie eine beliebige aktuelle Transaktion, und rufen Sie dann erneut auf BeginTrans .

Achtung

Wird BeginTrans erneut ohne Aufruf aufgerufen CommitTrans oder Rollback ist ein Fehler aufgetreten.

Rufen Sie die CanTransact Memberfunktion auf, um festzustellen, ob Ihr Treiber Transaktionen für eine bestimmte Datenbank unterstützt. Sie sollten auch die Unterstützung für die Cursorerhaltung aufrufen GetCursorCommitBehavior und GetCursorRollbackBehavior ermitteln.

Weitere Informationen zu Transaktionen finden Sie im Artikel "Transaction (ODBC)".

Beispiel

Weitere Informationen finden Sie im Artikel "Transaction: Performing a Transaction in a Recordset (ODBC)".

CDatabase::BindParameters

Überschreiben BindParameters , wenn Sie Parameter vor dem Aufrufen CDatabase::ExecuteSQLbinden müssen.

virtual void BindParameters(HSTMT hstmt);

Parameter

hstmt
Das ODBC-Anweisungshandle, für das Sie Parameter binden möchten.

Hinweise

Dieser Ansatz ist nützlich, wenn Sie das Resultset aus einer gespeicherten Prozedur nicht benötigen.

Rufen Sie SQLBindParameters in Ihrer Außerkraftsetzung odbc-Funktionen auf, um die Parameter zu binden. MFC ruft Ihre Außerkraftsetzung vor dem Aufruf von ExecuteSQL. Sie müssen nicht anrufen SQLPrepare; ExecuteSQL ruft und SQLExecDirect zerstört die hstmt, die nur einmal verwendet wird.

CDatabase::Cancel

Rufen Sie diese Memberfunktion auf, um anzufordern, dass die Datenquelle entweder einen asynchronen Vorgang in Bearbeitung oder einen Prozess aus einem zweiten Thread abbricht.

void Cancel();

Hinweise

Beachten Sie, dass die MFC ODBC-Klassen keine asynchrone Verarbeitung mehr verwenden; um einen asynchronen Vorgang auszuführen, müssen Sie die ODBC-API-Funktion SQLSetConnectOptiondirekt aufrufen. Weitere Informationen finden Sie unter Asynchrone Ausführung.

CDatabase::CanTransact

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob die Datenbank Transaktionen zulässt.

BOOL CanTransact() const;

Rückgabewert

Nonzero, wenn Recordsets, die dieses CDatabase Objekt verwenden, Transaktionen zulassen; andernfalls 0.

Hinweise

Informationen zu Transaktionen finden Sie im Artikel Transaction (ODBC).

CDatabase::CanUpdate

Rufen Sie diese Memberfunktion auf, um zu bestimmen, ob das CDatabase Objekt Aktualisierungen zulässt.

BOOL CanUpdate() const;

Rückgabewert

Nonzero, wenn das CDatabase Objekt Aktualisierungen zulässt; andernfalls 0, der angibt, dass Sie beim Öffnen des CDatabase Objekts übergeben TRUE bReadOnly haben oder dass die Datenquelle selbst schreibgeschützt ist. Die Datenquelle ist schreibgeschützt, wenn ein Aufruf der ODBC-API-Funktion SQLGetInfo für SQL_DATASOURCE_READ_ONLY Rückgaben zurückgegeben wird y.

Hinweise

Nicht alle Treiber unterstützen Updates.

CDatabase::CDatabase

Erstellt ein CDatabase-Objekt.

CDatabase();

Hinweise

Nach dem Erstellen des Objekts müssen Sie die zugehörige OpenEx oder Open Memberfunktion aufrufen, um eine Verbindung mit einer angegebenen Datenquelle herzustellen.

Möglicherweise ist es praktisch, das CDatabase Objekt in Ihre Dokumentklasse einzubetten.

Beispiel

In diesem Beispiel wird die Verwendung CDatabase in einer CDocumentabgeleiteten Klasse veranschaulicht.

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

Rufen Sie diese Memberfunktion auf, wenn Sie die Verbindung mit einer Datenquelle trennen möchten.

virtual void Close();

Hinweise

Sie müssen alle dem Objekt zugeordneten CDatabase Recordsets schließen, bevor Sie diese Memberfunktion aufrufen. Da Close das CDatabase Objekt nicht zerstört wird, können Sie das Objekt wiederverwenden, indem Sie eine neue Verbindung mit derselben Datenquelle oder einer anderen Datenquelle öffnen.

Alle ausstehenden AddNew oder Edit Anweisungen von Recordsets, die die Datenbank verwenden, werden abgebrochen, und alle ausstehenden Transaktionen werden zurückgesetzt. Alle Recordsets, die CDatabase vom Objekt abhängig sind, verbleiben in einem nicht definierten Zustand.

Beispiel

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

Rufen Sie diese Memberfunktion nach Abschluss von Transaktionen auf.

BOOL CommitTrans();

Rückgabewert

Nonzero, wenn die Updates erfolgreich zugesichert wurden; andernfalls 0. Wenn CommitTrans ein Fehler auftritt, ist der Zustand der Datenquelle nicht definiert. Sie müssen die Daten überprüfen, um den Zustand zu ermitteln.

Hinweise

Eine Transaktion besteht aus einer Reihe von Aufrufen der AddNew, Edit, Delete, und Update Memberfunktionen eines CRecordset Objekts, das mit einem Aufruf der BeginTrans Memberfunktion begann. CommitTrans commits the transaction. Updates werden standardmäßig sofort zugesichert; Aufruf BeginTrans bewirkt, dass die Verpflichtung von Updates verzögert wird, bis CommitTrans sie aufgerufen wird.

Bis Sie CommitTrans eine Transaktion beenden, können Sie die Rollback Memberfunktion aufrufen, um die Transaktion abzubrechen und die Datenquelle im ursprünglichen Zustand zu belassen. Rufen Sie erneut auf, um eine neue Transaktion zu BeginTrans beginnen.

Weitere Informationen zu Transaktionen finden Sie im Artikel "Transaction (ODBC)".

Beispiel

Weitere Informationen finden Sie im Artikel "Transaction: Performing a Transaction in a Recordset (ODBC)".

CDatabase::ExecuteSQL

Rufen Sie diese Memberfunktion auf, wenn Sie einen SQL-Befehl direkt ausführen müssen.

void ExecuteSQL(LPCTSTR lpszSQL);

Parameter

lpszSQL
Zeigen Sie auf eine mit Null beendete Zeichenfolge, die einen gültigen SQL-Befehl enthält, der ausgeführt werden soll. Sie können ein CString.

Hinweise

Erstellen Sie den Befehl als null-beendete Zeichenfolge. ExecuteSQL gibt keine Datensätze zurück. Wenn Sie mit Datensätzen arbeiten möchten, verwenden Sie stattdessen ein Recordset-Objekt.

Die meisten Befehle für eine Datenquelle werden über Recordsetobjekte ausgegeben, die Befehle zum Auswählen von Daten, Einfügen neuer Datensätze, Löschen von Datensätzen und Bearbeiten von Datensätzen unterstützen. Allerdings werden nicht alle ODBC-Funktionen direkt von den Datenbankklassen unterstützt, daher müssen Sie manchmal einen direkten SQL-Aufruf ausführen.ExecuteSQL

Beispiel

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

Rufen Sie diese Member-Funktion auf, um die Beibehaltung von Lesezeichen auf einem recordset-Objekt nach bestimmten Vorgängen festzulegen.

DWORD GetBookmarkPersistence() const;

Rückgabewert

Eine Bitmaske, die die Vorgänge identifiziert, mit denen Lesezeichen auf einem recordset-Objekt beibehalten werden. Einzelheiten finden Sie unter "Hinweise".

Hinweise

Wenn Sie beispielsweise CRecordset::GetBookmark und dann CRecordset::Requery aufrufen, ist das Lesezeichen von GetBookmark womöglich nicht mehr gültig. Sie sollten GetBookmarkPersistence vor CRecordset::SetBookmark aufrufen.

Die folgende Tabelle enthält die Bitmaskenwerten, die für den Rückgabewert von GetBookmarkPersistence kombiniert werden können.

Bitmaskenwert Lesezeichenbeibehaltung
SQL_BP_CLOSE Textmarken sind nach einem Requery Vorgang gültig.
SQL_BP_DELETE Die Textmarke für eine Zeile ist nach einem Delete Vorgang in dieser Zeile gültig.
SQL_BP_DROP Textmarken sind nach einem Close Vorgang gültig.
SQL_BP_SCROLL Textmarken sind nach jedem Move Vorgang gültig. Damit wird mühelos identifiziert, ob Lesezeichen im Datensatz unterstützt werden, wie von CRecordset::CanBookmark zurückgegeben.
SQL_BP_TRANSACTION Lesezeichen sind gültig, nachdem eine Transaktion übernommen oder zurückgesetzt wurde.
SQL_BP_UPDATE Die Textmarke für eine Zeile ist nach einem Update Vorgang in dieser Zeile gültig.
SQL_BP_OTHER_HSTMT Lesezeichen, die mit einem recordset-Objekt verbunden sind, sind in einem zweiten Datensatz gültig.

Weitere Informationen zu diesem Rückgabewert finden Sie in der ODBC-API-Funktion SQLGetInfo im Windows SDK. Weitere Informationen zu Textmarken finden Sie im Artikel Recordset: Bookmarks and Absolute Positions (ODBC).For more information about bookmarks, see the article Recordset: Bookmarks and Absolute Positions (ODBC).For more information about bookmarks, see the article Recordset: Bookmarks and Absolute Positions (ODBC).

CDatabase::GetConnect

Rufen Sie diese Memberfunktion auf, um die während des Aufrufs von OpenEx oder Open verwendete Verbindungszeichenfolge abzurufen, die das CDatabase-Objekt mit einer Datenquelle verbunden hat.

const CString GetConnect() const;

Rückgabewert

A constCString containing the Verbindungszeichenfolge if OpenEx or Open has been called; otherwise, an empty string.

Hinweise

Eine Beschreibung der Erstellung des Verbindungszeichenfolge finden Sie unter.See CDatabase::Open for a description of how the Verbindungszeichenfolge is created.

CDatabase::GetCursorCommitBehavior

Rufen Sie diese Memberfunktion auf, um zu bestimmen, wie sich ein CommitTrans Vorgang auf Cursor für geöffnete Recordset-Objekte auswirkt.

int GetCursorCommitBehavior() const;

Rückgabewert

Ein Wert, der die Auswirkung von Transaktionen auf geöffnete Recordsetobjekte angibt. Einzelheiten finden Sie unter "Hinweise".

Hinweise

In der folgenden Tabelle sind die möglichen Rückgabewerte und GetCursorCommitBehavior die entsprechenden Auswirkungen auf das geöffnete Recordset aufgeführt.

Rückgabewert Auswirkung auf CRecordset Objekte
SQL_CB_CLOSE Rufen Sie CRecordset::Requery unmittelbar nach dem Transaktions-Commit auf.
SQL_CB_DELETE Rufen Sie CRecordset::Close unmittelbar nach dem Transaktions-Commit auf.
SQL_CB_PRESERVE Fahren Sie normal mit CRecordset Vorgängen fort.

Weitere Informationen zu diesem Rückgabewert finden Sie in der ODBC-API-Funktion SQLGetInfo im Windows SDK. Weitere Informationen zu Transaktionen finden Sie im Artikel "Transaction (ODBC)".

CDatabase::GetCursorRollbackBehavior

Rufen Sie diese Memberfunktion auf, um zu bestimmen, wie sich ein Rollback Vorgang auf Cursor für geöffnete Recordset-Objekte auswirkt.

int GetCursorRollbackBehavior() const;

Rückgabewert

Ein Wert, der die Auswirkung von Transaktionen auf geöffnete Recordsetobjekte angibt. Einzelheiten finden Sie unter "Hinweise".

Hinweise

In der folgenden Tabelle sind die möglichen Rückgabewerte und GetCursorRollbackBehavior die entsprechenden Auswirkungen auf das geöffnete Recordset aufgeführt.

Rückgabewert Auswirkung auf CRecordset Objekte
SQL_CB_CLOSE Rufen Sie CRecordset::Requery unmittelbar nach dem Transaktionsrollback auf.
SQL_CB_DELETE Rufen Sie CRecordset::Close unmittelbar nach dem Transaktionsrollback auf.
SQL_CB_PRESERVE Fahren Sie normal mit CRecordset Vorgängen fort.

Weitere Informationen zu diesem Rückgabewert finden Sie in der ODBC-API-Funktion SQLGetInfo im Windows SDK. Weitere Informationen zu Transaktionen finden Sie im Artikel "Transaction (ODBC)".

CDatabase::GetDatabaseName

Rufen Sie diese Memberfunktion auf, um den Namen der aktuell verbundenen Datenbank abzurufen (vorausgesetzt, die Datenquelle definiert ein benanntes Objekt namens "Database").

CString GetDatabaseName() const;

Rückgabewert

A CString containing the database name if successful; otherwise, an empty CString.

Hinweise

Dies ist nicht mit dem im Oder OpenEx Open Aufruf angegebenen Datenquellennamen (Data Source Name, DSN) identisch. Was GetDatabaseName zurückgegeben wird, hängt von ODBC ab. Im Allgemeinen ist eine Datenbank eine Sammlung von Tabellen. Wenn diese Entität einen Namen hat, GetDatabaseName wird sie zurückgegeben.

Sie können z. B. diesen Namen in einer Überschrift anzeigen. Wenn beim Abrufen des Namens aus ODBC ein Fehler auftritt, GetDatabaseName wird ein leerer CStringWert zurückgegeben.

CDatabase::IsOpen

Rufen Sie diese Memberfunktion auf, um festzustellen, ob das CDatabase Objekt derzeit mit einer Datenquelle verbunden ist.

BOOL IsOpen() const;

Rückgabewert

Nonzero, wenn das CDatabase Objekt derzeit verbunden ist; andernfalls 0.

CDatabase::m_hdbc

Enthält ein öffentliches Handle für eine ODBC-Datenquellenverbindung – ein "Verbindungshandle".

Hinweise

Normalerweise müssen Sie nicht direkt auf diese Membervariable zugreifen. Stattdessen weist das Framework das Handle zu, wenn Sie aufrufen OpenEx oder Open. Das Framework wickelt das Handle ab, wenn Sie den delete Operator für das CDatabase Objekt aufrufen. Beachten Sie, dass die Close Memberfunktion das Handle nicht umgibt.

Unter bestimmten Umständen müssen Sie das Handle jedoch möglicherweise direkt verwenden. Wenn Sie beispielsweise ODBC-API-Funktionen direkt und nicht über die Klasse CDatabaseaufrufen müssen, benötigen Sie möglicherweise ein Verbindungshandle, um als Parameter übergeben zu werden. Sehen Sie sich das folgende Codebeispiel an.

Beispiel

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

Das Framework ruft diese Memberfunktion auf, wenn eine SQL-Anweisung mit der ExecuteSQL Memberfunktion direkt ausgeführt wird.

virtual void OnSetOptions(HSTMT hstmt);

Parameter

hstmt
Das ODBC-Anweisungshandle, für das Optionen festgelegt werden.

Hinweise

CRecordset::OnSetOptions ruft diese Memberfunktion auch auf.

OnSetOptions legt den Anmeldetimeoutwert fest. Wenn zuvor Aufrufe der Funktion und Memberfunktion SetQueryTimeout stattgefunden haben, OnSetOptions werden die aktuellen Werte angezeigt. Andernfalls werden Standardwerte festgelegt.

Hinweis

Legen Sie vor MFC 4.2 OnSetOptions auch den Verarbeitungsmodus auf snychron oder asynchron fest. Ab MFC 4.2 sind alle Vorgänge synchron. Zum Ausführen eines asynchronen Vorgangs müssen Sie einen direkten Aufruf der ODBC-API-Funktion SQLSetPosausführen.

Sie müssen den Timeoutwert nicht überschreiben OnSetOptions , um den Timeoutwert zu ändern. Wenn Sie stattdessen den Abfragetimeoutwert anpassen möchten, rufen Sie den Aufruf SetQueryTimeout vor dem Erstellen eines Recordsets auf; OnSetOptions verwendet den neuen Wert. Die festgelegten Werte gelten für nachfolgende Vorgänge für alle Recordsets oder direkten SQL-Aufrufe.

Überschreiben OnSetOptions , wenn Sie zusätzliche Optionen festlegen möchten. Ihre Außerkraftsetzung sollte die Basisklasse OnSetOptions entweder vor oder nach dem Aufrufen der ODBC-API-Funktion SQLSetStmtOptionaufrufen. Folgen Sie der Methode, die in der Standardimplementierung OnSetOptionsdes Frameworks veranschaulicht wird.

CDatabase::Open

Rufen Sie diese Memberfunktion auf, um ein neu erstelltes CDatabase Objekt zu initialisieren.

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

Parameter

lpszDSN
Gibt einen Datenquellennamen an – einen Namen, der mit ODBC über das ODBC-Administratorprogramm registriert ist. Wenn ein DSN-Wert in lpszConnect (in Der Form "DSN=<Datenquelle>") angegeben wird, darf er nicht erneut in lpszDSNangegeben werden. In diesem Fall lpszDSN sollte .NULL Andernfalls können Sie übergeben NULL , wenn Sie den Benutzer mit einem Dialogfeld "Datenquelle" präsentieren möchten, in dem der Benutzer eine Datenquelle auswählen kann. Weitere Informationen finden Sie in den Anmerkungen.

bExclusive
In dieser Version der Klassenbibliothek nicht unterstützt. Derzeit schlägt eine Assertion fehl, wenn dieser Parameter lautet TRUE. Die Datenquelle wird immer als freigegeben (nicht exklusiv) geöffnet.

bReadOnly
TRUE wenn Die Verbindung schreibgeschützt sein soll und Aktualisierungen an der Datenquelle untersagt werden sollen. Alle abhängigen Recordsets erben dieses Attribut. Der Standardwert ist FALSE.

lpszConnect
Gibt einen Verbindungszeichenfolge an. Die Verbindungszeichenfolge verkettet Informationen, z. B. einen Datenquellennamen, eine für die Datenquelle gültige Benutzer-ID, eine Benutzerauthentifizierungszeichenfolge (Kennwort, falls die Datenquelle eine benötigt) und andere Informationen. Der gesamte Verbindungszeichenfolge muss der Zeichenfolge "ODBC;" (Groß- oder Kleinbuchstaben) vorangestellt werden. Die "ODBC;" Zeichenfolge wird verwendet, um anzugeben, dass die Verbindung mit einer ODBC-Datenquelle besteht. Dies ist aus Gründen der Abwärtskompatibilität, wenn zukünftige Versionen der Klassenbibliothek möglicherweise Nicht-ODBC-Datenquellen unterstützen.

bUseCursorLib
TRUE wenn die ODBC-Cursorbibliothek-DLL geladen werden soll. Die Cursorbibliothek maskiert einige Funktionen des zugrunde liegenden ODBC-Treibers und verhindert effektiv die Verwendung von Dynasets (wenn der Treiber sie unterstützt). Die einzigen Cursor, die unterstützt werden, wenn die Cursorbibliothek geladen wird, sind statische Momentaufnahmen und Vorwärtscursor. Der Standardwert ist TRUE. Wenn Sie beabsichtigen, ein Recordset-Objekt direkt CRecordset daraus zu erstellen, ohne daraus abzuleiten, sollten Sie die Cursorbibliothek nicht laden.

Rückgabewert

Nonzero, wenn die Verbindung erfolgreich hergestellt wird; andernfalls 0, wenn der Benutzer "Abbrechen" auswäht, wenn ein Dialogfeld angezeigt wird, in dem weitere Verbindungsinformationen angezeigt werden. In allen anderen Fällen löst das Framework eine Ausnahme aus.

Hinweise

Ihr Datenbankobjekt muss initialisiert werden, bevor Sie es verwenden können, um ein Recordset-Objekt zu erstellen.

Hinweis

Das Aufrufen der OpenEx Memberfunktion ist die bevorzugte Methode zum Herstellen einer Verbindung mit einer Datenquelle und zum Initialisieren des Datenbankobjekts.

Wenn die Parameter in Ihrem Open Aufruf nicht genügend Informationen enthalten, um die Verbindung herzustellen, öffnet der ODBC-Treiber ein Dialogfeld, um die erforderlichen Informationen vom Benutzer abzurufen. Wenn Sie die Verbindungszeichenfolge aufrufenOpen, lpszConnectwird ihr Verbindungszeichenfolge privat im CDatabase Objekt gespeichert und steht durch Aufrufen der GetConnect Memberfunktion zur Verfügung.

Wenn Sie möchten, können Sie Ihr eigenes Dialogfeld öffnen, bevor Sie aufrufenOpen, um Informationen vom Benutzer zu erhalten, z. B. ein Kennwort, und fügen Sie diese Informationen zu den Verbindungszeichenfolge, an Opendie Sie übergeben. Oder Sie möchten das übergebene Verbindungszeichenfolge speichern, damit Sie es beim nächsten Aufrufen Open der Anwendung für ein CDatabase Objekt wiederverwenden können.

Sie können auch die Verbindungszeichenfolge für mehrere Ebenen der Anmeldeautorisierung (jeweils für ein anderes CDatabase Objekt) verwenden oder um andere datenquellenspezifische Informationen zu übermitteln. Weitere Informationen zu Verbindungszeichenfolge finden Sie in Kapitel 5 im Windows SDK.

Es ist möglich, dass bei einem Verbindungsversuch ein Timeout ausgeführt wird, wenn beispielsweise der DBMS-Host nicht verfügbar ist. Wenn der Verbindungsversuch fehlschlägt, Open wird ein CDBException.

Beispiel

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

Rufen Sie diese Memberfunktion auf, um ein neu erstelltes CDatabase Objekt zu initialisieren.

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

Parameter

lpszConnectString
Gibt eine ODBC-Verbindungszeichenfolge an. Dazu gehören der Datenquellenname sowie weitere optionale Informationen, z. B. eine Benutzer-ID und ein Kennwort. Beispielsweise "DSN=SQLServer_Source;UID=SA;PWD=abc123" ist eine mögliche Verbindungszeichenfolge. Beachten Sie, dass ein Dialogfeld "Datenquelle" den Benutzer auffordert NULL lpszConnectString, eine Datenquelle auszuwählen.

dwOptions
Eine Bitmaske, die eine Kombination der folgenden Werte angibt. Der Standardwert ist 0, d. h., die Datenbank wird mit Schreibzugriff geöffnet, die ODBC-Cursorbibliothek-DLL wird nicht geladen, und das Dialogfeld "ODBC-Verbindung" wird nur angezeigt, wenn nicht genügend Informationen vorhanden sind, um die Verbindung herzustellen.

  • CDatabase::openExclusive In dieser Version der Klassenbibliothek nicht unterstützt. Eine Datenquelle wird immer als freigegeben (nicht exklusiv) geöffnet. Derzeit schlägt eine Assertion fehl, wenn Sie diese Option angeben.

  • CDatabase::openReadOnly Öffnen Sie die Datenquelle schreibgeschützt.

  • CDatabase::useCursorLib Laden Sie die DLL der ODBC-Cursorbibliothek. Die Cursorbibliothek maskiert einige Funktionen des zugrunde liegenden ODBC-Treibers und verhindert effektiv die Verwendung von Dynasets (wenn der Treiber sie unterstützt). Die einzigen Cursor, die unterstützt werden, wenn die Cursorbibliothek geladen wird, sind statische Momentaufnahmen und Vorwärtscursor. Wenn Sie beabsichtigen, ein Recordset-Objekt direkt CRecordset daraus zu erstellen, ohne daraus abzuleiten, sollten Sie die Cursorbibliothek nicht laden.

  • CDatabase::noOdbcDialog Zeigt das Dialogfeld "ODBC-Verbindung" nicht an, unabhängig davon, ob genügend Verbindungsinformationen angegeben werden.

  • CDatabase::forceOdbcDialog Zeigt immer das Dialogfeld "ODBC-Verbindung" an.

Rückgabewert

Nonzero, wenn die Verbindung erfolgreich hergestellt wird; andernfalls 0, wenn der Benutzer "Abbrechen" auswäht, wenn ein Dialogfeld angezeigt wird, in dem weitere Verbindungsinformationen angezeigt werden. In allen anderen Fällen löst das Framework eine Ausnahme aus.

Hinweise

Ihr Datenbankobjekt muss initialisiert werden, bevor Sie es verwenden können, um ein Recordset-Objekt zu erstellen.

Wenn der lpszConnectString Parameter in Ihrem OpenEx Aufruf nicht genügend Informationen enthält, um die Verbindung herzustellen, öffnet der ODBC-Treiber ein Dialogfeld, um die erforderlichen Informationen vom Benutzer abzurufen, vorausgesetzt, Sie haben den Parameter nicht festgelegt CDatabase::noOdbcDialog oder CDatabase::forceOdbcDialog im dwOptions Parameter. Wenn Sie die Verbindungszeichenfolge aufrufenOpenEx, lpszConnectStringwird ihr Verbindungszeichenfolge privat im CDatabase Objekt gespeichert und steht durch Aufrufen der GetConnect Memberfunktion zur Verfügung.

Wenn Sie möchten, können Sie Ihr eigenes Dialogfeld öffnen, bevor Sie aufrufenOpenEx, um Informationen vom Benutzer abzurufen, z. B. ein Kennwort, und dann diese Informationen zu den Verbindungszeichenfolge, an OpenExdie Sie übergeben. Oder Sie möchten das übergebene Verbindungszeichenfolge speichern, damit Sie es beim nächsten Aufrufen OpenEx der Anwendung für ein CDatabase Objekt wiederverwenden können.

Sie können auch die Verbindungszeichenfolge für mehrere Ebenen der Anmeldeautorisierung (jeweils für ein anderes CDatabase Objekt) verwenden oder um andere datenquellenspezifische Informationen zu übermitteln. Weitere Informationen zu Verbindungszeichenfolge finden Sie in Kapitel 6 in der ODBC-Programmierreferenz.

Es ist möglich, dass bei einem Verbindungsversuch ein Timeout ausgeführt wird, wenn beispielsweise der DBMS-Host nicht verfügbar ist. Wenn der Verbindungsversuch fehlschlägt, OpenEx wird ein CDBException.

Beispiel

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

Rufen Sie diese Memberfunktion auf, um die während einer Transaktion vorgenommenen Änderungen rückgängig zu machen.

BOOL Rollback();

Rückgabewert

Nonzero, wenn die Transaktion erfolgreich rückgängig gemacht wurde; andernfalls 0. Wenn ein Rollback Aufruf fehlschlägt, sind die Datenquellen- und Transaktionszustände nicht definiert. Wenn Rollback 0 zurückgegeben wird, müssen Sie die Datenquelle überprüfen, um den Zustand zu ermitteln.

Hinweise

Alle CRecordset AddNew, Edit, , Deleteund Update Aufrufe, die seit dem letzten BeginTrans ausgeführt werden, werden auf den Zustand zurückgesetzt, der zum Zeitpunkt dieses Aufrufs vorhanden ist.

Nach einem Aufruf der RollbackTransaktion wird die Transaktion beendet, und Sie müssen erneut für eine andere Transaktion aufrufen BeginTrans . Der Datensatz, der aktuell war, bevor Sie aufgerufen BeginTrans wurden, wird wieder zum aktuellen Datensatz nach Rollback.

Nach einem Rollback bleibt der Datensatz, der vor dem Rollback aktuell war, aktuell. Ausführliche Informationen zum Status des Recordsets und der Datenquelle nach einem Rollback finden Sie im Artikel "Transaction (ODBC)".

Beispiel

Weitere Informationen finden Sie im Artikel "Transaction: Performing a Transaction in a Recordset (ODBC)".

CDatabase::SetLoginTimeout

Rufen Sie diese Memberfunktion – bevor Sie sie aufrufen oder Open – auf, um die standardanzahl der zulässigen Sekunden außer Kraft OpenEx zu setzen, bevor eine versuchte Datenquellenverbindung zu einem Zeitüberschreitung auftritt.

void SetLoginTimeout(DWORD dwSeconds);

Parameter

dwSeconds
Die Anzahl der Sekunden, die zugelassen werden sollen, bevor ein Verbindungsversuch zu einem Zeitüberschreitungsversuch erfolgt.

Hinweise

Ein Verbindungsversuch kann ein Timeout sein, wenn z. B. der DBMS nicht verfügbar ist. Rufen Sie nach SetLoginTimeout dem Konstruieren des nicht initialisierten CDatabase Objekts auf, aber bevor Sie das Objekt aufrufen OpenEx oder Open.

Der Standardwert für Anmeldetimeouts beträgt 15 Sekunden. Nicht alle Datenquellen unterstützen die Möglichkeit, einen Anmeldetimeoutwert anzugeben. Wenn die Datenquelle kein Timeout unterstützt, erhalten Sie die Ablaufverfolgungsausgabe, aber keine Ausnahme. Ein Wert von 0 bedeutet "unendlich".

CDatabase::SetQueryTimeout

Rufen Sie diese Memberfunktion auf, um die Standardanzahl von Sekunden außer Kraft zu setzen, die vor nachfolgenden Vorgängen für das Timeout der verbundenen Datenquelle zulässig sind.

void SetQueryTimeout(DWORD dwSeconds);

Parameter

dwSeconds
Die Anzahl der Sekunden, die zugelassen werden sollen, bevor ein Abfrageversuch zu einem Zeitüberschreitungsversuch führen kann.

Hinweise

Ein Vorgang kann aufgrund von Netzwerkzugriffsproblemen, übermäßiger Abfrageverarbeitungszeit usw. zu einem Timeout führen. Rufen Sie SetQueryTimeout vor dem Öffnen des Recordsets oder vor dem Aufrufen der RecordsetAddNew- oder Delete Memberfunktionen auf, Update wenn Sie den Abfragetimeoutwert ändern möchten. Die Einstellung wirkt sich auf alle nachfolgenden Open, AddNew, Update, und Delete Aufrufe aller Recordsets aus, die diesem CDatabase Objekt zugeordnet sind. Das Ändern des Abfragetimeoutwerts für ein Recordset-Objekt nach dem Öffnen ändert den Wert für das Recordset nicht. Nachfolgende Move Vorgänge verwenden z. B. nicht den neuen Wert.

Der Standardwert für Abfragetimeouts beträgt 15 Sekunden. Nicht alle Datenquellen unterstützen die Möglichkeit, einen Abfragetimeoutwert festzulegen. Wenn Sie einen Abfragetimeoutwert von 0 festlegen, tritt kein Timeout auf; Die Kommunikation mit der Datenquelle reagiert möglicherweise nicht mehr. Dieses Verhalten kann während der Entwicklung hilfreich sein. Wenn die Datenquelle kein Timeout unterstützt, erhalten Sie die Ablaufverfolgungsausgabe, aber keine Ausnahme.

Siehe auch

CObject-Klasse
Hierarchiediagramm
CRecordset Klasse