Udostępnij za pośrednictwem


CDatabase Klasa

Reprezentuje połączenie ze źródłem danych, za pośrednictwem którego można pracować ze źródłem danych.

Składnia

class CDatabase : public CObject

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
CDatabase::CDatabase CDatabase Tworzy obiekt. Należy zainicjować obiekt przez wywołanie OpenEx metody lub Open.

Metody publiczne

Nazwa/nazwisko opis
CDatabase::BeginTrans Uruchamia "transakcję" — serię odwracalnych wywołań funkcji AddNewklasy CRecordset , EditDelete, i Update składowych — w połączonym źródle danych. Źródło danych musi obsługiwać transakcje, aby BeginTrans mieć jakikolwiek wpływ.
CDatabase::BindParameters Umożliwia powiązanie parametrów przed wywołaniem metody CDatabase::ExecuteSQL.
CDatabase::Cancel Anuluje operację asynchroniczną lub proces z drugiego wątku.
CDatabase::CanTransact Zwraca wartość niezerowa, jeśli źródło danych obsługuje transakcje.
CDatabase::CanUpdate Zwraca wartość niezerową, jeśli CDatabase obiekt jest aktualizowalny (nie tylko do odczytu).
CDatabase::Close Zamyka połączenie ze źródłem danych.
CDatabase::CommitTrans Kończy transakcję rozpoczętą przez BeginTrans. Wykonywane są polecenia w transakcji, które zmieniają źródło danych.
CDatabase::ExecuteSQL Wykonuje instrukcję SQL. Nie są zwracane żadne rekordy danych.
CDatabase::GetBookmarkPersistence Identyfikuje operacje, za pomocą których zakładki są utrwalane w obiektach zestawu rekordów.
CDatabase::GetConnect Zwraca parametry połączenia ODBC używane do łączenia obiektu ze CDatabase źródłem danych.
CDatabase::GetCursorCommitBehavior Określa wpływ zatwierdzania transakcji na otwartym obiekcie zestawu rekordów.
CDatabase::GetCursorRollbackBehavior Określa wpływ wycofywania transakcji na otwarty obiekt zestawu rekordów.
CDatabase::GetDatabaseName Zwraca nazwę aktualnie używanej bazy danych.
CDatabase::IsOpen Zwraca wartość niezerową, jeśli CDatabase obiekt jest obecnie połączony ze źródłem danych.
CDatabase::OnSetOptions Wywoływana przez platformę w celu ustawienia standardowych opcji połączenia. Domyślna implementacja ustawia wartość limitu czasu zapytania. Te opcje można ustanowić z wyprzedzeniem, wywołując metodę SetQueryTimeout.
CDatabase::Open Ustanawia połączenie ze źródłem danych (za pośrednictwem sterownika ODBC).
CDatabase::OpenEx Ustanawia połączenie ze źródłem danych (za pośrednictwem sterownika ODBC).
CDatabase::Rollback Odwraca zmiany wprowadzone podczas bieżącej transakcji. Źródło danych powraca do poprzedniego stanu, zgodnie z definicją w wywołaniu BeginTrans , niezdefiniowane.
CDatabase::SetLoginTimeout Ustawia liczbę sekund, po których upłynął limit czasu próby połączenia ze źródłem danych.
CDatabase::SetQueryTimeout Ustawia liczbę sekund, po których upłynął limit czasu operacji zapytań bazy danych. Dotyczy wszystkich kolejnych zestawów rekordów Open, AddNew, Editi Delete wywołań.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
CDatabase::m_hdbc Otwórz dojście połączenia Połączenie ivity (ODBC) bazy danych ze źródłem danych. Wpisz HDBC.

Uwagi

Źródło danych jest konkretnym wystąpieniem danych hostowanych przez system zarządzania bazami danych (DBMS). Przykłady obejmują programy Microsoft SQL Server, Microsoft Access, Borland dBASE i xBASE. W aplikacji może być aktywny co najmniej jeden CDatabase obiekt.

Uwaga

Jeśli pracujesz z klasami Data Access Objects (DAO), a nie z klasami Open Database Połączenie ivity (ODBC), użyj klasyCDaoDatabase. Aby uzyskać więcej informacji, zobacz artykuł Omówienie: programowanie bazy danych.

Aby użyć CDatabasemetody , skonstruuj CDatabase obiekt i wywołaj jego OpenEx funkcję składową. Spowoduje to otwarcie połączenia. Po utworzeniu CRecordset obiektów do działania w połączonym źródle danych przekaż konstruktor zestawu rekordów wskaźnik do CDatabase obiektu. Po zakończeniu korzystania z połączenia wywołaj Close funkcję składową i zniszcz CDatabase obiekt. Close zamyka wszystkie zestawy rekordów, które nie zostały wcześniej zamknięte.

Aby uzyskać więcej informacji na temat CDatabaseprogramu , zobacz artykuły Źródło danych (ODBC) i Omówienie: Programowanie bazy danych.

Hierarchia dziedziczenia

CObject

CDatabase

Wymagania

Nagłówka:afxdb.h

CDatabase::BeginTrans

Wywołaj tę funkcję składową, aby rozpocząć transakcję z połączonym źródłem danych.

BOOL BeginTrans();

Wartość zwracana

Bezzerowe, jeśli wywołanie zakończyło się pomyślnie, a zmiany są zatwierdzane tylko ręcznie; w przeciwnym razie 0.

Uwagi

Transakcja składa się z co najmniej jednego wywołania funkcji AddNew, Edit, Deletei Update składowych CRecordset obiektu. Przed rozpoczęciem transakcji CDatabase obiekt musi już być połączony ze źródłem danych przez wywołanie jego OpenEx funkcji lub Open składowej. Aby zakończyć transakcję, wywołaj metodę CommitTrans , aby zaakceptować wszystkie zmiany w źródle danych (i przeprowadzić je) lub wywołać metodę Rollback przerwania całej transakcji. Wywołaj BeginTrans metodę po otwarciu wszystkich zestawów rekordów zaangażowanych w transakcję i jak najbardziej zbliżonych do rzeczywistych operacji aktualizacji.

Uwaga

W zależności od sterownika ODBC otwarcie zestawu rekordów przed wywołaniem BeginTrans może powodować problemy podczas wywoływania .Rollback Należy sprawdzić konkretny używany sterownik. Na przykład w przypadku korzystania ze sterownika Microsoft Access dołączonego do pakietu Sterownik 3.0 pulpitu Microsoft ODBC Desktop Driver Pack 3.0 należy uwzględnić wymaganie aparatu bazy danych Jet, że nie należy rozpoczynać transakcji w żadnej bazie danych, która ma otwarty kursor. W klasach baz danych MFC otwarty kursor oznacza otwarty CRecordset obiekt. Aby uzyskać więcej informacji, zobacz Technical Note 68 (Uwaga techniczna 68).

BeginTrans może również blokować rekordy danych na serwerze, w zależności od żądanej współbieżności i możliwości źródła danych. Aby uzyskać informacje na temat blokowania danych, zobacz artykuł Zestaw rekordów: blokowanie rekordów (ODBC).

Transakcje zdefiniowane przez użytkownika zostały wyjaśnione w artykule Transaction (ODBC).

BeginTrans ustanawia stan, w którym sekwencja transakcji może zostać wycofana (odwrócona). Aby ustanowić nowy stan wycofywania, zatwierdź dowolną bieżącą transakcję, a następnie wywołaj BeginTrans ponownie.

Uwaga

Wywołanie BeginTrans ponownie bez wywoływania CommitTrans lub Rollback jest błędem.

Wywołaj funkcję składową, CanTransact aby określić, czy sterownik obsługuje transakcje dla danej bazy danych. Należy również wywołać metodę GetCursorCommitBehavior i GetCursorRollbackBehavior określić obsługę zachowywania kursora.

Aby uzyskać więcej informacji na temat transakcji, zobacz artykuł Transaction (ODBC).

Przykład

Zobacz artykuł Transaction: Performing a Transaction in a Recordset (ODBC) (Transakcja: wykonywanie transakcji w zestawie rekordów (ODBC).

CDatabase::BindParameters

Zastąp BindParameters , gdy musisz powiązać parametry przed wywołaniem metody CDatabase::ExecuteSQL.

virtual void BindParameters(HSTMT hstmt);

Parametry

hstmt
Uchwyt instrukcji ODBC, dla którego chcesz powiązać parametry.

Uwagi

Takie podejście jest przydatne, gdy nie potrzebujesz zestawu wyników z procedury składowanej.

W zastąpieniu wywołaj SQLBindParameters i powiązane funkcje ODBC, aby powiązać parametry. Usługa MFC wywołuje przesłonięcia przed wywołaniem metody ExecuteSQL. Nie trzeba wywoływać metody SQLPrepare; ExecuteSQL wywołuje SQLExecDirect i niszczy hstmtelement , który jest używany tylko raz.

CDatabase::Cancel

Wywołaj tę funkcję składową, aby zażądać, aby źródło danych anulowało w toku operację asynchroniczną lub proces z drugiego wątku.

void Cancel();

Uwagi

Należy pamiętać, że klasy MFC ODBC nie używają już przetwarzania asynchronicznego; aby wykonać operację asynchroniczną, należy bezpośrednio wywołać funkcję SQLSetConnectOptioninterfejsu API ODBC . Aby uzyskać więcej informacji, zobacz Wykonywanie asynchroniczne.

CDatabase::CanTransact

Wywołaj tę funkcję składową, aby określić, czy baza danych zezwala na transakcje.

BOOL CanTransact() const;

Wartość zwracana

Niezerowe, jeśli zestawy rekordów używające tego CDatabase obiektu zezwalają na transakcje; w przeciwnym razie 0.

Uwagi

Aby uzyskać informacje o transakcjach, zobacz artykuł Transaction (ODBC).

CDatabase::CanUpdate

Wywołaj tę funkcję składową, aby określić, czy CDatabase obiekt zezwala na aktualizacje.

BOOL CanUpdate() const;

Wartość zwracana

Nonzero, jeśli CDatabase obiekt zezwala na aktualizacje; w przeciwnym razie 0, wskazując, że przekazano TRUE podczas bReadOnly otwierania CDatabase obiektu lub że samo źródło danych jest tylko do odczytu. Źródło danych jest tylko do odczytu, jeśli wywołanie funkcji SQLGetInfo interfejsu API ODBC dla SQL_DATASOURCE_READ_ONLY funkcji zwraca wartość y.

Uwagi

Nie wszystkie sterowniki obsługują aktualizacje.

CDatabase::CDatabase

CDatabase Tworzy obiekt.

CDatabase();

Uwagi

Po utworzeniu obiektu należy wywołać jego OpenEx funkcję lub Open składową, aby nawiązać połączenie z określonym źródłem danych.

Wygodne może być osadzanie CDatabase obiektu w klasie dokumentów.

Przykład

W tym przykładzie pokazano użycie CDatabase w klasie -pochodnej CDocument.

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

Wywołaj tę funkcję składową, jeśli chcesz odłączyć się od źródła danych.

virtual void Close();

Uwagi

Przed wywołaniem tej funkcji składowej CDatabase należy zamknąć wszystkie zestawy rekordów skojarzone z obiektem . Ponieważ Close obiekt nie zostanie zniszczony CDatabase , można go ponownie użyć, otwierając nowe połączenie z tym samym źródłem danych lub innym źródłem danych.

Wszystkie oczekujące AddNew lub Edit instrukcje zestawów rekordów używające bazy danych zostaną anulowane, a wszystkie oczekujące transakcje zostaną wycofane. Wszystkie zestawy rekordów zależne od CDatabase obiektu są pozostawione w stanie niezdefiniowanym.

Przykład

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

Wywołaj tę funkcję składową po zakończeniu transakcji.

BOOL CommitTrans();

Wartość zwracana

Nonzero, jeśli aktualizacje zostały pomyślnie zatwierdzone; w przeciwnym razie 0. W przypadku CommitTrans niepowodzenia stan źródła danych jest niezdefiniowany. Musisz sprawdzić dane, aby określić jego stan.

Uwagi

Transakcja składa się z serii wywołań do AddNewfunkcji , , DeleteEditi Update składowych obiektu, który rozpoczął się od wywołania funkcji składowejBeginTrans.CRecordset CommitTrans zatwierdza transakcję. Domyślnie aktualizacje są zatwierdzane natychmiast; wywołanie BeginTrans powoduje opóźnienie zobowiązania aktualizacji do momentu CommitTrans wywołania.

Dopóki nie wywołasz CommitTrans wywołania transakcji, możesz wywołać Rollback funkcję składową, aby przerwać transakcję i pozostawić źródło danych w jego oryginalnym stanie. Aby rozpocząć nową transakcję, wywołaj BeginTrans ponownie.

Aby uzyskać więcej informacji na temat transakcji, zobacz artykuł Transaction (ODBC).

Przykład

Zobacz artykuł Transaction: Performing a Transaction in a Recordset (ODBC) (Transakcja: wykonywanie transakcji w zestawie rekordów (ODBC).

CDatabase::ExecuteSQL

Wywołaj tę funkcję składową, gdy musisz wykonać polecenie SQL bezpośrednio.

void ExecuteSQL(LPCTSTR lpszSQL);

Parametry

lpszSQL
Wskaźnik do ciągu zakończonego wartości null zawierającego prawidłowe polecenie SQL do wykonania. Możesz przekazać element CString.

Uwagi

Utwórz polecenie jako ciąg zakończony o wartości null. ExecuteSQL nie zwraca rekordów danych. Jeśli chcesz użyć rekordów, zamiast tego użyj obiektu zestawu rekordów.

Większość poleceń dla źródła danych jest wystawiana za pośrednictwem obiektów zestawu rekordów, które obsługują polecenia wybierania danych, wstawiania nowych rekordów, usuwania rekordów i edytowania rekordów. Jednak nie wszystkie funkcje ODBC są bezpośrednio obsługiwane przez klasy baz danych, więc czasami może być konieczne wykonanie bezpośredniego wywołania SQL za pomocą ExecuteSQLpolecenia .

Przykład

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

Wywołaj tę funkcję składową, aby określić trwałość zakładek w obiekcie zestawu rekordów po niektórych operacjach.

DWORD GetBookmarkPersistence() const;

Wartość zwracana

Maska bitowa identyfikująca operacje, za pomocą których zakładki są utrwalane w obiekcie zestawu rekordów. Aby uzyskać szczegółowe informacje, zobacz Uwagi.

Uwagi

Jeśli na przykład wywołasz metodę CRecordset::GetBookmark , a następnie wywołasz CRecordset::Requerymetodę , zakładka uzyskana z GetBookmark może nie być już prawidłowa. Przed wywołaniem metody należy wywołać metodę GetBookmarkPersistenceCRecordset::SetBookmark.

W poniższej tabeli wymieniono wartości maski bitów, które można połączyć dla zwracanej wartości GetBookmarkPersistence.

Wartość maski bitów Trwałość zakładek
SQL_BP_CLOSE Zakładki są prawidłowe po Requery operacji.
SQL_BP_DELETE Zakładka dla wiersza jest prawidłowa po Delete operacji w tym wierszu.
SQL_BP_DROP Zakładki są prawidłowe po Close operacji.
SQL_BP_SCROLL Zakładki są prawidłowe po każdej Move operacji. To po prostu określa, czy zakładki są obsługiwane w zestawie rekordów, jak zwraca wartość .CRecordset::CanBookmark
SQL_BP_TRANSACTION Zakładki są prawidłowe po zatwierdzeniu lub wycofaniu transakcji.
SQL_BP_UPDATE Zakładka dla wiersza jest prawidłowa po Update operacji w tym wierszu.
SQL_BP_OTHER_HSTMT Zakładki skojarzone z jednym obiektem zestawu rekordów są prawidłowe w drugim zestawie rekordów.

Aby uzyskać więcej informacji na temat tej wartości zwracanej, zobacz funkcję SQLGetInfo interfejsu API ODBC w zestawie Windows SDK. Aby uzyskać więcej informacji na temat zakładek, zobacz artykuł Zestaw rekordów: zakładki i pozycje bezwzględne (ODBC).

CDatabase::GetConnect

Wywołaj tę funkcję składową, aby pobrać parametry połączenia używane podczas wywołania OpenEx metody lubOpen, które połączyły CDatabase obiekt ze źródłem danych.

const CString GetConnect() const;

Wartość zwracana

Element constCString zawierający parametry połączenia, jeśli OpenExOpen został wywołany; w przeciwnym razie pusty ciąg.

Uwagi

Zobacz CDatabase::Open opis sposobu tworzenia parametry połączenia.

CDatabase::GetCursorCommitBehavior

Wywołaj tę funkcję składową, aby określić, jak CommitTrans operacja wpływa na kursory na otwartych obiektach zestawu rekordów.

int GetCursorCommitBehavior() const;

Wartość zwracana

Wartość wskazująca wpływ transakcji na otwarte obiekty zestawu rekordów. Aby uzyskać szczegółowe informacje, zobacz Uwagi.

Uwagi

W poniższej tabeli wymieniono możliwe wartości zwracane dla GetCursorCommitBehavior i odpowiadający im wpływ na otwarty zestaw rekordów.

Wartość zwracana Wpływ na CRecordset obiekty
SQL_CB_CLOSE Wywołaj połączenie CRecordset::Requery bezpośrednio po zatwierdzeniu transakcji.
SQL_CB_DELETE Wywołaj połączenie CRecordset::Close bezpośrednio po zatwierdzeniu transakcji.
SQL_CB_PRESERVE Kontynuuj normalnie CRecordset operacje.

Aby uzyskać więcej informacji na temat tej wartości zwracanej, zobacz funkcję SQLGetInfo interfejsu API ODBC w zestawie Windows SDK. Aby uzyskać więcej informacji na temat transakcji, zobacz artykuł Transaction (ODBC).

CDatabase::GetCursorRollbackBehavior

Wywołaj tę funkcję składową, aby określić, jak Rollback operacja wpływa na kursory na otwartych obiektach zestawu rekordów.

int GetCursorRollbackBehavior() const;

Wartość zwracana

Wartość wskazująca wpływ transakcji na otwarte obiekty zestawu rekordów. Aby uzyskać szczegółowe informacje, zobacz Uwagi.

Uwagi

W poniższej tabeli wymieniono możliwe wartości zwracane dla GetCursorRollbackBehavior i odpowiadający im wpływ na otwarty zestaw rekordów.

Wartość zwracana Wpływ na CRecordset obiekty
SQL_CB_CLOSE Wywołaj połączenie CRecordset::Requery natychmiast po wycofaniu transakcji.
SQL_CB_DELETE Wywołaj połączenie CRecordset::Close natychmiast po wycofaniu transakcji.
SQL_CB_PRESERVE Kontynuuj normalnie CRecordset operacje.

Aby uzyskać więcej informacji na temat tej wartości zwracanej, zobacz funkcję SQLGetInfo interfejsu API ODBC w zestawie Windows SDK. Aby uzyskać więcej informacji na temat transakcji, zobacz artykuł Transaction (ODBC).

CDatabase::GetDatabaseName

Wywołaj tę funkcję składową, aby pobrać nazwę aktualnie połączonej bazy danych (pod warunkiem, że źródło danych definiuje nazwany obiekt o nazwie "database").

CString GetDatabaseName() const;

Wartość zwracana

Wartość zawierająca CString nazwę bazy danych, jeśli się powiedzie; w przeciwnym razie jest to pusty CStringelement .

Uwagi

Nie jest to takie samo, jak nazwa źródła danych (DSN) określona w wywołaniu OpenEx lub Open . To, co GetDatabaseName zwraca, zależy od ODBC. Ogólnie rzecz biorąc, baza danych jest kolekcją tabel. Jeśli ta jednostka ma nazwę, GetDatabaseName zwraca ją.

Możesz na przykład wyświetlić tę nazwę w nagłówku. Jeśli podczas pobierania nazwy z ODBC wystąpi błąd, GetDatabaseName zwraca pusty CStringelement .

CDatabase::IsOpen

Wywołaj tę funkcję składową, aby określić, czy CDatabase obiekt jest obecnie połączony ze źródłem danych.

BOOL IsOpen() const;

Wartość zwracana

Nonzero, jeśli CDatabase obiekt jest obecnie połączony; w przeciwnym razie 0.

CDatabase::m_hdbc

Zawiera publiczne dojście do połączenia ze źródłem danych ODBC — "uchwyt połączenia".

Uwagi

Zwykle nie trzeba bezpośrednio uzyskiwać dostępu do tej zmiennej składowej. Zamiast tego platforma przydziela dojście podczas wywoływania OpenEx metody lub Open. Struktura cofa przydział uchwytu podczas wywoływania delete operatora obiektu CDatabase . Należy pamiętać, że funkcja składowa Close nie cofa przydziału uchwytu.

Jednak w pewnych okolicznościach może być konieczne użycie uchwytu bezpośrednio. Jeśli na przykład musisz wywołać funkcje interfejsu API ODBC bezpośrednio, a nie za pośrednictwem klasy CDatabase, może być konieczne podanie dojścia połączenia jako parametru. Zapoznaj się z poniższym przykładem kodu.

Przykład

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

Struktura wywołuje tę funkcję składową podczas bezpośredniego wykonywania instrukcji SQL z funkcją składową ExecuteSQL .

virtual void OnSetOptions(HSTMT hstmt);

Parametry

hstmt
Uchwyt instrukcji ODBC, dla którego są ustawiane opcje.

Uwagi

CRecordset::OnSetOptions Wywołuje również tę funkcję składową.

OnSetOptions Ustawia wartość limitu czasu logowania. Jeśli były poprzednie wywołania funkcji składowej SetQueryTimeout i, OnSetOptions odzwierciedla bieżące wartości; w przeciwnym razie ustawia wartości domyślne.

Uwaga

Przed MFC 4.2 OnSetOptions ustaw również tryb przetwarzania na snyroniczny lub asynchroniczny. Począwszy od MFC 4.2, wszystkie operacje są synchroniczne. Aby wykonać operację asynchroniczną, należy wykonać bezpośrednie wywołanie funkcji SQLSetPosinterfejsu API ODBC .

Nie trzeba przesłonić OnSetOptions , aby zmienić wartość limitu czasu. Zamiast tego, aby dostosować wartość limitu czasu zapytania, wywołaj SetQueryTimeout przed utworzeniem zestawu rekordów; OnSetOptions użyje nowej wartości. Ustawione wartości dotyczą kolejnych operacji we wszystkich zestawach rekordów lub bezpośrednich wywołaniach SQL.

Zastąpij OnSetOptions , jeśli chcesz ustawić dodatkowe opcje. Przesłonięcia powinny wywołać klasę OnSetOptions bazową przed wywołaniem funkcji SQLSetStmtOptioninterfejsu API ODBC lub po jej wywołaniu . Postępuj zgodnie z metodą pokazaną w domyślnej implementacji platformy OnSetOptions.

CDatabase::Open

Wywołaj tę funkcję składową, aby zainicjować nowo skonstruowany CDatabase obiekt.

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

Parametry

lpszDSN
Określa nazwę źródła danych — nazwę zarejestrowaną w odBC za pośrednictwem programu odBC Administracja istratora. Jeśli wartość DSN jest określona w ( lpszConnect w postaci "DSN=<data-source>"), nie może być ponownie określona w pliku lpszDSN. W tym przypadku lpszDSN wartość powinna mieć wartość NULL. W przeciwnym razie możesz przekazać NULL , jeśli chcesz przedstawić użytkownikowi okno dialogowe Źródło danych, w którym użytkownik może wybrać źródło danych. Aby uzyskać więcej informacji, zobacz Uwagi.

bExclusive
Nieobsługiwane w tej wersji biblioteki klas. Obecnie asercji kończy się niepowodzeniem, jeśli ten parametr to TRUE. Źródło danych jest zawsze otwierane jako udostępnione (nie wykluczające).

bReadOnly
TRUE jeśli zamierzasz nawiązać połączenie tylko do odczytu i zakazać aktualizacji źródła danych. Wszystkie zależne zestawy rekordów dziedziczą ten atrybut. Wartość domyślna to FALSE.

lpszConnect
Określa parametry połączenia. Parametry połączenia łączy informacje, w tym nazwę źródła danych, identyfikator użytkownika prawidłowy w źródle danych, ciąg uwierzytelniania użytkownika (hasło, jeśli źródło danych wymaga) i inne informacje. Cały parametry połączenia musi być poprzedzony ciągiem "ODBC;" (wielkie lub małe litery). Parametry "ODBC;" służą do wskazywania, że połączenie jest ze źródłem danych ODBC. Jest to przeznaczone do zapewnienia zgodności w górę, gdy przyszłe wersje biblioteki klas mogą obsługiwać źródła danych inne niż ODBC.

bUseCursorLib
TRUE jeśli chcesz załadować bibliotekę DLL biblioteki kursorów ODBC. Biblioteka kursorów maskuje niektóre funkcje podstawowego sterownika ODBC, skutecznie zapobiegając używaniu dynasetów (jeśli sterownik je obsługuje). Jedynymi kursorami obsługiwanymi w przypadku załadowania biblioteki kursorów są migawki statyczne i kursory tylko do przodu. Wartość domyślna to TRUE. Jeśli planujesz utworzyć obiekt zestawu rekordów bezpośrednio bez CRecordset wyprowadzania z niego, nie należy ładować biblioteki kursorów.

Wartość zwracana

Niezero, jeśli połączenie zostało pomyślnie nawiązane; w przeciwnym razie 0, jeśli użytkownik wybierze przycisk Anuluj po wyświetleniu okna dialogowego z prośbą o więcej informacji o połączeniu. We wszystkich innych przypadkach struktura zgłasza wyjątek.

Uwagi

Obiekt bazy danych musi zostać zainicjowany, zanim będzie można go użyć do konstruowania obiektu zestawu rekordów.

Uwaga

Wywoływanie funkcji składowej OpenEx jest preferowanym sposobem nawiązywania połączenia ze źródłem danych i inicjowania obiektu bazy danych.

Jeśli parametry w wywołaniu Open nie zawierają wystarczającej ilości informacji, aby nawiązać połączenie, sterownik ODBC otworzy okno dialogowe w celu uzyskania niezbędnych informacji od użytkownika. Wywołanie Openmetody , parametry połączenia lpszConnectjest przechowywane prywatnie w CDatabase obiekcie i jest dostępne przez wywołanie funkcji składowejGetConnect.

Jeśli chcesz, możesz otworzyć własne okno dialogowe przed wywołaniemOpen, aby uzyskać informacje od użytkownika, takie jak hasło, a następnie dodać te informacje do parametry połączenia przekazać do Open. Możesz też zapisać parametry połączenia przekazać, aby można było ponownie użyć go przy następnym wywołaniu Open aplikacji na CDatabase obiekcie.

Można również użyć parametry połączenia dla wielu poziomów autoryzacji logowania (każdy dla innego CDatabase obiektu) lub przekazać inne informacje specyficzne dla źródła danych. Aby uzyskać więcej informacji na temat parametry połączenia, zobacz Rozdział 5 w zestawie Windows SDK.

Istnieje możliwość przekroczenia limitu czasu połączenia, jeśli na przykład host DBMS jest niedostępny. Jeśli próba połączenia zakończy się niepowodzeniem, Open zgłasza błąd CDBException.

Przykład

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

Wywołaj tę funkcję składową, aby zainicjować nowo skonstruowany CDatabase obiekt.

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

Parametry

lpszConnectString
Określa parametry połączenia ODBC. Obejmuje to nazwę źródła danych oraz inne opcjonalne informacje, takie jak identyfikator użytkownika i hasło. Na przykład "DSN=SQLServer_Source;UID=SA;PWD=abc123" jest to możliwe parametry połączenia. Należy pamiętać, że jeśli przekażesz NULL polecenie lpszConnectString, w oknie dialogowym Źródło danych zostanie wyświetlone monit o wybranie źródła danych.

dwOptions
Maska bitów określająca kombinację następujących wartości. Wartość domyślna to 0, co oznacza, że baza danych zostanie otwarta jako udostępniona z dostępem do zapisu, biblioteka DLL biblioteki kursorów ODBC nie zostanie załadowana, a okno dialogowe połączenie ODBC będzie wyświetlane tylko wtedy, gdy nie ma wystarczającej ilości informacji, aby nawiązać połączenie.

  • CDatabase::openExclusive Nieobsługiwane w tej wersji biblioteki klas. Źródło danych jest zawsze otwierane jako udostępnione (nie wykluczające). Obecnie asercji nie powiedzie się, jeśli określisz tę opcję.

  • CDatabase::openReadOnly Otwórz źródło danych jako tylko do odczytu.

  • CDatabase::useCursorLib Załaduj bibliotekę DLL biblioteki kursorów ODBC. Biblioteka kursorów maskuje niektóre funkcje podstawowego sterownika ODBC, skutecznie zapobiegając używaniu dynasetów (jeśli sterownik je obsługuje). Jedynymi kursorami obsługiwanymi w przypadku załadowania biblioteki kursorów są migawki statyczne i kursory tylko do przodu. Jeśli planujesz utworzyć obiekt zestawu rekordów bezpośrednio bez CRecordset wyprowadzania z niego, nie należy ładować biblioteki kursorów.

  • CDatabase::noOdbcDialog Nie wyświetlaj okna dialogowego połączenia ODBC, niezależnie od tego, czy podano wystarczające informacje o połączeniu.

  • CDatabase::forceOdbcDialog Zawsze wyświetla okno dialogowe połączenia ODBC.

Wartość zwracana

Niezero, jeśli połączenie zostało pomyślnie nawiązane; w przeciwnym razie 0, jeśli użytkownik wybierze przycisk Anuluj po wyświetleniu okna dialogowego z prośbą o więcej informacji o połączeniu. We wszystkich innych przypadkach struktura zgłasza wyjątek.

Uwagi

Obiekt bazy danych musi zostać zainicjowany, zanim będzie można go użyć do konstruowania obiektu zestawu rekordów.

lpszConnectString Jeśli parametr w wywołaniu OpenEx nie zawiera wystarczającej ilości informacji, aby nawiązać połączenie, sterownik ODBC otwiera okno dialogowe w celu uzyskania niezbędnych informacji od użytkownika, pod warunkiem, że nie ustawiono CDatabase::noOdbcDialog ani CDatabase::forceOdbcDialog w parametrze dwOptions . Wywołanie OpenExmetody , parametry połączenia lpszConnectStringjest przechowywane prywatnie w CDatabase obiekcie i jest dostępne przez wywołanie funkcji składowejGetConnect.

Jeśli chcesz, możesz otworzyć własne okno dialogowe przed wywołaniemOpenEx, aby uzyskać informacje od użytkownika, takie jak hasło, a następnie dodać te informacje do parametry połączenia przekazać do OpenEx. Możesz też zapisać parametry połączenia przekazać, aby można było ponownie użyć go przy następnym wywołaniu OpenEx aplikacji na CDatabase obiekcie.

Można również użyć parametry połączenia dla wielu poziomów autoryzacji logowania (każdy dla innego CDatabase obiektu) lub przekazać inne informacje specyficzne dla źródła danych. Aby uzyskać więcej informacji na temat parametry połączenia, zobacz Rozdział 6 w dokumentacji programisty ODBC.

Istnieje możliwość przekroczenia limitu czasu połączenia, jeśli na przykład host DBMS jest niedostępny. Jeśli próba połączenia zakończy się niepowodzeniem, OpenEx zgłasza błąd CDBException.

Przykład

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

Wywołaj tę funkcję składową, aby odwrócić zmiany wprowadzone podczas transakcji.

BOOL Rollback();

Wartość zwracana

Niezero, jeśli transakcja została pomyślnie odwrócona; w przeciwnym razie 0. Jeśli wywołanie zakończy się niepowodzeniem Rollback , źródło danych i stany transakcji są niezdefiniowane. Jeśli Rollback zwraca wartość 0, musisz sprawdzić źródło danych, aby określić jego stan.

Uwagi

Wszystkie CRecordsetAddNewwywołania , , DeleteEditi Update wykonywane od ostatniego BeginTrans są przywracane do stanu, który istniał w momencie tego wywołania.

Po wywołaniu metody Rollback, transakcja się skończyła i musisz wywołać BeginTrans ponownie inną transakcję. Rekord, który był bieżący przed wywołaniem BeginTrans , ponownie staje się bieżącym rekordem po Rollback.

Po wycofaniu rekord, który był obecny przed wycofaniem pozostaje bieżący. Aby uzyskać szczegółowe informacje na temat stanu zestawu rekordów i źródła danych po wycofaniu, zobacz artykuł Transaction (ODBC).

Przykład

Zobacz artykuł Transaction: Performing a Transaction in a Recordset (ODBC) (Transakcja: wykonywanie transakcji w zestawie rekordów (ODBC).

CDatabase::SetLoginTimeout

Wywołaj tę funkcję składową — przed wywołaniem OpenEx metody lub Open — aby zastąpić domyślną dozwoloną liczbę sekund przed przekroczeniem limitu czasu próby nawiązania połączenia ze źródłem danych.

void SetLoginTimeout(DWORD dwSeconds);

Parametry

dwSeconds
Liczba sekund, na które należy zezwolić przed upływem limitu czasu próby połączenia.

Uwagi

Próba połączenia może upłynął limit czasu, jeśli na przykład usługa DBMS nie jest dostępna. Wywołaj metodę SetLoginTimeout po utworzeniu niezainicjowanego CDatabase obiektu, ale przed wywołaniem OpenEx metody lub Open.

Wartość domyślna limitu czasu logowania wynosi 15 sekund. Nie wszystkie źródła danych obsługują możliwość określenia wartości limitu czasu logowania. Jeśli źródło danych nie obsługuje limitu czasu, otrzymujesz dane wyjściowe śledzenia, ale nie wyjątek. Wartość 0 oznacza "nieskończoność".

CDatabase::SetQueryTimeout

Wywołaj tę funkcję składową, aby zastąpić domyślną liczbę sekund, która ma być dozwolona przed upływem limitu czasu kolejnych operacji w połączonym źródle danych.

void SetQueryTimeout(DWORD dwSeconds);

Parametry

dwSeconds
Liczba sekund, na które należy zezwolić przed upływem limitu czasu próby zapytania.

Uwagi

Operacja może upłynął limit czasu z powodu problemów z dostępem do sieci, nadmiernego czasu przetwarzania zapytań itd. Wywołaj SetQueryTimeout przed otwarciem zestawu rekordów lub przed wywołaniem funkcji zestawu rekordów AddNewUpdate lub Delete składowych, jeśli chcesz zmienić wartość limitu czasu zapytania. To ustawienie wpływa na wszystkie kolejne Open, , UpdateAddNewi Delete wywołuje wszystkie zestawy rekordów skojarzone z tym CDatabase obiektem. Zmiana wartości limitu czasu zapytania dla zestawu rekordów po otwarciu nie zmienia wartości zestawu rekordów. Na przykład kolejne Move operacje nie używają nowej wartości.

Wartość domyślna limitów czasu zapytania wynosi 15 sekund. Nie wszystkie źródła danych obsługują możliwość ustawiania wartości limitu czasu zapytania. Jeśli ustawisz wartość limitu czasu zapytania 0, nie wystąpi limit czasu; komunikacja ze źródłem danych może przestać odpowiadać. To zachowanie może być przydatne podczas programowania. Jeśli źródło danych nie obsługuje limitu czasu, otrzymujesz dane wyjściowe śledzenia, ale nie wyjątek.

Zobacz też

CObject Klasa
Wykres hierarchii
CRecordset Klasa