La classe CDatabase
Représente une connexion à une source de données, par l'intermédiaire de laquelle vous pouvez utiliser la source de données.
Syntaxe
class CDatabase : public CObject
Membres
Constructeurs publics
Nom | Description |
---|---|
CDatabase::CDatabase |
Construit un objet CDatabase . Vous devez initialiser l’objet en appelant OpenEx ou Open . |
Méthodes publiques
Nom | Description |
---|---|
CDatabase::BeginTrans |
Démarre une « transaction » ( une série d’appels réversibles aux fonctions membres , et Update Edit Delete les AddNew fonctions membres de la classe CRecordset ) sur la source de données connectée. La source de données doit prendre en charge les transactions pour BeginTrans qu’elles aient un effet quelconque. |
CDatabase::BindParameters |
Vous permet de lier des paramètres avant d’appeler CDatabase::ExecuteSQL . |
CDatabase::Cancel |
Annule une opération asynchrone ou un processus à partir d’un deuxième thread. |
CDatabase::CanTransact |
Retourne une valeur différente de zéro si la source de données prend en charge les transactions. |
CDatabase::CanUpdate |
Renvoie une valeur différente de zéro si l’objet CDatabase est pouvant être mis à jour (pas en lecture seule). |
CDatabase::Close |
Ferme la connexion de la source de données. |
CDatabase::CommitTrans |
Termine une transaction commencée par BeginTrans . Les commandes de la transaction qui modifient la source de données sont effectuées. |
CDatabase::ExecuteSQL |
Exécute une instruction SQL. Aucun enregistrement de données n’est retourné. |
CDatabase::GetBookmarkPersistence |
Identifie les opérations par le biais des signets persistants sur les objets recordset. |
CDatabase::GetConnect |
Retourne le chaîne de connexion ODBC utilisé pour connecter l’objet CDatabase à une source de données. |
CDatabase::GetCursorCommitBehavior |
Identifie l’effet de la validation d’une transaction sur un objet recordset ouvert. |
CDatabase::GetCursorRollbackBehavior |
Identifie l’effet de la restauration d’une transaction sur un objet recordset ouvert. |
CDatabase::GetDatabaseName |
Retourne le nom de la base de données en cours d’utilisation. |
CDatabase::IsOpen |
Retourne une valeur différente de zéro si l’objet CDatabase est actuellement connecté à une source de données. |
CDatabase::OnSetOptions |
Appelé par l’infrastructure pour définir les options de connexion standard. L’implémentation par défaut définit la valeur du délai d’expiration de la requête. Vous pouvez établir ces options à l’avance en appelant SetQueryTimeout . |
CDatabase::Open |
Établit une connexion à une source de données (via un pilote ODBC). |
CDatabase::OpenEx |
Établit une connexion à une source de données (via un pilote ODBC). |
CDatabase::Rollback |
Inverse les modifications apportées pendant la transaction actuelle. La source de données retourne à son état précédent, tel que défini au niveau de l’appel BeginTrans , sans modification. |
CDatabase::SetLoginTimeout |
Définit le nombre de secondes après lesquelles une tentative de connexion de source de données expire. |
CDatabase::SetQueryTimeout |
Définit le nombre de secondes après lesquelles les opérations de requête de base de données expirent. Affecte tous les jeux d’enregistrements Open suivants, , AddNew Edit et Delete les appels. |
Membres de données publics
Nom | Description |
---|---|
CDatabase::m_hdbc |
Handle de connexion ODBC (Open Database Connectivity) à une source de données. Tapez HDBC. |
Notes
Une source de données est une instance spécifique des données hébergées par un système de gestion de base de données (SGBD). Les exemples incluent Microsoft SQL Server, Microsoft Access, Borland dBASE et xBASE. Vous pouvez avoir un ou plusieurs CDatabase
objets actifs à la fois dans votre application.
Remarque
Si vous utilisez les classes DAO (Data Access Objects) plutôt que les classes ODBC (Open Database Connectivity), utilisez plutôt la classe CDaoDatabase
. Pour plus d’informations, consultez l’article Vue d’ensemble : Programmation de base de données.
Pour utiliser CDatabase
, construisez un CDatabase
objet et appelez sa OpenEx
fonction membre. Cela ouvre une connexion. Lorsque vous construisez CRecordset
ensuite des objets pour fonctionner sur la source de données connectée, transmettez le constructeur de jeu d’enregistrements à votre CDatabase
objet. Lorsque vous avez terminé d’utiliser la connexion, appelez la Close
fonction membre et détruisez l’objet CDatabase
. Close
ferme tous les jeux d’enregistrements que vous n’avez pas fermés précédemment.
Pour plus d’informations sur CDatabase
, consultez les articles sur la source de données (ODBC) et vue d’ensemble : Programmation de base de données.
Hiérarchie d'héritage
CDatabase
Spécifications
En-tête : afxdb.h
CDatabase::BeginTrans
Appelez cette fonction membre pour commencer une transaction avec la source de données connectée.
BOOL BeginTrans();
Valeur de retour
Différent de zéro si l’appel a réussi et que les modifications sont validées manuellement ; sinon 0.
Notes
Une transaction se compose d’un ou plusieurs appels aux fonctions membres , , et Delete
de l’objetAddNew
Edit
CRecordset
.Update
Avant de commencer une transaction, l’objet CDatabase
doit déjà être connecté à la source de données en appelant sa fonction membre ou Open
son OpenEx
nom. Pour mettre fin à la transaction, appelez CommitTrans
pour accepter toutes les modifications apportées à la source de données (et effectuez-les) ou appelez-les Rollback
pour abandonner toute la transaction. Appelez BeginTrans
après avoir ouvert tous les jeux d’enregistrements impliqués dans la transaction et aussi près des opérations de mise à jour réelles que possible.
Attention
Selon votre pilote ODBC, l’ouverture d’un jeu d’enregistrements avant l’appel BeginTrans
peut entraîner des problèmes lors de l’appel Rollback
. Vous devez vérifier le pilote spécifique que vous utilisez. Par exemple, lorsque vous utilisez le pilote Microsoft Access inclus dans microsoft ODBC Desktop Driver Pack 3.0, vous devez tenir compte de l’exigence du moteur de base de données Jet que vous ne devez pas commencer une transaction sur une base de données qui a un curseur ouvert. Dans les classes de base de données MFC, un curseur ouvert signifie un objet ouvert CRecordset
. Pour plus d’informations, consultez la Note technique 68.
BeginTrans
peut également verrouiller les enregistrements de données sur le serveur, en fonction de la concurrence demandée et des fonctionnalités de la source de données. Pour plus d’informations sur le verrouillage des données, consultez l’article Recordset : Locking Records (ODBC).
Les transactions définies par l’utilisateur sont expliquées dans l’article Transaction (ODBC) .
BeginTrans
établit l’état auquel la séquence de transactions peut être restaurée (inversée). Pour établir un nouvel état pour les restaurations, validez toute transaction actuelle, puis appelez BeginTrans
à nouveau.
Attention
Appeler BeginTrans
à nouveau sans appeler CommitTrans
ou Rollback
est une erreur.
Appelez la CanTransact
fonction membre pour déterminer si votre pilote prend en charge les transactions pour une base de données donnée. Vous devez également appeler GetCursorCommitBehavior
et GetCursorRollbackBehavior
déterminer la prise en charge de la conservation des curseurs.
Pour plus d’informations sur les transactions, consultez l’article Transaction (ODBC) .
Exemple
Consultez l’article Transaction : Exécution d’une transaction dans un recordset (ODBC).
CDatabase::BindParameters
Remplacez BindParameters
quand vous devez lier des paramètres avant d’appeler CDatabase::ExecuteSQL
.
virtual void BindParameters(HSTMT hstmt);
Paramètres
hstmt
Handle d’instruction ODBC pour lequel vous souhaitez lier des paramètres.
Notes
Cette approche est utile lorsque vous n’avez pas besoin du jeu de résultats à partir d’une procédure stockée.
Dans votre remplacement, appelez SQLBindParameters
et les fonctions ODBC associées pour lier les paramètres. MFC appelle votre remplacement avant votre appel à ExecuteSQL
. Vous n’avez pas besoin d’appeler SQLPrepare
; ExecuteSQL
appelle SQLExecDirect
et détruit le hstmt
, qui n’est utilisé qu’une seule fois.
CDatabase::Cancel
Appelez cette fonction membre pour demander que la source de données annule une opération asynchrone en cours ou un processus à partir d’un deuxième thread.
void Cancel();
Notes
Notez que les classes ODBC MFC n’utilisent plus le traitement asynchrone ; pour effectuer une opération asynchrone, vous devez appeler directement la fonction SQLSetConnectOption
API ODBC. Pour plus d'informations, consultez Exécution asynchrone.
CDatabase::CanTransact
Appelez cette fonction membre pour déterminer si la base de données autorise les transactions.
BOOL CanTransact() const;
Valeur de retour
Différent de zéro si les recordsets utilisant cet CDatabase
objet autorisent les transactions ; sinon, 0.
Notes
Pour plus d’informations sur les transactions, consultez l’article Transaction (ODBC).
CDatabase::CanUpdate
Appelez cette fonction membre pour déterminer si l’objet autorise les CDatabase
mises à jour.
BOOL CanUpdate() const;
Valeur de retour
Différent de zéro si l’objet autorise les CDatabase
mises à jour ; sinon 0, indiquant que vous avez passé bReadOnly
TRUE
lorsque vous avez ouvert l’objet CDatabase
ou que la source de données elle-même est en lecture seule. La source de données est en lecture seule si un appel à la fonction SQLGetInfo
API ODBC pour SQL_DATASOURCE_READ_ONLY
les retours y
.
Notes
Tous les pilotes ne prennent pas en charge les mises à jour.
CDatabase::CDatabase
Construit un objet CDatabase
.
CDatabase();
Notes
Après avoir construit l’objet, vous devez appeler sa OpenEx
fonction ou Open
membre pour établir une connexion à une source de données spécifiée.
Vous trouverez peut-être pratique d’incorporer l’objet CDatabase
dans votre classe de document.
Exemple
Cet exemple illustre l’utilisation CDatabase
dans une CDocument
classe dérivée de -.
// 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
Appelez cette fonction membre si vous souhaitez vous déconnecter d’une source de données.
virtual void Close();
Notes
Vous devez fermer tous les jeux d’enregistrements associés à l’objet CDatabase
avant d’appeler cette fonction membre. Étant donné que Close
ne détruit pas l’objet CDatabase
, vous pouvez réutiliser l’objet en ouvrant une nouvelle connexion à la même source de données ou à une autre source de données.
Toutes les instructions ou Edit
en attente AddNew
des jeux d’enregistrements utilisant la base de données sont annulées et toutes les transactions en attente sont restaurées. Tous les recordsets dépendant de l’objet CDatabase
sont laissés dans un état non défini.
Exemple
// 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
Appelez cette fonction membre lors de la fin des transactions.
BOOL CommitTrans();
Valeur de retour
Différent de zéro si les mises à jour ont été correctement validées ; sinon 0. En CommitTrans
cas d’échec, l’état de la source de données n’est pas défini. Vous devez vérifier les données pour déterminer son état.
Notes
Une transaction se compose d’une série d’appels aux AddNew
fonctions membres , et Delete
Update
aux Edit
fonctions membres d’un CRecordset
objet qui a commencé par un appel à la BeginTrans
fonction membre. CommitTrans
valide la transaction. Par défaut, les mises à jour sont validées immédiatement ; l’appel BeginTrans
entraîne le retard des mises à jour jusqu’à ce qu’elles CommitTrans
soient appelées.
Jusqu’à ce que vous appeliez CommitTrans
pour mettre fin à une transaction, vous pouvez appeler la Rollback
fonction membre pour abandonner la transaction et laisser la source de données dans son état d’origine. Pour commencer une nouvelle transaction, appelez BeginTrans
à nouveau.
Pour plus d’informations sur les transactions, consultez l’article Transaction (ODBC) .
Exemple
Consultez l’article Transaction : Exécution d’une transaction dans un recordset (ODBC).
CDatabase::ExecuteSQL
Appelez cette fonction membre lorsque vous devez exécuter une commande SQL directement.
void ExecuteSQL(LPCTSTR lpszSQL);
Paramètres
lpszSQL
Pointeur vers une chaîne terminée par null contenant une commande SQL valide à exécuter. Vous pouvez passer un CString
.
Notes
Créez la commande en tant que chaîne terminée par null. ExecuteSQL
ne retourne pas d’enregistrements de données. Si vous souhaitez utiliser des enregistrements, utilisez plutôt un objet recordset.
La plupart de vos commandes pour une source de données sont émises via des objets recordset, qui prennent en charge les commandes de sélection des données, l’insertion de nouveaux enregistrements, la suppression d’enregistrements et la modification d’enregistrements. Toutefois, toutes les fonctionnalités ODBC ne sont pas directement prises en charge par les classes de base de données. Vous devrez peut-être parfois effectuer un appel SQL direct avec ExecuteSQL
.
Exemple
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
Appelez cette fonction membre pour déterminer la persistance des signets sur un objet recordset après certaines opérations.
DWORD GetBookmarkPersistence() const;
Valeur de retour
Un masque de bits qui identifie les opérations par lesquelles les signets persistent sur un objet recordset. Pour plus d'informations, consultez Notes.
Notes
Par exemple, si vous appelez CRecordset::GetBookmark
, puis CRecordset::Requery
, le signet obtenu à partir de GetBookmark
risque de ne plus être valide. Vous devez appeler GetBookmarkPersistence
avant d'appeler CRecordset::SetBookmark
.
Le tableau suivant liste les valeurs de masque de bits qui peuvent être combinées pour la valeur de retour de GetBookmarkPersistence
.
Valeur du masque de bits | Persistance des signets |
---|---|
SQL_BP_CLOSE |
Les signets sont valides après une Requery opération. |
SQL_BP_DELETE |
Le signet d’une ligne est valide après une Delete opération sur cette ligne. |
SQL_BP_DROP |
Les signets sont valides après une Close opération. |
SQL_BP_SCROLL |
Les signets sont valides après toute Move opération. Permet simplement de déterminer si les signets sont pris en charge sur le recordset, comme cela est retourné par CRecordset::CanBookmark . |
SQL_BP_TRANSACTION |
Les signets sont valides après qu'une transaction est validée ou restaurée. |
SQL_BP_UPDATE |
Le signet d’une ligne est valide après une Update opération sur cette ligne. |
SQL_BP_OTHER_HSTMT |
Les signets associés à un objet recordset sont valides sur un deuxième recordset. |
Pour plus d’informations sur cette valeur de retour, consultez la fonction SQLGetInfo
API ODBC dans le Kit de développement logiciel (SDK) Windows. Pour plus d’informations sur les signets, consultez l’article Recordset : Signets et positions absolues (ODBC).
CDatabase::GetConnect
Appelez cette fonction membre pour récupérer le chaîne de connexion utilisé pendant l’appel ou OpenEx
Open
qui a connecté l’objet CDatabase
à une source de données.
const CString GetConnect() const;
Valeur de retour
Contenant const
CString
le chaîne de connexion si OpenEx
ou Open
a été appelé ; sinon, une chaîne vide.
Notes
Consultez CDatabase::Open
la description de la création de la chaîne de connexion.
CDatabase::GetCursorCommitBehavior
Appelez cette fonction membre pour déterminer comment une CommitTrans
opération affecte les curseurs sur les objets recordset ouverts.
int GetCursorCommitBehavior() const;
Valeur de retour
Valeur indiquant l’effet des transactions sur les objets recordset ouverts. Pour plus d'informations, consultez Notes.
Notes
Le tableau suivant répertorie les valeurs de retour possibles pour GetCursorCommitBehavior
et l’effet correspondant sur le jeu d’enregistrements ouvert.
Valeur retournée | Effet sur CRecordset les objets |
---|---|
SQL_CB_CLOSE |
Appelez CRecordset::Requery immédiatement après la validation de transaction. |
SQL_CB_DELETE |
Appelez CRecordset::Close immédiatement après la validation de transaction. |
SQL_CB_PRESERVE |
Poursuivez normalement avec CRecordset les opérations. |
Pour plus d’informations sur cette valeur de retour, consultez la fonction SQLGetInfo
API ODBC dans le Kit de développement logiciel (SDK) Windows. Pour plus d’informations sur les transactions, consultez l’article Transaction (ODBC) .
CDatabase::GetCursorRollbackBehavior
Appelez cette fonction membre pour déterminer comment une Rollback
opération affecte les curseurs sur les objets recordset ouverts.
int GetCursorRollbackBehavior() const;
Valeur de retour
Valeur indiquant l’effet des transactions sur les objets recordset ouverts. Pour plus d'informations, consultez Notes.
Notes
Le tableau suivant répertorie les valeurs de retour possibles pour GetCursorRollbackBehavior
et l’effet correspondant sur le jeu d’enregistrements ouvert.
Valeur retournée | Effet sur CRecordset les objets |
---|---|
SQL_CB_CLOSE |
Appelez CRecordset::Requery immédiatement après la restauration de la transaction. |
SQL_CB_DELETE |
Appelez CRecordset::Close immédiatement après la restauration de la transaction. |
SQL_CB_PRESERVE |
Poursuivez normalement avec CRecordset les opérations. |
Pour plus d’informations sur cette valeur de retour, consultez la fonction SQLGetInfo
API ODBC dans le Kit de développement logiciel (SDK) Windows. Pour plus d’informations sur les transactions, consultez l’article Transaction (ODBC) .
CDatabase::GetDatabaseName
Appelez cette fonction membre pour récupérer le nom de la base de données actuellement connectée (à condition que la source de données définit un objet nommé appelé « base de données »).
CString GetDatabaseName() const;
Valeur de retour
Contenant CString
le nom de la base de données en cas de réussite ; sinon, vide CString
.
Notes
Ce n’est pas le même que le nom de source de données (DSN) spécifié dans l’appel ou Open
l’appelOpenEx
. Ce qui GetDatabaseName
retourne dépend d’ODBC. En général, une base de données est une collection de tables. Si cette entité a un nom, GetDatabaseName
retourne-la.
Vous pouvez, par exemple, afficher ce nom dans un titre. Si une erreur se produit lors de la récupération du nom à partir d’ODBC, GetDatabaseName
retourne une valeur vide CString
.
CDatabase::IsOpen
Appelez cette fonction membre pour déterminer si l’objet CDatabase
est actuellement connecté à une source de données.
BOOL IsOpen() const;
Valeur de retour
Différent de zéro si l’objet CDatabase
est actuellement connecté ; sinon 0.
CDatabase::m_hdbc
Contient un handle public vers une connexion de source de données ODBC , un « handle de connexion ».
Notes
Normalement, vous n’aurez pas besoin d’accéder directement à cette variable membre. Au lieu de cela, l’infrastructure alloue le handle lorsque vous appelez OpenEx
ou Open
. L’infrastructure désalloue le handle lorsque vous appelez l’opérateur delete
sur l’objet CDatabase
. Notez que la Close
fonction membre ne désalloue pas le handle.
Toutefois, dans certaines circonstances, vous devrez peut-être utiliser le handle directement. Par exemple, si vous devez appeler directement des fonctions d’API ODBC plutôt que via une classe CDatabase
, vous devrez peut-être passer un handle de connexion en tant que paramètre. Consultez l’exemple de code ci-dessous.
Exemple
// 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
L’infrastructure appelle cette fonction membre lors de l’exécution directe d’une instruction SQL avec la ExecuteSQL
fonction membre.
virtual void OnSetOptions(HSTMT hstmt);
Paramètres
hstmt
Handle d’instruction ODBC pour lequel les options sont définies.
Notes
CRecordset::OnSetOptions
appelle également cette fonction membre.
OnSetOptions
définit la valeur du délai d’expiration de connexion. S’il existe des appels précédents à la fonction membre et à la SetQueryTimeout
fonction membre, OnSetOptions
reflète les valeurs actuelles ; sinon, elle définit les valeurs par défaut.
Remarque
Avant MFC 4.2, OnSetOptions
définissez également le mode de traitement sur snychronous ou asynchrone. À compter de MFC 4.2, toutes les opérations sont synchrones. Pour effectuer une opération asynchrone, vous devez effectuer un appel direct à la fonction SQLSetPos
API ODBC.
Vous n’avez pas besoin de remplacer OnSetOptions
pour modifier la valeur du délai d’expiration. Au lieu de cela, pour personnaliser la valeur du délai d’expiration de la requête, appelez SetQueryTimeout
avant de créer un jeu d’enregistrements ; OnSetOptions
utilisez la nouvelle valeur. Les valeurs définies s’appliquent aux opérations suivantes sur tous les jeux d’enregistrements ou appels SQL directs.
Remplacez OnSetOptions
si vous souhaitez définir des options supplémentaires. Votre remplacement doit appeler la classe OnSetOptions
de base avant ou après l’appel de la fonction SQLSetStmtOption
API ODBC. Suivez la méthode illustrée dans l’implémentation par défaut de l’infrastructure .OnSetOptions
CDatabase::Open
Appelez cette fonction membre pour initialiser un objet nouvellement construit CDatabase
.
virtual BOOL Open(
LPCTSTR lpszDSN,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _T("ODBC;"),
BOOL bUseCursorLib = TRUE);
Paramètres
lpszDSN
Spécifie un nom de source de données , un nom inscrit auprès d’ODBC via le programme Administrateur ODBC. Si une valeur DSN est spécifiée lpszConnect
dans (sous la forme « DSN=<data-source> »), elle ne doit pas être spécifiée à nouveau dans lpszDSN
. Dans ce cas, lpszDSN
doit être NULL
. Sinon, vous pouvez passer NULL
si vous souhaitez présenter l’utilisateur à une boîte de dialogue Source de données dans laquelle l’utilisateur peut sélectionner une source de données. Pour plus d’informations, consultez Remarques.
bExclusive
Non pris en charge dans cette version de la bibliothèque de classes. Actuellement, une assertion échoue si ce paramètre est TRUE
. La source de données est toujours ouverte en tant que partage (non exclusif).
bReadOnly
TRUE
si vous envisagez que la connexion soit en lecture seule et pour interdire les mises à jour de la source de données. Tous les jeux d’enregistrements dépendants héritent de cet attribut. La valeur par défaut est FALSE
.
lpszConnect
Spécifie un chaîne de connexion. Le chaîne de connexion concatène des informations, éventuellement y compris un nom de source de données, un ID d’utilisateur valide sur la source de données, une chaîne d’authentification utilisateur (mot de passe, si la source de données en a besoin) et d’autres informations. L’ensemble chaîne de connexion doit être précédé de la chaîne "ODBC;"
(majuscules ou minuscules). La "ODBC;"
chaîne est utilisée pour indiquer que la connexion est à une source de données ODBC ; il s’agit d’une compatibilité ascendante lorsque les futures versions de la bibliothèque de classes peuvent prendre en charge les sources de données non ODBC.
bUseCursorLib
TRUE
si vous souhaitez que la DLL de la bibliothèque de curseurs ODBC soit chargée. La bibliothèque de curseurs masque certaines fonctionnalités du pilote ODBC sous-jacent, empêchant efficacement l’utilisation des feuilles de réponse dynamique (si le pilote les prend en charge). Les seuls curseurs pris en charge si la bibliothèque de curseurs est chargée sont des instantanés statiques et des curseurs vers l’avant uniquement. La valeur par défaut est TRUE
. Si vous envisagez de créer un objet recordset directement à partir de CRecordset
celui-ci sans en dériver, vous ne devez pas charger la bibliothèque de curseurs.
Valeur de retour
Différent de zéro si la connexion est établie avec succès ; sinon, 0 si l’utilisateur choisit Annuler lorsqu’il présente une boîte de dialogue demandant plus d’informations de connexion. Dans tous les autres cas, le framework lève une exception.
Notes
Votre objet de base de données doit être initialisé avant de pouvoir l’utiliser pour construire un objet recordset.
Remarque
L’appel de la OpenEx
fonction membre est le moyen par défaut de se connecter à une source de données et d’initialiser votre objet de base de données.
Si les paramètres de votre Open
appel ne contiennent pas suffisamment d’informations pour établir la connexion, le pilote ODBC ouvre une boîte de dialogue pour obtenir les informations nécessaires de l’utilisateur. Lorsque vous appelez Open
, votre chaîne de connexion, lpszConnect
est stocké en privé dans l’objet CDatabase
et est disponible en appelant la GetConnect
fonction membre.
Si vous le souhaitez, vous pouvez ouvrir votre propre boîte de dialogue avant d’appeler Open
pour obtenir des informations de l’utilisateur, telles qu’un mot de passe, puis ajouter ces informations au chaîne de connexion à laquelle vous passez Open
. Vous pouvez également enregistrer le chaîne de connexion que vous passez afin de pouvoir le réutiliser la prochaine fois que votre application appelle Open
sur un CDatabase
objet.
Vous pouvez également utiliser le chaîne de connexion pour plusieurs niveaux d’autorisation de connexion (chacun pour un objet différentCDatabase
) ou pour transmettre d’autres informations spécifiques à la source de données. Pour plus d’informations sur les chaîne de connexion, consultez le chapitre 5 dans le Kit de développement logiciel (SDK) Windows.
Il est possible qu’une tentative de connexion expire si, par exemple, l’hôte SGBD n’est pas disponible. Si la tentative de connexion échoue, Open
lève un CDBException
.
Exemple
// 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
Appelez cette fonction membre pour initialiser un objet nouvellement construit CDatabase
.
virtual BOOL OpenEx(
LPCTSTR lpszConnectString,
DWORD dwOptions = 0);
Paramètres
lpszConnectString
Spécifie un chaîne de connexion ODBC. Cela inclut le nom de la source de données ainsi que d’autres informations facultatives, telles qu’un ID d’utilisateur et un mot de passe. Par exemple, "DSN=SQLServer_Source;UID=SA;PWD=abc123"
il s’agit d’une chaîne de connexion possible. Notez que si vous passez NULL
lpszConnectString
, une boîte de dialogue Source de données invite l’utilisateur à sélectionner une source de données.
dwOptions
Masque de bits qui spécifie une combinaison des valeurs suivantes. La valeur par défaut est 0, ce qui signifie que la base de données sera ouverte en tant qu’accès en écriture, la DLL de bibliothèque de curseurs ODBC ne sera pas chargée et la boîte de dialogue de connexion ODBC s’affiche uniquement s’il n’y a pas suffisamment d’informations pour établir la connexion.
CDatabase::openExclusive
Non pris en charge dans cette version de la bibliothèque de classes. Une source de données est toujours ouverte en tant que partage (non exclusif). Actuellement, une assertion échoue si vous spécifiez cette option.CDatabase::openReadOnly
Ouvrez la source de données en lecture seule.CDatabase::useCursorLib
Chargez la DLL de la bibliothèque de curseurs ODBC. La bibliothèque de curseurs masque certaines fonctionnalités du pilote ODBC sous-jacent, empêchant efficacement l’utilisation des feuilles de réponse dynamique (si le pilote les prend en charge). Les seuls curseurs pris en charge si la bibliothèque de curseurs est chargée sont des instantanés statiques et des curseurs vers l’avant uniquement. Si vous envisagez de créer un objet recordset directement à partir deCRecordset
celui-ci sans en dériver, vous ne devez pas charger la bibliothèque de curseurs.CDatabase::noOdbcDialog
N’affichez pas la boîte de dialogue connexion ODBC, que les informations de connexion suffisantes soient fournies.CDatabase::forceOdbcDialog
Affichez toujours la boîte de dialogue connexion ODBC.
Valeur de retour
Différent de zéro si la connexion est établie avec succès ; sinon, 0 si l’utilisateur choisit Annuler lorsqu’il présente une boîte de dialogue demandant plus d’informations de connexion. Dans tous les autres cas, le framework lève une exception.
Notes
Votre objet de base de données doit être initialisé avant de pouvoir l’utiliser pour construire un objet recordset.
Si le lpszConnectString
paramètre de votre OpenEx
appel ne contient pas suffisamment d’informations pour établir la connexion, le pilote ODBC ouvre une boîte de dialogue pour obtenir les informations nécessaires de l’utilisateur, à condition que vous n’ayez pas défini CDatabase::noOdbcDialog
ou CDatabase::forceOdbcDialog
dans le dwOptions
paramètre. Lorsque vous appelez OpenEx
, votre chaîne de connexion, lpszConnectString
est stocké en privé dans l’objet CDatabase
et est disponible en appelant la GetConnect
fonction membre.
Si vous le souhaitez, vous pouvez ouvrir votre propre boîte de dialogue avant d’appeler OpenEx
pour obtenir des informations de l’utilisateur, telles qu’un mot de passe, puis ajouter ces informations au chaîne de connexion à laquelle vous passez OpenEx
. Vous pouvez également enregistrer le chaîne de connexion que vous passez afin de pouvoir le réutiliser la prochaine fois que votre application appelle OpenEx
sur un CDatabase
objet.
Vous pouvez également utiliser le chaîne de connexion pour plusieurs niveaux d’autorisation de connexion (chacun pour un objet différentCDatabase
) ou pour transmettre d’autres informations spécifiques à la source de données. Pour plus d’informations sur les chaîne de connexion, consultez le chapitre 6 dans la référence du programmeur ODBC.
Il est possible qu’une tentative de connexion expire si, par exemple, l’hôte SGBD n’est pas disponible. Si la tentative de connexion échoue, OpenEx
lève un CDBException
.
Exemple
// 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
Appelez cette fonction membre pour inverser les modifications apportées pendant une transaction.
BOOL Rollback();
Valeur de retour
Différent de zéro si la transaction a été correctement inversée ; sinon 0. En cas d’échec d’un Rollback
appel, la source de données et les états de transaction ne sont pas définis. Si Rollback
la valeur est renvoyée 0, vous devez vérifier la source de données pour déterminer son état.
Notes
Tous les appelsDelete
Edit
, et Update
tous CRecordset
AddNew
les appels exécutés depuis le dernier BeginTrans
sont restaurés à l’état qui existait au moment de cet appel.
Après un appel à Rollback
, la transaction est terminée et vous devez appeler BeginTrans
à nouveau pour une autre transaction. L’enregistrement qui était actif avant d’appeler BeginTrans
devient à nouveau l’enregistrement actif après Rollback
.
Après une restauration, l’enregistrement qui était actif avant la restauration reste actif. Pour plus d’informations sur l’état du jeu d’enregistrements et de la source de données après une restauration, consultez l’article Transaction (ODBC) .
Exemple
Consultez l’article Transaction : Exécution d’une transaction dans un recordset (ODBC).
CDatabase::SetLoginTimeout
Appelez cette fonction membre avant d’appeler OpenEx
ou Open
pour remplacer le nombre de secondes par défaut autorisé avant qu’une tentative de connexion à la source de données expire.
void SetLoginTimeout(DWORD dwSeconds);
Paramètres
dwSeconds
Nombre de secondes à autoriser avant qu’une tentative de connexion expire.
Notes
Une tentative de connexion peut expirer si, par exemple, le SGBD n’est pas disponible. Appel SetLoginTimeout
après avoir construit l’objet non initialisé CDatabase
, mais avant d’appeler OpenEx
ou Open
.
La valeur par défaut des délais d’expiration de connexion est de 15 secondes. Toutes les sources de données ne prennent pas en charge la possibilité de spécifier une valeur de délai d’expiration de connexion. Si la source de données ne prend pas en charge le délai d’expiration, vous obtenez une sortie de trace, mais pas une exception. La valeur 0 signifie « infini ».
CDatabase::SetQueryTimeout
Appelez cette fonction membre pour remplacer le nombre de secondes par défaut à autoriser avant les opérations suivantes sur le délai d’expiration de la source de données connectée.
void SetQueryTimeout(DWORD dwSeconds);
Paramètres
dwSeconds
Nombre de secondes à autoriser avant qu’une tentative de requête expire.
Notes
Une opération peut expirer en raison de problèmes d’accès réseau, de temps de traitement excessif des requêtes, et ainsi de suite. Appel SetQueryTimeout
avant d’ouvrir votre jeu d’enregistrements ou avant d’appeler les fonctions membres AddNew
ou Update
Delete
de l’ensemble d’enregistrements si vous souhaitez modifier la valeur du délai d’expiration de la requête. Le paramètre affecte tous les jeux d’enregistrements suivantsOpen
, et Delete
AddNew
Update
appelle tous les jeux d’enregistrements associés à cet CDatabase
objet. La modification de la valeur du délai d’expiration de la requête pour un jeu d’enregistrements après l’ouverture ne modifie pas la valeur du jeu d’enregistrements. Par exemple, les opérations suivantes Move
n’utilisent pas la nouvelle valeur.
La valeur par défaut des délais d’expiration de requête est de 15 secondes. Toutes les sources de données ne prennent pas en charge la possibilité de définir une valeur de délai d’expiration de requête. Si vous définissez une valeur de délai d’expiration de requête de 0, aucun délai d’expiration ne se produit ; la communication avec la source de données peut cesser de répondre. Ce comportement peut être utile pendant le développement. Si la source de données ne prend pas en charge le délai d’expiration, vous obtenez une sortie de trace, mais pas une exception.