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
Elementy członkowskie
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 AddNew klasy CRecordset , Edit Delete , 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 , Edit i Delete wywołań. |
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
CDatabase::m_hdbc |
Otwórz dojście połączenia łączności z bazą danych (ODBC) do źródła 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 DaO (Data Access Objects), a nie z klasami Open Database Connectivity (ODBC), użyj klasy CDaoDatabase
. Aby uzyskać więcej informacji, zobacz artykuł Omówienie: programowanie bazy danych.
Aby użyć CDatabase
metody , 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 CDatabase
programu , zobacz artykuły Źródło danych (ODBC) i Omówienie: Programowanie bazy danych.
Hierarchia dziedziczenia
CDatabase
Wymagania
Nagłówek: 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
, Delete
i 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 hstmt
element , 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ę SQLSetConnectOption
interfejsu 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 AddNew
funkcji , , Delete
Edit
i 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ą ExecuteSQL
polecenia .
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::Requery
metodę , zakładka uzyskana z GetBookmark
może nie być już prawidłowa. Przed wywołaniem metody należy wywołać metodę GetBookmarkPersistence
CRecordset::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 const
CString
zawierający parametry połączenia, jeśli OpenEx
Open
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 CString
element .
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 CString
element .
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 SQLSetPos
interfejsu 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 SQLSetStmtOption
interfejsu 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 administratora ODBC. 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. Domyślna wartość 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. Domyślna wartość 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 Open
metody , parametry połączenia lpszConnect
jest 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 bezCRecordset
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 OpenEx
metody , parametry połączenia lpszConnectString
jest 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 CRecordset
AddNew
wywołania , , Delete
Edit
i 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 AddNew
Update
lub Delete
składowych, jeśli chcesz zmienić wartość limitu czasu zapytania. To ustawienie wpływa na wszystkie kolejne Open
, , Update
AddNew
i 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.