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 AddNew Klassenfunktionen , Edit , Delete und 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 , , Edit und 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 CDatabase
ein 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 CDatabase
finden Sie in den Artikeln Data Source (ODBC) und Übersicht: Datenbankprogrammierung.
Vererbungshierarchie
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
, Delete
und 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
Rollback
fü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::ExecuteSQL
binden 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 SQLSetConnectOption
direkt 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 CDocument
abgeleiteten 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 const
CString
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 CString
Wert 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 CDatabase
aufrufen 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 SQLSetPos
ausfü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 SQLSetStmtOption
aufrufen. Folgen Sie der Methode, die in der Standardimplementierung OnSetOptions
des 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 lpszDSN
angegeben 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
, lpszConnect
wird 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 Open
die 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 direktCRecordset
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
, lpszConnectString
wird 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 OpenEx
die 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
, , Delete
und 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 Rollback
Transaktion 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.