Partilhar via


CDatabase Classe

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Representa uma ligação a uma fonte de dados, através da qual pode operar sobre essa fonte.

Sintaxe

class CDatabase : public CObject

Membros

Construtores Públicos

Nome Description
CDatabase::CDatabase Constrói um CDatabase objeto. Deve inicializar o objeto chamando OpenEx ou Open.

Métodos Públicos

Nome Description
CDatabase::BeginTrans Inicia uma "transação" — uma série de chamadas reversíveis para as AddNewfunções , Edit, Delete, e Update membros da classe CRecordset — na fonte de dados conectada. A fonte de dados deve suportar transações para BeginTrans que tenha algum efeito.
CDatabase::BindParameters Permite associar parâmetros antes de chamar CDatabase::ExecuteSQL.
CDatabase::Cancel Cancela uma operação assíncrona ou um processo de um segundo thread.
CDatabase::CanTransact Retorna diferente de zero se a fonte de dados oferecer suporte a transações.
CDatabase::CanUpdate Retorna diferente de zero se o CDatabase objeto for atualizável (não apenas leitura).
CDatabase::Close Fecha a ligação à fonte de dados.
CDatabase::CommitTrans Conclui uma transação iniciada por BeginTrans. São executados comandos na transação que alteram a fonte de dados.
CDatabase::ExecuteSQL Executa uma instrução SQL. Não são devolvidos registos de dados.
CDatabase::GetBookmarkPersistence Identifica as operações através das quais os marcadores persistem nos objetos do recordet.
CDatabase::GetConnect Devolve a cadeia de ligação ODBC usada para ligar o CDatabase objeto a uma fonte de dados.
CDatabase::GetCursorCommitBehavior Identifica o efeito de comprometer uma transação num objeto de registo aberto.
CDatabase::GetCursorRollbackBehavior Identifica o efeito de reverter uma transação num objeto de registo aberto.
CDatabase::GetDatabaseName Devolve o nome da base de dados atualmente em uso.
CDatabase::IsOpen Retorna diferente de zero se o CDatabase objeto estiver atualmente ligado a uma fonte de dados.
CDatabase::OnSetOptions Chamado pelo framework para definir opções padrão de ligação. A implementação padrão define o valor de timeout da consulta. Pode estabelecer estas opções antecipadamente ligando SetQueryTimeoutpara .
CDatabase::Open Estabelece uma ligação a uma fonte de dados (através de um driver ODBC).
CDatabase::OpenEx Estabelece uma ligação a uma fonte de dados (através de um driver ODBC).
CDatabase::Rollback Reverte as alterações feitas durante a transação atual. A fonte de dados regressa ao seu estado anterior, tal como definido na BeginTrans chamada, inalterada.
CDatabase::SetLoginTimeout Define o número de segundos após os quais uma tentativa de ligação à fonte de dados expira.
CDatabase::SetQueryTimeout Define o número de segundos após os quais as operações de consulta à base de dados irão expirar. Afeta todos os registos subsequentes Open, AddNew, Edit, e Delete chamadas.

Membros de Dados Públicos

Nome Description
CDatabase::m_hdbc Handler de ligação Open Database Connectivity (ODBC) para uma fonte de dados. Tipo HDBC.

Observações

Uma fonte de dados é uma instância específica de dados alojada por algum sistema de gestão de bases de dados (SGBD). Exemplos incluem Microsoft SQL Server, Microsoft Access, Borland dBASE e xBASE. Pode ter um ou mais CDatabase objetos ativos de cada vez na sua aplicação.

Observação

Se estiver a trabalhar com as classes Data Access Objects (DAO) em vez das classes Open Database Connectivity (ODBC), use CDaoDatabase class em vez disso. Para mais informações, consulte o artigo Visão Geral: Programação de Bases de Dados.

Para usar CDatabase, constrói um CDatabase objeto e chama a sua OpenEx função membro. Isto abre uma ligação. Quando construir CRecordset objetos para operar na fonte de dados conectada, passe ao construtor do conjunto de registos um ponteiro para o seu CDatabase objeto. Quando terminares de usar a ligação, chama a Close função membro e destrói o CDatabase objeto. Close encerra quaisquer conjuntos de registos que não tenha fechado anteriormente.

Para mais informações sobre CDatabase, veja os artigos Fonte de Dados (ODBC) e Visão Geral: Programação de Bases de Dados.

Hierarquia de herança

CObject

CDatabase

Requerimentos

Cabeçalho:afxdb.h

CDatabase::BeginTrans

Chame esta função membro para iniciar uma transação com a fonte de dados conectada.

BOOL BeginTrans();

Valor de retorno

Diferente de zero se a chamada foi bem-sucedida e as alterações forem realizadas apenas manualmente; caso contrário, 0.

Observações

Uma transação consiste em uma ou mais chamadas às AddNewfunções , Edit, Delete, e Update membros de um CRecordset objeto. Antes de iniciar uma transação, o CDatabase objeto deve já ter sido ligado à fonte de dados ao chamar a sua OpenEx função ou Open membro. Para terminar a transação, chame CommitTrans para aceitar todas as alterações à fonte de dados (e realize-as) ou peça Rollback para abortar toda a transação. Ligue BeginTrans depois de abrir quaisquer conjuntos de registos envolvidos na transação e o mais próximo possível das operações de atualização reais.

Atenção

Dependendo do seu condutor ODBC, abrir um conjunto de registos antes de ligar BeginTrans pode causar problemas ao ligar Rollback. Deves verificar o driver específico que estás a usar. Por exemplo, ao utilizar o driver Microsoft Access incluído no Microsoft ODBC Desktop Driver Pack 3.0, deve ter em conta o requisito do motor de base de dados Jet de que não deve iniciar uma transação em qualquer base de dados que tenha cursor aberto. Nas classes de base de dados MFC, um cursor aberto significa um objeto aberto CRecordset . Para mais informações, consulte a Nota Técnica 68.

BeginTrans pode também bloquear registos de dados no servidor, dependendo da concorrência solicitada e das capacidades da fonte de dados. Para informações sobre dados de bloqueio, consulte o artigo Conjuntos de Registos: Registos de Bloqueio (ODBC).

As transações definidas pelo utilizador são explicadas no artigo Transação (ODBC).

BeginTrans estabelece o estado para o qual a sequência de transações pode ser revertida (revertida). Para estabelecer um novo estado para rollbacks, comprometer qualquer transação atual e depois chamar BeginTrans novamente.

Atenção

Ligar BeginTrans novamente sem ligar CommitTrans ou Rollback é um erro.

Ligue para a CanTransact função de membro para determinar se o seu driver suporta transações para uma determinada base de dados. Deves também ligar GetCursorCommitBehavior para GetCursorRollbackBehavior verificar o suporte para preservação do cursor.

Para mais informações sobre transações, consulte o artigo Transação (ODBC).

Example

Consulte o artigo Transação: Realizar uma Transação num Conjunto de Registos (ODBC).

CDatabase::BindParameters

Sobrescrita BindParameters quando precisas de associar parâmetros antes de chamar CDatabase::ExecuteSQL.

virtual void BindParameters(HSTMT hstmt);

Parâmetros

hstmt
O handle da instrução ODBC para o qual pretende atribuir parâmetros.

Observações

Esta abordagem é útil quando não precisa do conjunto de resultados de um procedimento armazenado.

No seu override, chame SQLBindParameters as funções ODBC relacionadas para atribuir os parâmetros. A MFC chama o seu override antes da sua chamada para ExecuteSQL. Não precisa de chamar SQLPrepare; ExecuteSQL chama SQLExecDirect e destrói o hstmt, que é usado apenas uma vez.

CDatabase::Cancel

Chame esta função membro para solicitar que a fonte de dados cancele uma operação assíncrona em curso ou um processo de um segundo thread.

void Cancel();

Observações

Note-se que as classes ODBC MFC já não utilizam processamento assíncrono; para realizar uma operação assíncrona, deve chamar diretamente a função SQLSetConnectOptionAPI ODBC . Para mais informações, consulte Execução Assíncrona.

CDatabase::CanTransact

Chame esta função membro para determinar se a base de dados permite transações.

BOOL CanTransact() const;

Valor de retorno

Não nulo se os conjuntos de registos que usam este CDatabase objeto permitirem transações; caso contrário 0.

Observações

Para informações sobre transações, consulte o artigo Transação (ODBC).

CDatabase::CanUpdate

Chame esta função membro para determinar se o CDatabase objeto permite atualizações.

BOOL CanUpdate() const;

Valor de retorno

Diferente de zero se o CDatabase objeto permitir atualizações; caso contrário 0, indicando ou que passou TRUE quando bReadOnly abriu o CDatabase objeto ou que a própria fonte de dados é apenas de leitura. A fonte de dados é apenas de leitura se uma chamada à função SQLGetInfo API ODBC para SQL_DATASOURCE_READ_ONLY devolver y.

Observações

Nem todos os drivers suportam atualizações.

CDatabase::CDatabase

Constrói um CDatabase objeto.

CDatabase();

Observações

Depois de construir o objeto, deve chamar a sua OpenEx função ou Open membro para estabelecer uma ligação a uma fonte de dados especificada.

Pode achar conveniente incorporar o CDatabase objeto na sua classe de documentos.

Example

Este exemplo ilustra o uso CDatabase em uma CDocumentclasse derivada 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

Chame esta função membro se quiser desligar de uma fonte de dados.

virtual void Close();

Observações

Deve fechar quaisquer conjuntos de registos associados ao CDatabase objeto antes de chamar esta função membro. Como Close não destrói o CDatabase objeto, pode reutilizá-lo abrindo uma nova ligação à mesma fonte de dados ou a uma fonte diferente.

Todos os extratos pendentes AddNew ou Edit extratos de conjuntos de registos que utilizam a base de dados são cancelados, e todas as transações pendentes são revertidas. Quaisquer conjuntos de registos dependentes do CDatabase objeto ficam num estado indefinido.

Example

// Close the current connection
m_dbCust.Close();

// Perhaps connect the object to a
// different data source
m_dbCust.OpenEx(_T("DSN=MFC_ODBCTest;UID=JOES"));

CDatabase::CommitTrans

Chame esta função de membro ao concluir as transações.

BOOL CommitTrans();

Valor de retorno

Não nula se as atualizações forem confirmadas com sucesso; caso contrário, 0. Se CommitTrans falhar, o estado da fonte de dados é indefinido. Deve verificar os dados para determinar o seu estado.

Observações

Uma transação consiste numa série de chamadas para as AddNewfunções , Edit, Delete, e Update membros de um CRecordset objeto que começou com uma chamada para a BeginTrans função membro. CommitTrans compromete a transação. Por defeito, as atualizações são confirmadas imediatamente; A chamada BeginTrans faz com que o compromisso de atualizações seja adiado até CommitTrans ser chamado.

Até chamar CommitTrans para terminar uma transação, pode chamar a Rollback função membro para abortar a transação e deixar a fonte de dados no seu estado original. Para iniciar uma nova transação, ligue BeginTrans novamente.

Para mais informações sobre transações, consulte o artigo Transação (ODBC).

Example

Consulte o artigo Transação: Realizar uma Transação num Conjunto de Registos (ODBC).

CDatabase::ExecuteSQL

Chame esta função membro quando precisar de executar um comando SQL diretamente.

void ExecuteSQL(LPCTSTR lpszSQL);

Parâmetros

lpszSQL
Apontador para uma string terminada por null contendo um comando SQL válido para executar. Pode passar um CString.

Observações

Crie o comando como uma cadeia terminada por nulo. ExecuteSQL não devolve registos de dados. Se quiseres operar em registos, usa antes um objeto de conjunto de registos.

A maioria dos seus comandos para uma fonte de dados é emitida através de objetos de conjunto de registos, que suportam comandos para selecionar dados, inserir novos registos, eliminar registos e editar registos. No entanto, nem toda a funcionalidade ODBC é suportada diretamente pelas classes da base de dados, pelo que por vezes poderá ser necessário fazer uma chamada SQL direta com ExecuteSQL.

Example

try
{
   m_dbCust.ExecuteSQL(
       _T("UPDATE Taxes ")
       _T("SET Rate = '36' ")
       _T("WHERE Name = 'Federal'"));
}
catch (CDBException *pe)
{
   // The error code is in pe->m_nRetCode
   pe->ReportError();
   pe->Delete();
}

CDatabase::GetBookmarkPersistence

Chame esta função membro para determinar a persistência dos favoritos num objeto do conjunto de registos após certas operações.

DWORD GetBookmarkPersistence() const;

Valor de retorno

Uma máscara de bits que identifica as operações através das quais os marcadores persistem num objeto de registo. Para obter detalhes, consulte Observações.

Observações

Por exemplo, se chamar CRecordset::GetBookmark e depois chamar CRecordset::Requery, o marcador obtido de GetBookmark pode deixar de ser válido. Deves ligar GetBookmarkPersistence antes de ligar CRecordset::SetBookmark.

A tabela seguinte lista os valores da máscara de bits que podem ser combinados para o valor de retorno de GetBookmarkPersistence.

Valor da máscara de bits Persistência dos marcadores
SQL_BP_CLOSE Os marcadores são válidos após uma Requery operação.
SQL_BP_DELETE O marcador de uma linha é válido após uma Delete operação nessa linha.
SQL_BP_DROP Os marcadores são válidos após uma Close operação.
SQL_BP_SCROLL Os marcadores são válidos após qualquer Move operação. Isto simplesmente identifica se os favoritos são suportados no conjunto de registos, conforme devolvido por CRecordset::CanBookmark.
SQL_BP_TRANSACTION Os favoritos são válidos após uma transação ser comprometida ou revertida.
SQL_BP_UPDATE O marcador de uma linha é válido após uma Update operação nessa linha.
SQL_BP_OTHER_HSTMT Os marcadores associados a um objeto de registos são válidos num segundo conjunto de registos.

Para mais informações sobre este valor de retorno, consulte a função SQLGetInfo API ODBC no SDK do Windows. Para mais informações sobre favoritos, consulte o artigo Recordet: Bookmarks and Absolute Positions (ODBC).

CDatabase::GetConnect

Chame esta função membro para recuperar a cadeia de ligação usada durante a chamada para OpenEx ou Open que ligou o CDatabase objeto a uma fonte de dados.

const CString GetConnect() const;

Valor de retorno

A contendo constCString a cadeia de ligação se OpenEx ou Open tiver sido chamada; caso contrário, uma cadeia vazia.

Observações

Veja CDatabase::Open uma descrição de como a cadeia de ligação é criada.

CDatabase::GetCursorCommitBehavior

Chame esta função membro para determinar como uma CommitTrans operação afeta os cursores em objetos de registos abertos.

int GetCursorCommitBehavior() const;

Valor de retorno

Um valor que indica o efeito das transações em objetos de registos abertos. Para obter detalhes, consulte Observações.

Observações

A tabela seguinte lista os possíveis valores de retorno para GetCursorCommitBehavior e o efeito correspondente no conjunto de registos abertos.

Valor de retorno Efeito nos CRecordset objetos
SQL_CB_CLOSE Ligue CRecordset::Requery imediatamente após o commit da transação.
SQL_CB_DELETE Ligue CRecordset::Close imediatamente após o commit da transação.
SQL_CB_PRESERVE Proceder normalmente com CRecordset as operações.

Para mais informações sobre este valor de retorno, consulte a função SQLGetInfo API ODBC no SDK do Windows. Para mais informações sobre transações, consulte o artigo Transação (ODBC).

CDatabase::GetCursorRollbackBehavior

Chame esta função membro para determinar como uma Rollback operação afeta os cursores em objetos de registos abertos.

int GetCursorRollbackBehavior() const;

Valor de retorno

Um valor que indica o efeito das transações em objetos de registos abertos. Para obter detalhes, consulte Observações.

Observações

A tabela seguinte lista os possíveis valores de retorno para GetCursorRollbackBehavior e o efeito correspondente no conjunto de registos abertos.

Valor de retorno Efeito nos CRecordset objetos
SQL_CB_CLOSE Ligue CRecordset::Requery imediatamente após a reversão da transação.
SQL_CB_DELETE Ligue CRecordset::Close imediatamente após a reversão da transação.
SQL_CB_PRESERVE Proceder normalmente com CRecordset as operações.

Para mais informações sobre este valor de retorno, consulte a função SQLGetInfo API ODBC no SDK do Windows. Para mais informações sobre transações, consulte o artigo Transação (ODBC).

CDatabase::GetDatabaseName

Chame esta função membro para recuperar o nome da base de dados atualmente ligada (desde que a fonte de dados defina um objeto nomeado chamado "base de dados").

CString GetDatabaseName() const;

Valor de retorno

A contendo o nome da base de dados se for CString bem-sucedido; caso contrário, um vazio CString.

Observações

Isto não é o mesmo que o nome da fonte de dados (DSN) especificado na OpenEx chamada ou.Open O que GetDatabaseName retorna depende do ODBC. Em geral, uma base de dados é um conjunto de tabelas. Se esta entidade tiver um nome, devolve-o GetDatabaseName .

Pode, por exemplo, querer mostrar este nome num título. Se ocorrer um erro ao recuperar o nome do ODBC, devolve GetDatabaseName um .CString

CDatabase::IsOpen

Chame esta função membro para determinar se o CDatabase objeto está atualmente ligado a uma fonte de dados.

BOOL IsOpen() const;

Valor de retorno

Não nulo se o CDatabase objeto estiver atualmente ligado; caso contrário, 0.

CDatabase::m_hdbc

Contém um handle público para uma ligação de fonte de dados ODBC — um "handle de conexão".

Observações

Normalmente, não será necessário aceder diretamente a esta variável membro. Em vez disso, o framework aloca o handle quando chama OpenEx ou Open. O framework desaloca o handle quando chamas o delete operador no CDatabase objeto. Note que a Close função membro não desaloca a alavanca.

Em algumas circunstâncias, no entanto, pode ser necessário usar a maçaneta diretamente. Por exemplo, se precisar de chamar funções API ODBC diretamente em vez de através da classe CDatabase, pode precisar de um handle de ligação para passar como parâmetro. Veja o exemplo do código abaixo.

Example

// Using m_hdbc for a direct ODBC API call.
// m_dbCust is the CDatabase object; m_hdbc is
// its HDBC member variable
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
                        &nValue, sizeof(nValue), &cbValue);

CDatabase::OnSetOptions

O framework chama esta função membro ao executar diretamente uma instrução SQL com a ExecuteSQL função membro.

virtual void OnSetOptions(HSTMT hstmt);

Parâmetros

hstmt
A instrução ODBC identifica quais opções estão a ser definidas.

Observações

CRecordset::OnSetOptions também chama a esta função de membro.

OnSetOptions define o valor de tempo limite de login. Se já houve chamadas anteriores para a SetQueryTimeout função membro and, OnSetOptions reflete os valores atuais; caso contrário, define valores por defeito.

Observação

Antes do MFC 4.2, OnSetOptions também definia o modo de processamento para snychrono ou assíncrono. A partir do MFC 4.2, todas as operações são síncronas. Para realizar uma operação assíncrona, deve fazer uma chamada direta à função SQLSetPosAPI ODBC .

Não precisa de sobrescrever OnSetOptions para alterar o valor de timeout. Em vez disso, para personalizar o valor de timeout da consulta, chame SetQueryTimeout antes de criar um conjunto de registos; OnSetOptions usará o novo valor. Os valores definidos aplicam-se a operações subsequentes em todos os conjuntos de registos ou chamadas SQL diretas.

Anula OnSetOptions se quiseres definir opções adicionais. O seu override deve chamar a classe OnSetOptions base antes ou depois de chamar a função SQLSetStmtOptionAPI ODBC . Siga o método ilustrado na implementação padrão do framework de OnSetOptions.

CDatabase::Open

Chame esta função membro para inicializar um objeto recém-construído CDatabase .

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

Parâmetros

lpszDSN
Especifica um nome de fonte de dados — um nome registado no ODBC através do programa ODBC Administrator. Se um valor DSN for especificado em lpszConnect (na forma "DSN=<data-source>"), não deve ser especificado novamente em lpszDSN. Neste caso, lpszDSN deveria ser NULL. Caso contrário, pode passar NULL se quiser apresentar ao utilizador uma caixa de diálogo de Fonte de Dados onde o utilizador pode selecionar uma fonte de dados. Para mais informações, ver Observações.

bExclusive
Não suportado nesta versão da biblioteca de classes. Atualmente, uma asserção falha se este parâmetro for TRUE. A fonte de dados é sempre aberta como partilhada (não exclusiva).

bReadOnly
TRUE Se pretende que a ligação seja só de leitura e proibir atualizações da fonte de dados. Todos os conjuntos de registos dependentes herdam este atributo. O valor predefinido é FALSE.

lpszConnect
Especifica uma cadeia de ligação. A cadeia de ligação concatena informação, possivelmente incluindo um nome da fonte de dados, um ID de utilizador válido na fonte de dados, uma cadeia de autenticação de utilizador (palavra-passe, se a fonte de dados exigir) e outras informações. Toda a cadeia de ligação deve ser precedida pela corda "ODBC;" (maiúsculas ou minúsculas). A "ODBC;" cadeia é usada para indicar que a ligação é a uma fonte de dados ODBC; isto é para compatibilidade ascendente quando versões futuras da biblioteca de classes possam suportar fontes de dados não ODBC.

bUseCursorLib
TRUE se quiseres que a DLL da Biblioteca de Cursores ODBC seja carregada. A biblioteca de cursores mascara alguma funcionalidade do driver ODBC subjacente, impedindo efetivamente o uso de dinasets (se o driver os suportar). Os únicos cursores suportados se a biblioteca de cursores estiver carregada são instantâneos estáticos e cursores apenas para avançar. O valor predefinido é TRUE. Se planeia criar um objeto de conjunto de registos diretamente sem CRecordset derivar dele, não deve carregar a biblioteca de cursores.

Valor de retorno

Não nula se a ligação for feita com sucesso; caso contrário, 0 se o utilizador escolher Cancelar quando lhe é apresentada uma caixa de diálogo a pedir mais informações de ligação. Em todos os outros casos, o quadro faz uma exceção.

Observações

O seu objeto de base de dados deve ser inicializado antes de o poder usar para construir um objeto de conjunto de registos.

Observação

Chamar a OpenEx função membro é a forma preferida de se ligar a uma fonte de dados e inicializar o seu objeto de base de dados.

Se os parâmetros da sua Open chamada não conterem informação suficiente para fazer a ligação, o driver ODBC abre uma caixa de diálogo para obter a informação necessária do utilizador. Quando chama Open, a sua cadeia de ligação, lpszConnect, é armazenada privadamente no CDatabase objeto e está disponível ao chamar a GetConnect função membro.

Se quiser, pode abrir a sua própria caixa de diálogo antes de ligar Open para obter informações do utilizador, como uma palavra-passe, e depois adicionar essa informação à cadeia de ligação que passa para Open. Ou talvez queiras guardar a string de ligação que passaste para a poderes reutilizar da próxima vez que a tua aplicação chamar Open um CDatabase objeto.

Também pode usar a string de ligação para múltiplos níveis de autorização de login (cada um para um objeto diferente CDatabase ) ou para transmitir outra informação específica da fonte de dados. Para mais informações sobre cadeias de ligação, consulte o Capítulo 5 no SDK do Windows.

É possível que uma ligação tente expirar se, por exemplo, o host do SGBD não estiver disponível. Se a tentativa de ligação falhar, Open lança um CDBException.

Example

// m_dbCust is a CDatabase object embedded in a CDocument class

if (bDefault)
{
   // Connect the object to a data source (no password)
   // the ODBC connection dialog box will always remain hidden
   m_dbCust.Open(_T("MFC_ODBCTest"), FALSE, FALSE, _T("ODBC;UID=JOES"));
}
else
{
   // ...Or, query the user for all connection information
   m_dbCust.Open(NULL);
}

CDatabase::OpenEx

Chame esta função membro para inicializar um objeto recém-construído CDatabase .

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

Parâmetros

lpszConnectString
Especifica uma cadeia de ligação ODBC. Isto inclui o nome da fonte dos dados, bem como outras informações opcionais, como um ID de utilizador e palavra-passe. Por exemplo, "DSN=SQLServer_Source;UID=SA;PWD=abc123" é uma possível cadeia de ligação. Note que, se passar NULL por lpszConnectString, uma caixa de diálogo Fonte de Dados irá pedir ao utilizador para selecionar uma fonte de dados.

dwOptions
Uma máscara de bits que especifica uma combinação dos seguintes valores. O valor padrão é 0, o que significa que a base de dados será aberta como partilhada com acesso de escrita, a DLL da Biblioteca de Cursores ODBC não será carregada, e a caixa de diálogo de ligação ODBC só será exibida se não houver informação suficiente para fazer a ligação.

  • CDatabase::openExclusive Não suportado nesta versão da biblioteca de classes. Uma fonte de dados é sempre aberta como partilhada (não exclusiva). Atualmente, uma afirmação falha se especificar esta opção.

  • CDatabase::openReadOnly Abra a fonte de dados como apenas leitura.

  • CDatabase::useCursorLib Carregue a DLL da Biblioteca de Cursor ODBC. A biblioteca de cursores mascara alguma funcionalidade do driver ODBC subjacente, impedindo efetivamente o uso de dinasets (se o driver os suportar). Os únicos cursores suportados se a biblioteca de cursores estiver carregada são instantâneos estáticos e cursores apenas para avançar. Se planeia criar um objeto de conjunto de registos diretamente sem CRecordset derivar dele, não deve carregar a biblioteca de cursores.

  • CDatabase::noOdbcDialog Não mostre a caixa de diálogo de ligação ODBC, independentemente de ser fornecida informação suficiente da ligação.

  • CDatabase::forceOdbcDialog Mostra sempre a caixa de diálogo de ligação ODBC.

Valor de retorno

Não nula se a ligação for feita com sucesso; caso contrário, 0 se o utilizador escolher Cancelar quando lhe é apresentada uma caixa de diálogo a pedir mais informações de ligação. Em todos os outros casos, o quadro faz uma exceção.

Observações

O seu objeto de base de dados deve ser inicializado antes de o poder usar para construir um objeto de conjunto de registos.

Se o lpszConnectString parâmetro na sua OpenEx chamada não contiver informação suficiente para fazer a ligação, o driver ODBC abre uma caixa de diálogo para obter a informação necessária do utilizador, desde que não tenha definido CDatabase::noOdbcDialog ou CDatabase::forceOdbcDialog incluído o dwOptions parâmetro. Quando chama OpenEx, a sua cadeia de ligação, lpszConnectString, é armazenada privadamente no CDatabase objeto e está disponível ao chamar a GetConnect função membro.

Se quiser, pode abrir a sua própria caixa de diálogo antes de ligar OpenEx para obter informações do utilizador, como uma palavra-passe, e depois adicionar essa informação à cadeia de ligação que passa para OpenEx. Ou talvez queiras guardar a string de ligação que passaste para a poderes reutilizar da próxima vez que a tua aplicação chamar OpenEx um CDatabase objeto.

Também pode usar a string de ligação para múltiplos níveis de autorização de login (cada um para um objeto diferente CDatabase ) ou para transmitir outra informação específica da fonte de dados. Para mais informações sobre cadeias de ligação, consulte o Capítulo 6 na Referência do Programador ODBC.

É possível que uma ligação tente expirar se, por exemplo, o host do SGBD não estiver disponível. Se a tentativa de ligação falhar, OpenEx lança um CDBException.

Example

// m_dbCust is a CDatabase object embedded in a CDocument class.

// Connect the object to a read-only data source where
// the ODBC connection dialog box will always remain hidden
m_dbCust.OpenEx(_T("DSN=MFC_ODBCTest;UID=JOES"),
                CDatabase::openReadOnly | CDatabase::noOdbcDialog);

CDatabase::Rollback

Chame esta função membro para reverter as alterações feitas durante uma transação.

BOOL Rollback();

Valor de retorno

Não nula se a transação for revertida com sucesso; caso contrário, 0. Se uma Rollback chamada falhar, a fonte de dados e os estados da transação ficam indefinidos. Se Rollback devolver 0, deve verificar a fonte de dados para determinar o seu estado.

Observações

Todas as CRecordsetAddNewchamadas , Edit, Delete, e Update chamadas executadas desde a última BeginTrans são revertidas para o estado existente na altura dessa chamada.

Após uma chamada para Rollback, a transação termina e deve ligar BeginTrans novamente para outra transação. O registo que estava atualizado antes de ligares BeginTrans torna-se novamente o registo atual depois Rollbackde .

Após um rollback, o registo que estava atual antes do rollback mantém-se atual. Para detalhes sobre o estado do conjunto de registos e da fonte de dados após um rollback, consulte o artigo Transação (ODBC).

Example

Consulte o artigo Transação: Realizar uma Transação num Conjunto de Registos (ODBC).

CDatabase::SetLoginTimeout

Chame esta função membro — antes de chamar OpenEx ou Open — para sobrepor o número padrão de segundos permitidos antes de uma tentativa de ligação à fonte de dados expirar.

void SetLoginTimeout(DWORD dwSeconds);

Parâmetros

dwSeconds
O número de segundos a permitir antes de uma tentativa de ligação termina.

Observações

Uma tentativa de ligação pode expirar se, por exemplo, o SGBD não estiver disponível. Chame SetLoginTimeout depois de construir o objeto não inicializado CDatabase , mas antes de chamar OpenEx ou Open.

O valor padrão para os tempos de espera de login é 15 segundos. Nem todas as fontes de dados suportam a capacidade de especificar um valor de timeout de login. Se a fonte de dados não suportar timeout, obtém-se saída de traço, mas não é exceção. Um valor de 0 significa "infinito".

CDatabase::SetQueryTimeout

Chame esta função membro para sobrepor o número padrão de segundos e permitir o tempo de expiração das operações subsequentes na fonte de dados conectadas.

void SetQueryTimeout(DWORD dwSeconds);

Parâmetros

dwSeconds
O número de segundos a permitir antes de uma tentativa de consulta termina.

Observações

Uma operação pode expirar devido a problemas de acesso à rede, tempo excessivo de processamento de consultas, e assim por diante. Ligue SetQueryTimeout antes de abrir o seu conjunto de registos ou antes de chamar o AddNewconjunto de registos ou UpdateDelete as funções membros se quiser alterar o valor de tempo de espera da consulta. A definição afeta todos os subsequentes Open, AddNew, Update, e Delete chamadas a quaisquer conjuntos de registos associados a este CDatabase objeto. Alterar o valor de timeout da consulta para um conjunto de registos após a abertura não altera o valor do conjunto de registos. Por exemplo, operações subsequentes Move não usam o novo valor.

O valor padrão para os tempos de espera da consulta é 15 segundos. Nem todas as fontes de dados suportam a capacidade de definir um valor de timeout de consulta. Se definir um valor de timeout de consulta igual a 0, não ocorre timeout; A comunicação com a fonte de dados pode deixar de responder. Este comportamento pode ser útil durante o desenvolvimento. Se a fonte de dados não suportar timeout, obtém-se saída de traço, mas não é exceção.

Consulte também

CObject Classe
Gráfico de Hierarquia
CRecordset Classe