Classe CDatabase
Rappresenta una connessione a un'origine dati attraverso la quale è possibile utilizzare l'origine dati.
Sintassi
class CDatabase : public CObject
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CDatabase::CDatabase |
Costruisce un oggetto CDatabase . È necessario inizializzare l'oggetto chiamando OpenEx o Open . |
Metodi pubblici
Nome | Descrizione |
---|---|
CDatabase::BeginTrans |
Avvia una "transazione", una serie di chiamate reversibili alle AddNew funzioni membro , Delete , e Update della classe CRecordset , Edit nell'origine dati connessa. L'origine dati deve supportare le transazioni per BeginTrans avere alcun effetto. |
CDatabase::BindParameters |
Consente di associare i parametri prima di chiamare CDatabase::ExecuteSQL . |
CDatabase::Cancel |
Annulla un'operazione asincrona o un processo da un secondo thread. |
CDatabase::CanTransact |
Restituisce un valore diverso da zero se l'origine dati supporta le transazioni. |
CDatabase::CanUpdate |
Restituisce un valore diverso da zero se l'oggetto CDatabase è aggiornabile (non di sola lettura). |
CDatabase::Close |
Chiude la connessione all'origine dati. |
CDatabase::CommitTrans |
Completa una transazione avviata da BeginTrans . Vengono eseguiti comandi nella transazione che modificano l'origine dati. |
CDatabase::ExecuteSQL |
Esegue un'istruzione SQL. Non vengono restituiti record di dati. |
CDatabase::GetBookmarkPersistence |
Identifica le operazioni tramite cui i segnalibri vengono mantenuti negli oggetti recordset. |
CDatabase::GetConnect |
Restituisce il stringa di connessione ODBC utilizzato per connettere l'oggetto a un'origine CDatabase dati. |
CDatabase::GetCursorCommitBehavior |
Identifica l'effetto del commit di una transazione in un oggetto recordset aperto. |
CDatabase::GetCursorRollbackBehavior |
Identifica l'effetto del rollback di una transazione in un oggetto recordset aperto. |
CDatabase::GetDatabaseName |
Restituisce il nome del database attualmente in uso. |
CDatabase::IsOpen |
Restituisce un valore diverso da zero se l'oggetto è attualmente connesso a un'origine CDatabase dati. |
CDatabase::OnSetOptions |
Chiamato dal framework per impostare le opzioni di connessione standard. L'implementazione predefinita imposta il valore di timeout della query. È possibile stabilire queste opzioni in anticipo chiamando SetQueryTimeout . |
CDatabase::Open |
Stabilisce una connessione a un'origine dati (tramite un driver ODBC). |
CDatabase::OpenEx |
Stabilisce una connessione a un'origine dati (tramite un driver ODBC). |
CDatabase::Rollback |
Inverte le modifiche apportate durante la transazione corrente. L'origine dati torna allo stato precedente, come definito nella BeginTrans chiamata, non modificata. |
CDatabase::SetLoginTimeout |
Imposta il numero di secondi dopo il quale si verifica il timeout di un tentativo di connessione all'origine dati. |
CDatabase::SetQueryTimeout |
Imposta il numero di secondi dopo il quale si verifica il timeout delle operazioni di query del database. Influisce su tutti i recordset Open successivi, AddNew , Edit , e Delete chiamate. |
Membri dati pubblici
Nome | Descrizione |
---|---|
CDatabase::m_hdbc |
Handle di connessione ODBC (Database Connectivity) aperto a un'origine dati. Digitare HDBC. |
Osservazioni:
Un'origine dati è un'istanza specifica dei dati ospitati da un sistema di gestione di database (DBMS). Alcuni esempi includono Microsoft SQL Server, Microsoft Access, Borland dBASE e xBASE. È possibile avere uno o più CDatabase
oggetti attivi alla volta nell'applicazione.
Nota
Se si usano le classi DAO (Data Access Objects) anziché le classi ODBC (Open Database Connectivity), usare invece la classe CDaoDatabase
. Per altre informazioni, vedere l'articolo Panoramica: Programmazione del database.
Per usare CDatabase
, costruire un CDatabase
oggetto e chiamare la relativa OpenEx
funzione membro. Verrà aperta una connessione. Quando si costruiscono CRecordset
quindi oggetti per operare sull'origine dati connessa, passare il costruttore del recordset a un puntatore all'oggetto CDatabase
. Al termine dell'utilizzo della connessione, chiamare la Close
funzione membro ed eliminare definitivamente l'oggetto CDatabase
. Close
chiude tutti i recordset non chiusi in precedenza.
Per altre informazioni su CDatabase
, vedere gli articoli Origine dati (ODBC) e Panoramica: Programmazione di database.
Gerarchia di ereditarietà
CDatabase
Requisiti
Intestazione: afxdb.h
CDatabase::BeginTrans
Chiamare questa funzione membro per avviare una transazione con l'origine dati connessa.
BOOL BeginTrans();
Valore restituito
Diverso da zero se la chiamata ha avuto esito positivo e le modifiche vengono eseguite solo manualmente; in caso contrario, 0.
Osservazioni:
Una transazione è costituita da una o più chiamate alle AddNew
funzioni membro , Edit
Delete
, e Update
di un CRecordset
oggetto . Prima di iniziare una transazione, l'oggetto CDatabase
deve essere già stato connesso all'origine dati chiamando la relativa OpenEx
funzione membro o Open
. Per terminare la transazione, chiamare CommitTrans
per accettare tutte le modifiche all'origine dati (ed eseguirle) o chiamare Rollback
per interrompere l'intera transazione. Chiamare BeginTrans
dopo aver aperto tutti i recordset coinvolti nella transazione e il più vicino possibile alle operazioni di aggiornamento effettive.
Attenzione
A seconda del driver ODBC, aprire un recordset prima di chiamare BeginTrans
può causare problemi durante la chiamata a Rollback
. È consigliabile controllare il driver specifico in uso. Ad esempio, quando si usa il driver di Microsoft Access incluso in Microsoft ODBC Desktop Driver Pack 3.0, è necessario tenere conto del requisito del motore di database Jet che non deve iniziare una transazione in qualsiasi database con un cursore aperto. Nelle classi di database MFC un cursore aperto indica un oggetto aperto CRecordset
. Per altre informazioni, vedere La nota tecnica 68.
BeginTrans
può anche bloccare i record di dati nel server, a seconda della concorrenza richiesta e delle funzionalità dell'origine dati. Per informazioni sul blocco dei dati, vedere l'articolo Recordset: Locking Records (ODBC).
Le transazioni definite dall'utente sono illustrate nell'articolo Transazione (ODBC).
BeginTrans
stabilisce lo stato in cui è possibile eseguire il rollback della sequenza di transazioni (invertito). Per stabilire un nuovo stato per i rollback, eseguire il commit di qualsiasi transazione corrente, quindi chiamare BeginTrans
di nuovo.
Attenzione
Chiamare BeginTrans
di nuovo senza chiamare CommitTrans
o Rollback
è un errore.
Chiamare la CanTransact
funzione membro per determinare se il driver supporta le transazioni per un determinato database. È anche necessario chiamare GetCursorCommitBehavior
e GetCursorRollbackBehavior
per determinare il supporto per la conservazione del cursore.
Per altre informazioni sulle transazioni, vedere l'articolo Transazione (ODBC).For more information about transactions, see the article Transaction (ODBC).
Esempio
Vedere l'articolo Transazione: Esecuzione di una transazione in un oggetto Recordset (ODBC).
CDatabase::BindParameters
Eseguire l'override BindParameters
quando è necessario associare i parametri prima di chiamare CDatabase::ExecuteSQL
.
virtual void BindParameters(HSTMT hstmt);
Parametri
hstmt
Handle di istruzione ODBC per il quale si desidera associare i parametri.
Osservazioni:
Questo approccio è utile quando non è necessario il set di risultati da una stored procedure.
Nell'override chiamare SQLBindParameters
e le funzioni ODBC correlate per associare i parametri. MFC chiama l'override prima della chiamata a ExecuteSQL
. Non è necessario chiamare SQLPrepare
; ExecuteSQL
chiama SQLExecDirect
ed elimina definitivamente l'oggetto hstmt
, che viene usato una sola volta.
CDatabase::Cancel
Chiamare questa funzione membro per richiedere che l'origine dati annulla un'operazione asincrona in corso o un processo da un secondo thread.
void Cancel();
Osservazioni:
Si noti che le classi ODBC MFC non usano più l'elaborazione asincrona; per eseguire un'operazione asincrona, è necessario chiamare direttamente la funzione SQLSetConnectOption
API ODBC . Per altre informazioni, vedere Esecuzione asincrona.
CDatabase::CanTransact
Chiamare questa funzione membro per determinare se il database consente transazioni.
BOOL CanTransact() const;
Valore restituito
Diverso da zero se i recordset che usano questo CDatabase
oggetto consentono transazioni; in caso contrario, 0.
Osservazioni:
Per informazioni sulle transazioni, vedere l'articolo Transazione (ODBC).For information about transactions, see the article Transaction (ODBC).
CDatabase::CanUpdate
Chiamare questa funzione membro per determinare se l'oggetto CDatabase
consente gli aggiornamenti.
BOOL CanUpdate() const;
Valore restituito
Diverso da zero se l'oggetto CDatabase
consente aggiornamenti; in caso contrario, 0, che indica che è stato passato TRUE
bReadOnly
quando è stato aperto l'oggetto o che l'origine CDatabase
dati stessa è di sola lettura. L'origine dati è di sola lettura se una chiamata alla funzione SQLGetInfo
API ODBC per SQL_DATASOURCE_READ_ONLY
restituisce y
.
Osservazioni:
Non tutti i driver supportano gli aggiornamenti.
CDatabase::CDatabase
Costruisce un oggetto CDatabase
.
CDatabase();
Osservazioni:
Dopo aver costruito l'oggetto, è necessario chiamare la relativa OpenEx
funzione membro o Open
per stabilire una connessione a un'origine dati specificata.
È possibile che sia utile incorporare l'oggetto CDatabase
nella classe del documento.
Esempio
Questo esempio illustra l'uso CDatabase
di in una CDocument
classe derivata da .
// 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
Chiamare questa funzione membro se si vuole disconnettersi da un'origine dati.
virtual void Close();
Osservazioni:
È necessario chiudere tutti i recordset associati all'oggetto CDatabase
prima di chiamare questa funzione membro. Poiché Close
non elimina definitivamente l'oggetto CDatabase
, è possibile riutilizzare l'oggetto aprendo una nuova connessione alla stessa origine dati o a un'origine dati diversa.
Tutte le istruzioni o Edit
in sospeso AddNew
dei recordset che usano il database vengono annullate e viene eseguito il rollback di tutte le transazioni in sospeso. Tutti i recordset dipendenti dall'oggetto CDatabase
vengono lasciati in uno stato non definito.
Esempio
// 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
Chiamare questa funzione membro al completamento delle transazioni.
BOOL CommitTrans();
Valore restituito
Diverso da zero se è stato eseguito correttamente il commit degli aggiornamenti; in caso contrario, 0. Se CommitTrans
ha esito negativo, lo stato dell'origine dati non è definito. È necessario controllare i dati per determinarne lo stato.
Osservazioni:
Una transazione è costituita da una serie di chiamate alle AddNew
funzioni membro , Edit
Delete
, e Update
di un CRecordset
oggetto che ha iniziato con una chiamata alla BeginTrans
funzione membro. CommitTrans
esegue il commit della transazione. Per impostazione predefinita, gli aggiornamenti vengono sottoposti immediatamente a commit; la chiamata BeginTrans
fa sì che l'impegno degli aggiornamenti venga ritardato fino a quando CommitTrans
non viene chiamato.
Fino a quando non si chiama CommitTrans
per terminare una transazione, è possibile chiamare la Rollback
funzione membro per interrompere la transazione e lasciare l'origine dati nello stato originale. Per avviare una nuova transazione, chiamare BeginTrans
di nuovo.
Per altre informazioni sulle transazioni, vedere l'articolo Transazione (ODBC).For more information about transactions, see the article Transaction (ODBC).
Esempio
Vedere l'articolo Transazione: Esecuzione di una transazione in un oggetto Recordset (ODBC).
CDatabase::ExecuteSQL
Chiamare questa funzione membro quando è necessario eseguire direttamente un comando SQL.
void ExecuteSQL(LPCTSTR lpszSQL);
Parametri
lpszSQL
Puntatore a una stringa con terminazione Null contenente un comando SQL valido da eseguire. È possibile passare un oggetto CString
.
Osservazioni:
Creare il comando come stringa con terminazione Null. ExecuteSQL
non restituisce record di dati. Se si desidera operare sui record, utilizzare invece un oggetto recordset.
La maggior parte dei comandi per un'origine dati viene eseguita tramite oggetti recordset, che supportano i comandi per la selezione dei dati, l'inserimento di nuovi record, l'eliminazione di record e la modifica dei record. Tuttavia, non tutte le funzionalità ODBC sono supportate direttamente dalle classi di database, pertanto a volte potrebbe essere necessario effettuare una chiamata SQL diretta con ExecuteSQL
.
Esempio
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
Chiamare questa funzione membro per determinare la persistenza dei segnalibri in un oggetto Recordset dopo determinate operazioni.
DWORD GetBookmarkPersistence() const;
Valore restituito
Maschera di bit che identifica le operazioni tramite cui si ottiene la persistenza dei segnalibri in un oggetto Recordset. Per informazioni dettagliate, vedere la sezione Osservazioni.
Osservazioni:
Ad esempio, se si chiama CRecordset::GetBookmark
e quindi si chiama CRecordset::Requery
, è possibile che il segnalibro ottenuto da GetBookmark
non sia più valido. È consigliabile chiamare GetBookmarkPersistence
prima di chiamare CRecordset::SetBookmark
.
Nella tabella seguente sono elencati i valori di maschera di bit che possono essere combinati per il valore restituito di GetBookmarkPersistence
.
Valore di maschera di bit | Persistenza del segnalibro |
---|---|
SQL_BP_CLOSE |
I segnalibri sono validi dopo un'operazione Requery . |
SQL_BP_DELETE |
Il segnalibro per una riga è valido dopo un'operazione Delete su tale riga. |
SQL_BP_DROP |
I segnalibri sono validi dopo un'operazione Close . |
SQL_BP_SCROLL |
I segnalibri sono validi dopo qualsiasi Move operazione. Indica semplicemente se i segnalibri sono supportati nell'oggetto Recordset, come restituito da CRecordset::CanBookmark . |
SQL_BP_TRANSACTION |
I segnalibri sono validi dopo il commit o il rollback di un'operazione. |
SQL_BP_UPDATE |
Il segnalibro per una riga è valido dopo un'operazione Update su tale riga. |
SQL_BP_OTHER_HSTMT |
I segnalibri associati a un oggetto Recordset sono validi in un secondo oggetto Recordset. |
Per altre informazioni su questo valore restituito, vedere la funzione SQLGetInfo
API ODBC in Windows SDK. Per altre informazioni sui segnalibri, vedere l'articolo Recordset: Segnalibri e posizioni assolute (ODBC).
CDatabase::GetConnect
Chiamare questa funzione membro per recuperare il stringa di connessione utilizzato durante la chiamata a OpenEx
o Open
che ha connesso l'oggetto a un'origine CDatabase
dati.
const CString GetConnect() const;
Valore restituito
Oggetto const
CString
contenente il stringa di connessione se OpenEx
è stato chiamato o Open
; in caso contrario, una stringa vuota.
Osservazioni:
Per CDatabase::Open
una descrizione del modo in cui viene creato il stringa di connessione.
CDatabase::GetCursorCommitBehavior
Chiamare questa funzione membro per determinare in che modo un'operazione CommitTrans
influisce sui cursori sugli oggetti recordset aperti.
int GetCursorCommitBehavior() const;
Valore restituito
Valore che indica l'effetto delle transazioni sugli oggetti recordset aperti. Per informazioni dettagliate, vedere la sezione Osservazioni.
Osservazioni:
Nella tabella seguente sono elencati i possibili valori restituiti per GetCursorCommitBehavior
e l'effetto corrispondente sul recordset aperto.
Valore restituito | Effetto sugli CRecordset oggetti |
---|---|
SQL_CB_CLOSE |
Chiamare CRecordset::Requery immediatamente dopo il commit della transazione. |
SQL_CB_DELETE |
Chiamare CRecordset::Close immediatamente dopo il commit della transazione. |
SQL_CB_PRESERVE |
Procedere normalmente con CRecordset le operazioni. |
Per altre informazioni su questo valore restituito, vedere la funzione SQLGetInfo
API ODBC in Windows SDK. Per altre informazioni sulle transazioni, vedere l'articolo Transazione (ODBC).For more information about transactions, see the article Transaction (ODBC).
CDatabase::GetCursorRollbackBehavior
Chiamare questa funzione membro per determinare in che modo un'operazione Rollback
influisce sui cursori sugli oggetti recordset aperti.
int GetCursorRollbackBehavior() const;
Valore restituito
Valore che indica l'effetto delle transazioni sugli oggetti recordset aperti. Per informazioni dettagliate, vedere la sezione Osservazioni.
Osservazioni:
Nella tabella seguente sono elencati i possibili valori restituiti per GetCursorRollbackBehavior
e l'effetto corrispondente sul recordset aperto.
Valore restituito | Effetto sugli CRecordset oggetti |
---|---|
SQL_CB_CLOSE |
Chiamare CRecordset::Requery immediatamente dopo il rollback della transazione. |
SQL_CB_DELETE |
Chiamare CRecordset::Close immediatamente dopo il rollback della transazione. |
SQL_CB_PRESERVE |
Procedere normalmente con CRecordset le operazioni. |
Per altre informazioni su questo valore restituito, vedere la funzione SQLGetInfo
API ODBC in Windows SDK. Per altre informazioni sulle transazioni, vedere l'articolo Transazione (ODBC).For more information about transactions, see the article Transaction (ODBC).
CDatabase::GetDatabaseName
Chiamare questa funzione membro per recuperare il nome del database attualmente connesso, a condizione che l'origine dati definisca un oggetto denominato "database".
CString GetDatabaseName() const;
Valore restituito
Oggetto CString
contenente il nome del database se ha esito positivo; in caso contrario, un oggetto vuoto CString
.
Osservazioni:
Non corrisponde al nome dell'origine dati (DSN) specificato nella OpenEx
chiamata o Open
. Il risultato GetDatabaseName
dipende da ODBC. In generale, un database è una raccolta di tabelle. Se questa entità ha un nome, GetDatabaseName
la restituisce.
È possibile, ad esempio, visualizzare questo nome in un'intestazione. Se si verifica un errore durante il recupero del nome da ODBC, GetDatabaseName
restituisce un oggetto vuoto CString
.
CDatabase::IsOpen
Chiamare questa funzione membro per determinare se l'oggetto è attualmente connesso a un'origine CDatabase
dati.
BOOL IsOpen() const;
Valore restituito
Diverso da zero se l'oggetto CDatabase
è attualmente connesso; in caso contrario, 0.
CDatabase::m_hdbc
Contiene un handle pubblico per una connessione all'origine dati ODBC, ovvero un "handle di connessione".
Osservazioni:
In genere, non sarà necessario accedere direttamente a questa variabile membro. Al contrario, il framework alloca l'handle quando si chiama OpenEx
o Open
. Il framework dealloca l'handle quando si chiama l'operatore delete
sull'oggetto CDatabase
. Si noti che la Close
funzione membro non dealloca l'handle.
In alcune circostanze, tuttavia, potrebbe essere necessario usare direttamente l'handle. Ad esempio, se è necessario chiamare le funzioni API ODBC direttamente anziché tramite la classe CDatabase
, potrebbe essere necessario un handle di connessione da passare come parametro. Vedere l'esempio di codice seguente.
Esempio
// 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
Il framework chiama questa funzione membro quando si esegue direttamente un'istruzione SQL con la ExecuteSQL
funzione membro.
virtual void OnSetOptions(HSTMT hstmt);
Parametri
hstmt
Handle di istruzione ODBC per cui vengono impostate le opzioni.
Osservazioni:
CRecordset::OnSetOptions
chiama anche questa funzione membro.
OnSetOptions
imposta il valore di timeout di accesso. Se sono state eseguite chiamate precedenti alla SetQueryTimeout
funzione membro e , OnSetOptions
riflette i valori correnti. In caso contrario, imposta i valori predefiniti.
Nota
Prima di MFC 4.2, OnSetOptions
impostare anche la modalità di elaborazione su snychronous o asincrona. A partire da MFC 4.2, tutte le operazioni sono sincrone. Per eseguire un'operazione asincrona, è necessario effettuare una chiamata diretta alla funzione SQLSetPos
API ODBC .
Non è necessario eseguire l'override OnSetOptions
per modificare il valore di timeout. Al contrario, per personalizzare il valore di timeout della query, chiamare SetQueryTimeout
prima di creare un recordset; OnSetOptions
userà il nuovo valore. I valori impostati si applicano alle operazioni successive su tutti i recordset o le chiamate SQL dirette.
Eseguire l'override se si desidera impostare opzioni aggiuntive OnSetOptions
. L'override deve chiamare la classe OnSetOptions
base prima o dopo aver chiamato la funzione SQLSetStmtOption
API ODBC . Seguire il metodo illustrato nell'implementazione predefinita del framework di OnSetOptions
.
CDatabase::Open
Chiamare questa funzione membro per inizializzare un oggetto appena costruito CDatabase
.
virtual BOOL Open(
LPCTSTR lpszDSN,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _T("ODBC;"),
BOOL bUseCursorLib = TRUE);
Parametri
lpszDSN
Specifica un nome di origine dati, ovvero un nome registrato con ODBC tramite il programma Amministratore ODBC. Se viene specificato un valore DSN in lpszConnect
(nel formato "DSN=<data-source>"), non deve essere specificato di nuovo in lpszDSN
. In questo caso, lpszDSN
deve essere NULL
. In caso contrario, è possibile passare NULL
se si desidera presentare all'utente una finestra di dialogo Origine dati in cui l'utente può selezionare un'origine dati. Per altre informazioni, vedere Osservazioni.
bExclusive
Non supportato in questa versione della libreria di classi. Attualmente, un'asserzione non riesce se questo parametro è TRUE
. L'origine dati viene sempre aperta come condivisa (non esclusiva).
bReadOnly
TRUE
se si intende che la connessione sia di sola lettura e non venga consentita l'aggiornamento all'origine dati. Tutti i recordset dipendenti ereditano questo attributo. Il valore predefinito è FALSE
.
lpszConnect
Specifica un stringa di connessione. Il stringa di connessione concatena informazioni, ad esempio un nome di origine dati, un ID utente valido nell'origine dati, una stringa di autenticazione utente (password, se l'origine dati ne richiede una) e altre informazioni. L'intero stringa di connessione deve essere preceduto dalla stringa "ODBC;"
(maiuscola o minuscola). La "ODBC;"
stringa viene utilizzata per indicare che la connessione è a un'origine dati ODBC. Ciò è dovuto alla compatibilità verso l'alto quando le versioni future della libreria di classi potrebbero supportare origini dati non ODBC.
bUseCursorLib
TRUE
se si desidera caricare la DLL della libreria di cursori ODBC. La libreria di cursori maschera alcune funzionalità del driver ODBC sottostante, impedendo in modo efficace l'uso di dynaset (se il driver li supporta). Gli unici cursori supportati se la libreria di cursori viene caricata sono snapshot statici e cursori forward-only. Il valore predefinito è TRUE
. Se si prevede di creare un oggetto recordset direttamente da CRecordset
senza derivare da esso, non è consigliabile caricare la libreria di cursori.
Valore restituito
Diverso da zero se la connessione viene stabilita correttamente; in caso contrario, 0 se l'utente sceglie Annulla quando viene visualizzata una finestra di dialogo che richiede altre informazioni di connessione. In tutti gli altri casi, il framework genera un'eccezione.
Osservazioni:
L'oggetto di database deve essere inizializzato prima di poterlo utilizzare per costruire un oggetto recordset.
Nota
La chiamata alla OpenEx
funzione membro è il modo preferito per connettersi a un'origine dati e inizializzare l'oggetto di database.
Se i parametri nella Open
chiamata non contengono informazioni sufficienti per stabilire la connessione, il driver ODBC apre una finestra di dialogo per ottenere le informazioni necessarie dall'utente. Quando si chiama Open
, il stringa di connessione, lpszConnect
, viene archiviato privatamente nell'oggetto CDatabase
ed è disponibile chiamando la GetConnect
funzione membro.
Se si desidera, è possibile aprire una finestra di dialogo personalizzata prima di chiamare Open
per ottenere informazioni dall'utente, ad esempio una password, quindi aggiungere tali informazioni al stringa di connessione si passa a Open
. In alternativa, è possibile salvare il stringa di connessione passato in modo da poterlo riutilizzare alla successiva chiamata dell'applicazione Open
a un CDatabase
oggetto .
È anche possibile usare il stringa di connessione per più livelli di autorizzazione di accesso (ognuno per un oggetto diversoCDatabase
) o per trasmettere altre informazioni specifiche dell'origine dati. Per altre informazioni sulle stringa di connessione, vedere capitolo 5 in Windows SDK.
È possibile che un tentativo di connessione si verifichi un timeout se, ad esempio, l'host DBMS non è disponibile. Se il tentativo di connessione non riesce, Open
genera un'eccezione CDBException
.
Esempio
// 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
Chiamare questa funzione membro per inizializzare un oggetto appena costruito CDatabase
.
virtual BOOL OpenEx(
LPCTSTR lpszConnectString,
DWORD dwOptions = 0);
Parametri
lpszConnectString
Specifica un stringa di connessione ODBC. Sono inclusi il nome dell'origine dati e altre informazioni facoltative, ad esempio un ID utente e una password. Ad esempio, "DSN=SQLServer_Source;UID=SA;PWD=abc123"
è un possibile stringa di connessione. Si noti che se si passa NULL
per lpszConnectString
, una finestra di dialogo Origine dati richiederà all'utente di selezionare un'origine dati.
dwOptions
Maschera di bit che specifica una combinazione dei valori seguenti. Il valore predefinito è 0, ovvero il database verrà aperto come condiviso con accesso in scrittura, la DLL della libreria di cursori ODBC non verrà caricata e la finestra di dialogo connessione ODBC verrà visualizzata solo se non sono presenti informazioni sufficienti per stabilire la connessione.
CDatabase::openExclusive
Non supportato in questa versione della libreria di classi. Un'origine dati viene sempre aperta come condivisa (non esclusiva). Attualmente, un'asserzione ha esito negativo se si specifica questa opzione.CDatabase::openReadOnly
Aprire l'origine dati come di sola lettura.CDatabase::useCursorLib
Caricare la DLL della libreria di cursori ODBC. La libreria di cursori maschera alcune funzionalità del driver ODBC sottostante, impedendo in modo efficace l'uso di dynaset (se il driver li supporta). Gli unici cursori supportati se la libreria di cursori viene caricata sono snapshot statici e cursori forward-only. Se si prevede di creare un oggetto recordset direttamente daCRecordset
senza derivare da esso, non è consigliabile caricare la libreria di cursori.CDatabase::noOdbcDialog
Non visualizzare la finestra di dialogo Connessione ODBC, indipendentemente dal fatto che vengano fornite informazioni di connessione sufficienti.CDatabase::forceOdbcDialog
Visualizzare sempre la finestra di dialogo Connessione ODBC.
Valore restituito
Diverso da zero se la connessione viene stabilita correttamente; in caso contrario, 0 se l'utente sceglie Annulla quando viene visualizzata una finestra di dialogo che richiede altre informazioni di connessione. In tutti gli altri casi, il framework genera un'eccezione.
Osservazioni:
L'oggetto di database deve essere inizializzato prima di poterlo utilizzare per costruire un oggetto recordset.
Se il lpszConnectString
parametro nella OpenEx
chiamata non contiene informazioni sufficienti per stabilire la connessione, il driver ODBC apre una finestra di dialogo per ottenere le informazioni necessarie dall'utente, purché non sia stato impostato CDatabase::noOdbcDialog
o CDatabase::forceOdbcDialog
nel dwOptions
parametro . Quando si chiama OpenEx
, il stringa di connessione, lpszConnectString
, viene archiviato privatamente nell'oggetto CDatabase
ed è disponibile chiamando la GetConnect
funzione membro.
Se si desidera, è possibile aprire una finestra di dialogo personalizzata prima di chiamare OpenEx
per ottenere informazioni dall'utente, ad esempio una password, e quindi aggiungere tali informazioni al stringa di connessione passato a OpenEx
. In alternativa, è possibile salvare il stringa di connessione passato in modo da poterlo riutilizzare alla successiva chiamata dell'applicazione OpenEx
a un CDatabase
oggetto .
È anche possibile usare il stringa di connessione per più livelli di autorizzazione di accesso (ognuno per un oggetto diversoCDatabase
) o per trasmettere altre informazioni specifiche dell'origine dati. Per altre informazioni sulle stringa di connessione, vedere il capitolo 6 nella guida di riferimento per programmatori ODBC.
È possibile che un tentativo di connessione si verifichi un timeout se, ad esempio, l'host DBMS non è disponibile. Se il tentativo di connessione non riesce, OpenEx
genera un'eccezione CDBException
.
Esempio
// 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
Chiamare questa funzione membro per invertire le modifiche apportate durante una transazione.
BOOL Rollback();
Valore restituito
Diverso da zero se la transazione è stata annullata correttamente; in caso contrario, 0. Se una Rollback
chiamata ha esito negativo, gli stati dell'origine dati e della transazione non sono definiti. Se Rollback
restituisce 0, è necessario controllare l'origine dati per determinarne lo stato.
Osservazioni:
Tutte le CRecordset
AddNew
chiamate , Edit
, Delete
e Update
eseguite dopo l'ultimo viene BeginTrans
eseguito il rollback allo stato esistente al momento della chiamata.
Dopo una chiamata a Rollback
, la transazione è finita ed è necessario chiamare BeginTrans
di nuovo per un'altra transazione. Il record corrente prima di chiamare BeginTrans
diventa nuovamente il record corrente dopo Rollback
.
Dopo un rollback, il record corrente prima del rollback rimane corrente. Per informazioni dettagliate sullo stato del recordset e dell'origine dati dopo un rollback, vedere l'articolo Transazione (ODBC).
Esempio
Vedere l'articolo Transazione: Esecuzione di una transazione in un oggetto Recordset (ODBC).
CDatabase::SetLoginTimeout
Chiamare questa funzione membro, prima di chiamare OpenEx
o Open
, per eseguire l'override del numero predefinito di secondi consentiti prima del timeout di una connessione all'origine dati tentata.
void SetLoginTimeout(DWORD dwSeconds);
Parametri
dwSeconds
Numero di secondi da consentire prima del timeout di un tentativo di connessione.
Osservazioni:
Un tentativo di connessione potrebbe verificarsi un timeout se, ad esempio, il sistema DBMS non è disponibile. Chiamare SetLoginTimeout
dopo aver costruito l'oggetto non inizializzato CDatabase
, ma prima di chiamare OpenEx
o Open
.
Il valore predefinito per i timeout di accesso è 15 secondi. Non tutte le origini dati supportano la possibilità di specificare un valore di timeout di accesso. Se l'origine dati non supporta il timeout, si ottiene l'output di traccia ma non un'eccezione. Il valore 0 indica "infinito".
CDatabase::SetQueryTimeout
Chiamare questa funzione membro per eseguire l'override del numero predefinito di secondi consentiti prima del timeout delle operazioni successive sull'origine dati connessa.
void SetQueryTimeout(DWORD dwSeconds);
Parametri
dwSeconds
Numero di secondi consentiti prima del timeout di un tentativo di query.
Osservazioni:
Un'operazione potrebbe verificarsi un timeout a causa di problemi di accesso alla rete, tempi di elaborazione delle query eccessivi e così via. Chiamare SetQueryTimeout
prima di aprire il recordset o prima di chiamare le funzioni membro del AddNew
Update
recordset se Delete
si desidera modificare il valore di timeout della query. L'impostazione influisce su tutte le chiamate successive Open
, AddNew
, Update
e Delete
a tutti i recordset associati a questo CDatabase
oggetto. La modifica del valore di timeout della query per un recordset dopo l'apertura non modifica il valore per il recordset. Ad esempio, le operazioni successive Move
non usano il nuovo valore.
Il valore predefinito per i timeout delle query è 15 secondi. Non tutte le origini dati supportano la possibilità di impostare un valore di timeout della query. Se si imposta un valore di timeout della query pari a 0, non si verifica alcun timeout; la comunicazione con l'origine dati potrebbe smettere di rispondere. Questo comportamento può essere utile durante lo sviluppo. Se l'origine dati non supporta il timeout, si ottiene l'output di traccia ma non un'eccezione.