Bagikan melalui


CDatabase Kelas

Mewakili koneksi ke sumber data, tempat Anda dapat beroperasi pada sumber data.

Sintaks

class CDatabase : public CObject

Anggota

Konstruktor Publik

Nama Deskripsi
CDatabase::CDatabase Membuat CDatabase objek. Anda harus menginisialisasi objek dengan memanggil OpenEx atau Open.

Metode Publik

Nama Deskripsi
CDatabase::BeginTrans Memulai "transaksi" — serangkaian panggilan yang dapat dibalik ke AddNewfungsi kelas CRecordset , , DeleteEdit, dan Update anggota — pada sumber data yang terhubung. Sumber data harus mendukung transaksi agar BeginTrans memiliki efek apa pun.
CDatabase::BindParameters Memungkinkan Anda untuk mengikat parameter sebelum memanggil CDatabase::ExecuteSQL.
CDatabase::Cancel Membatalkan operasi asinkron atau proses dari utas kedua.
CDatabase::CanTransact Mengembalikan nonzero jika sumber data mendukung transaksi.
CDatabase::CanUpdate Mengembalikan nonzero jika objek dapat diperbarui CDatabase (bukan baca-saja).
CDatabase::Close Menutup koneksi sumber data.
CDatabase::CommitTrans Menyelesaikan transaksi yang dimulai oleh BeginTrans. Perintah dalam transaksi yang mengubah sumber data dilakukan.
CDatabase::ExecuteSQL Menjalankan pernyataan SQL. Tidak ada rekaman data yang dikembalikan.
CDatabase::GetBookmarkPersistence Mengidentifikasi operasi di mana marka buku bertahan pada objek recordset.
CDatabase::GetConnect Mengembalikan string koneksi ODBC yang digunakan untuk menyambungkan CDatabase objek ke sumber data.
CDatabase::GetCursorCommitBehavior Mengidentifikasi efek melakukan transaksi pada objek set rekaman terbuka.
CDatabase::GetCursorRollbackBehavior Mengidentifikasi efek menggulung balik transaksi pada objek recordset terbuka.
CDatabase::GetDatabaseName Mengembalikan nama database yang saat ini digunakan.
CDatabase::IsOpen Mengembalikan bukan nol jika CDatabase objek saat ini tersambung ke sumber data.
CDatabase::OnSetOptions Dipanggil oleh kerangka kerja untuk mengatur opsi koneksi standar. Implementasi default menetapkan nilai batas waktu kueri. Anda dapat menetapkan opsi ini sebelumnya dengan memanggil SetQueryTimeout.
CDatabase::Open Membuat koneksi ke sumber data (melalui driver ODBC).
CDatabase::OpenEx Membuat koneksi ke sumber data (melalui driver ODBC).
CDatabase::Rollback Membalikkan perubahan yang dilakukan selama transaksi saat ini. Sumber data kembali ke status sebelumnya, seperti yang didefinisikan pada BeginTrans panggilan, tidak diubah.
CDatabase::SetLoginTimeout Mengatur jumlah detik setelah upaya koneksi sumber data akan kehabisan waktu.
CDatabase::SetQueryTimeout Mengatur jumlah detik setelah operasi kueri database akan kehabisan waktu. Mempengaruhi semua himpunan Openrekaman berikutnya, , AddNew, Editdan Delete panggilan.

Anggota Data Publik

Nama Deskripsi
CDatabase::m_hdbc Handel koneksi Open Database Connectivity (ODBC) ke sumber data. Ketik HDBC.

Keterangan

Sumber data adalah instans data tertentu yang dihosting oleh beberapa sistem manajemen database (DBMS). Contohnya termasuk Microsoft SQL Server, Microsoft Access, Borland dBASE, dan xBASE. Anda dapat memiliki satu atau beberapa CDatabase objek aktif pada satu waktu di aplikasi Anda.

Catatan

Jika Anda bekerja dengan kelas Objek Akses Data (DAO) daripada kelas Open Database Connectivity (ODBC), gunakan kelas CDaoDatabase sebagai gantinya. Untuk informasi selengkapnya, lihat artikel Gambaran Umum: Pemrograman Database.

Untuk menggunakan CDatabase, buat CDatabase objek dan panggil fungsi anggotanya OpenEx . Ini membuka koneksi. Saat Anda kemudian membuat CRecordset objek untuk beroperasi pada sumber data yang terhubung, teruskan konstruktor recordset penunjuk ke objek Anda CDatabase . Setelah Anda selesai menggunakan koneksi, panggil Close fungsi anggota dan hancurkan CDatabase objek. Close menutup kumpulan rekaman apa pun yang belum Anda tutup sebelumnya.

Untuk informasi selengkapnya tentang CDatabase, lihat artikel Sumber Data (ODBC) dan Gambaran Umum: Pemrograman Database.

Hierarki Warisan

CObject

CDatabase

Persyaratan

Header: afxdb.h

CDatabase::BeginTrans

Panggil fungsi anggota ini untuk memulai transaksi dengan sumber data yang terhubung.

BOOL BeginTrans();

Tampilkan Nilai

Bukan nol jika panggilan berhasil dan perubahan hanya dilakukan secara manual; jika tidak, 0.

Keterangan

Transaksi terdiri dari satu atau beberapa panggilan ke AddNewfungsi CRecordset anggota objek , Edit, Delete, dan Update . Sebelum memulai transaksi, CDatabase objek harus sudah tersambung ke sumber data dengan memanggil fungsi atau Open anggotanyaOpenEx. Untuk mengakhiri transaksi, panggil CommitTrans untuk menerima semua perubahan pada sumber data (dan melaksanakannya) atau memanggil Rollback untuk membatalkan seluruh transaksi. Panggil BeginTrans setelah Anda membuka kumpulan rekaman apa pun yang terlibat dalam transaksi dan sedekat mungkin dengan operasi pembaruan aktual.

Perhatian

Bergantung pada driver ODBC Anda, membuka kumpulan rekaman sebelum memanggil BeginTrans dapat menyebabkan masalah saat memanggil Rollback. Anda harus memeriksa driver tertentu yang Anda gunakan. Misalnya, saat menggunakan driver Microsoft Access yang disertakan dalam Microsoft ODBC Desktop Driver Pack 3.0, Anda harus memperhitungkan persyaratan mesin database Jet bahwa Anda tidak boleh memulai transaksi pada database apa pun yang memiliki kursor terbuka. Di kelas database MFC, kursor terbuka berarti objek terbuka CRecordset . Untuk informasi selengkapnya, lihat Catatan Teknis 68.

BeginTrans juga dapat mengunci rekaman data di server, tergantung pada konkurensi yang diminta dan kemampuan sumber data. Untuk informasi tentang mengunci data, lihat artikel Recordset: Mengunci Rekaman (ODBC).

Transaksi yang ditentukan pengguna dijelaskan dalam artikel Transaksi (ODBC).

BeginTrans menetapkan status di mana urutan transaksi dapat digulung balik (terbalik). Untuk menetapkan status baru untuk pembatalan, lakukan transaksi saat ini, lalu panggil BeginTrans lagi.

Perhatian

Memanggil BeginTrans lagi tanpa memanggil CommitTrans atau Rollback adalah kesalahan.

CanTransact Panggil fungsi anggota untuk menentukan apakah driver Anda mendukung transaksi untuk database tertentu. Anda juga harus memanggil GetCursorCommitBehavior dan GetCursorRollbackBehavior menentukan dukungan untuk pelestarian kursor.

Untuk informasi selengkapnya tentang transaksi, lihat artikel Transaksi (ODBC).

Contoh

Lihat artikel Transaksi: Melakukan Transaksi dalam Recordset (ODBC).

CDatabase::BindParameters

Ambil alih BindParameters saat Anda perlu mengikat parameter sebelum memanggil CDatabase::ExecuteSQL.

virtual void BindParameters(HSTMT hstmt);

Parameter

hstmt
Handel pernyataan ODBC yang ingin Anda ikat parameternya.

Keterangan

Pendekatan ini berguna ketika Anda tidak memerlukan hasil yang ditetapkan dari prosedur tersimpan.

Dalam penimpaan Anda, panggil SQLBindParameters dan fungsi ODBC terkait untuk mengikat parameter. MFC memanggil penimpaan Anda sebelum panggilan Anda ke ExecuteSQL. Anda tidak perlu memanggil SQLPrepare; ExecuteSQL memanggil SQLExecDirect dan menghancurkan hstmt, yang hanya digunakan sekali.

CDatabase::Cancel

Panggil fungsi anggota ini untuk meminta agar sumber data membatalkan operasi asinkron yang sedang berlangsung atau proses dari utas kedua.

void Cancel();

Keterangan

Perhatikan bahwa kelas ODBC MFC tidak lagi menggunakan pemrosesan asinkron; untuk melakukan operasi asinkron, Anda harus langsung memanggil fungsi SQLSetConnectOptionODBC API . Untuk informasi selengkapnya, lihat Eksekusi Asinkron.

CDatabase::CanTransact

Panggil fungsi anggota ini untuk menentukan apakah database mengizinkan transaksi.

BOOL CanTransact() const;

Tampilkan Nilai

Nonzero jika recordset menggunakan objek ini CDatabase memungkinkan transaksi; jika tidak, 0.

Keterangan

Untuk informasi tentang transaksi, lihat artikel Transaksi (ODBC).

CDatabase::CanUpdate

Panggil fungsi anggota ini untuk menentukan apakah objek mengizinkan CDatabase pembaruan.

BOOL CanUpdate() const;

Tampilkan Nilai

Nonzero jika CDatabase objek memungkinkan pembaruan; jika tidak, 0, menunjukkan bahwa Anda meneruskan TRUE bReadOnly saat Anda membuka CDatabase objek atau bahwa sumber data itu sendiri bersifat baca-saja. Sumber data bersifat baca-saja jika panggilan ke fungsi SQLGetInfo ODBC API untuk SQL_DATASOURCE_READ_ONLY mengembalikan y.

Keterangan

Tidak semua driver mendukung pembaruan.

CDatabase::CDatabase

Membuat CDatabase objek.

CDatabase();

Keterangan

Setelah membuat objek, Anda harus memanggil fungsi atau Open anggotanya OpenEx untuk membuat koneksi ke sumber data tertentu.

Anda mungkin merasa nyaman untuk menyematkan CDatabase objek di kelas dokumen Anda.

Contoh

Contoh ini mengilustrasikan penggunaan CDatabase di CDocumentkelas -turunan.

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

Panggil fungsi anggota ini jika Anda ingin memutuskan sambungan dari sumber data.

virtual void Close();

Keterangan

Anda harus menutup kumpulan rekaman apa pun yang terkait dengan CDatabase objek sebelum Anda memanggil fungsi anggota ini. Karena Close tidak menghancurkan CDatabase objek, Anda dapat menggunakan kembali objek dengan membuka koneksi baru ke sumber data yang sama atau sumber data yang berbeda.

Semua pernyataan rekaman yang tertunda AddNew atau Edit yang menggunakan database dibatalkan, dan semua transaksi yang tertunda digulung balik. Setiap kumpulan rekaman yang bergantung pada CDatabase objek dibiarkan dalam status tidak terdefinisi.

Contoh

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

Panggil fungsi anggota ini setelah menyelesaikan transaksi.

BOOL CommitTrans();

Tampilkan Nilai

Bukan nol jika pembaruan berhasil diterapkan; jika tidak, 0. Jika CommitTrans gagal, status sumber data tidak terdefinisi. Anda harus memeriksa data untuk menentukan statusnya.

Keterangan

Transaksi terdiri dari serangkaian panggilan ke AddNewfungsi anggota , , DeleteEdit, dan Update dari CRecordset objek yang dimulai dengan panggilan ke BeginTrans fungsi anggota. CommitTrans melakukan transaksi. Secara default, pembaruan dilakukan segera; BeginTrans panggilan menyebabkan komitmen pembaruan tertunda hingga CommitTrans dipanggil.

Hingga Anda memanggil CommitTrans untuk mengakhiri transaksi, Anda dapat memanggil Rollback fungsi anggota untuk membatalkan transaksi dan meninggalkan sumber data dalam keadaan aslinya. Untuk memulai transaksi baru, hubungi BeginTrans lagi.

Untuk informasi selengkapnya tentang transaksi, lihat artikel Transaksi (ODBC).

Contoh

Lihat artikel Transaksi: Melakukan Transaksi dalam Recordset (ODBC).

CDatabase::ExecuteSQL

Panggil fungsi anggota ini saat Anda perlu menjalankan perintah SQL secara langsung.

void ExecuteSQL(LPCTSTR lpszSQL);

Parameter

lpszSQL
Penunjuk ke string null-terminated yang berisi perintah SQL yang valid untuk dijalankan. Anda dapat meneruskan CString.

Keterangan

Buat perintah sebagai string yang dihentikan null. ExecuteSQL tidak mengembalikan rekaman data. Jika Anda ingin beroperasi pada rekaman, gunakan objek recordset sebagai gantinya.

Sebagian besar perintah Anda untuk sumber data dikeluarkan melalui objek recordset, yang mendukung perintah untuk memilih data, menyisipkan rekaman baru, menghapus rekaman, dan mengedit rekaman. Namun, tidak semua fungsionalitas ODBC didukung langsung oleh kelas database, jadi Anda mungkin terkadang perlu melakukan panggilan SQL langsung dengan ExecuteSQL.

Contoh

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

Panggil fungsi anggota ini untuk menentukan persistensi marka buku pada objek recordset setelah operasi tertentu.

DWORD GetBookmarkPersistence() const;

Tampilkan Nilai

Bitmask yang mengidentifikasi operasi tempat bookmark bertahan pada objek recordset. Untuk detailnya, lihat Keterangan.

Keterangan

Misalnya, jika Anda memanggil CRecordset::GetBookmark lalu memanggil CRecordset::Requery, marka buku yang diperoleh GetBookmark mungkin tidak lagi valid. Anda harus menelepon GetBookmarkPersistence sebelum memanggil CRecordset::SetBookmark.

Tabel berikut mencantumkan nilai bitmask yang dapat digabungkan untuk nilai GetBookmarkPersistencepengembalian .

Nilai bitmask Persistensi marka buku
SQL_BP_CLOSE Marka buku valid setelah Requery operasi.
SQL_BP_DELETE Marka buku untuk baris valid setelah Delete operasi pada baris tersebut.
SQL_BP_DROP Marka buku valid setelah Close operasi.
SQL_BP_SCROLL Marka buku valid setelah operasi apa pun Move . Ini hanya mengidentifikasi apakah marka buku didukung pada recordset, seperti yang dikembalikan oleh CRecordset::CanBookmark.
SQL_BP_TRANSACTION Marka buku valid setelah transaksi dilakukan atau digulung balik.
SQL_BP_UPDATE Marka buku untuk baris valid setelah Update operasi pada baris tersebut.
SQL_BP_OTHER_HSTMT Bookmark yang terkait dengan satu objek recordset valid pada recordset kedua.

Untuk informasi selengkapnya tentang nilai pengembalian ini, lihat fungsi SQLGetInfo ODBC API di Windows SDK. Untuk informasi selengkapnya tentang marka buku, lihat artikel Kumpulan Catatan: Marka Buku dan Posisi Absolut (ODBC).

CDatabase::GetConnect

Panggil fungsi anggota ini untuk mengambil string koneksi yang digunakan selama panggilan ke OpenEx atau Open yang menghubungkan objek ke CDatabase sumber data.

const CString GetConnect() const;

Tampilkan Nilai

yang constCString berisi string koneksi jika OpenEx atau Open telah dipanggil; jika tidak, string kosong.

Keterangan

Lihat CDatabase::Open untuk deskripsi tentang bagaimana string koneksi dibuat.

CDatabase::GetCursorCommitBehavior

Panggil fungsi anggota ini untuk menentukan bagaimana CommitTrans operasi memengaruhi kursor pada objek set rekaman terbuka.

int GetCursorCommitBehavior() const;

Tampilkan Nilai

Nilai yang menunjukkan efek transaksi pada objek recordset terbuka. Untuk detailnya, lihat Keterangan.

Keterangan

Tabel berikut mencantumkan kemungkinan nilai pengembalian untuk GetCursorCommitBehavior dan efek terkait pada kumpulan rekaman terbuka.

Nilai hasil Efek pada CRecordset objek
SQL_CB_CLOSE Hubungi CRecordset::Requery segera setelah penerapan transaksi.
SQL_CB_DELETE Hubungi CRecordset::Close segera setelah penerapan transaksi.
SQL_CB_PRESERVE Lanjutkan secara normal dengan CRecordset operasi.

Untuk informasi selengkapnya tentang nilai pengembalian ini, lihat fungsi SQLGetInfo ODBC API di Windows SDK. Untuk informasi selengkapnya tentang transaksi, lihat artikel Transaksi (ODBC).

CDatabase::GetCursorRollbackBehavior

Panggil fungsi anggota ini untuk menentukan bagaimana Rollback operasi memengaruhi kursor pada objek set rekaman terbuka.

int GetCursorRollbackBehavior() const;

Tampilkan Nilai

Nilai yang menunjukkan efek transaksi pada objek recordset terbuka. Untuk detailnya, lihat Keterangan.

Keterangan

Tabel berikut mencantumkan kemungkinan nilai pengembalian untuk GetCursorRollbackBehavior dan efek terkait pada kumpulan rekaman terbuka.

Nilai hasil Efek pada CRecordset objek
SQL_CB_CLOSE Hubungi CRecordset::Requery segera setelah pembatalan transaksi.
SQL_CB_DELETE Hubungi CRecordset::Close segera setelah pembatalan transaksi.
SQL_CB_PRESERVE Lanjutkan secara normal dengan CRecordset operasi.

Untuk informasi selengkapnya tentang nilai pengembalian ini, lihat fungsi SQLGetInfo ODBC API di Windows SDK. Untuk informasi selengkapnya tentang transaksi, lihat artikel Transaksi (ODBC).

CDatabase::GetDatabaseName

Panggil fungsi anggota ini untuk mengambil nama database yang saat ini tersambung (asalkan sumber data menentukan objek bernama yang disebut "database").

CString GetDatabaseName() const;

Tampilkan Nilai

yang CString berisi nama database jika berhasil; jika tidak, kosong CString.

Keterangan

Ini tidak sama dengan nama sumber data (DSN) yang ditentukan dalam OpenEx atau Open panggilan. Apa yang GetDatabaseName kembali tergantung pada ODBC. Secara umum, database adalah kumpulan tabel. Jika entitas ini memiliki nama, GetDatabaseName mengembalikannya.

Misalnya, Anda mungkin ingin menampilkan nama ini dalam judul. Jika terjadi kesalahan saat mengambil nama dari ODBC, GetDatabaseName mengembalikan kosong CString.

CDatabase::IsOpen

Panggil fungsi anggota ini untuk menentukan apakah CDatabase objek saat ini tersambung ke sumber data.

BOOL IsOpen() const;

Tampilkan Nilai

Bukan nol jika CDatabase objek saat ini tersambung; jika tidak, 0.

CDatabase::m_hdbc

Berisi handel publik ke koneksi sumber data ODBC — "handel koneksi."

Keterangan

Biasanya, Anda tidak perlu mengakses variabel anggota ini secara langsung. Sebaliknya, kerangka kerja mengalokasikan handel saat Anda memanggil OpenEx atau Open. Kerangka kerja membatalkan alokasi handel saat Anda memanggil delete operator pada CDatabase objek. Perhatikan bahwa Close fungsi anggota tidak membatalkan alokasi handel.

Namun, dalam beberapa keadaan, Anda mungkin perlu menggunakan handel secara langsung. Misalnya, jika Anda perlu memanggil fungsi ODBC API secara langsung daripada melalui kelas CDatabase, Anda mungkin memerlukan handel koneksi untuk diteruskan sebagai parameter. Lihat contoh kode di bawah ini.

Contoh

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

Kerangka kerja memanggil fungsi anggota ini saat langsung menjalankan pernyataan SQL dengan ExecuteSQL fungsi anggota.

virtual void OnSetOptions(HSTMT hstmt);

Parameter

hstmt
Handel pernyataan ODBC yang opsinya sedang diatur.

Keterangan

CRecordset::OnSetOptions juga memanggil fungsi anggota ini.

OnSetOptions mengatur nilai batas waktu masuk. Jika telah ada panggilan sebelumnya ke SetQueryTimeout fungsi anggota dan , OnSetOptions mencerminkan nilai saat ini; jika tidak, itu menetapkan nilai default.

Catatan

Sebelum MFC 4.2, OnSetOptions atur juga mode pemrosesan ke snychronous atau asinkron. Dimulai dengan MFC 4.2, semua operasi sinkron. Untuk melakukan operasi asinkron, Anda harus melakukan panggilan langsung ke fungsi SQLSetPosODBC API .

Anda tidak perlu mengambil alih OnSetOptions untuk mengubah nilai batas waktu. Sebagai gantinya, untuk mengkustomisasi nilai batas waktu kueri, panggil SetQueryTimeout sebelum membuat kumpulan rekaman; OnSetOptions akan menggunakan nilai baru. Nilai yang ditetapkan berlaku untuk operasi berikutnya pada semua recordset atau panggilan SQL langsung.

Ambil alih OnSetOptions jika Anda ingin mengatur opsi tambahan. Penimpaan Anda harus memanggil kelas OnSetOptions dasar baik sebelum atau sesudah Anda memanggil fungsi SQLSetStmtOptionODBC API . Ikuti metode yang diilustrasikan dalam implementasi default kerangka kerja dari OnSetOptions.

CDatabase::Open

Panggil fungsi anggota ini untuk menginisialisasi objek yang baru dibangun CDatabase .

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

Parameter

lpszDSN
Menentukan nama sumber data — nama yang terdaftar di ODBC melalui program Administrator ODBC. Jika nilai DSN ditentukan dalam lpszConnect (dalam formulir "DSN=<sumber> data"), nilai DSN tidak boleh ditentukan lagi di lpszDSN. Dalam hal ini, lpszDSN harus NULL. Jika tidak, Anda dapat meneruskan NULL jika Anda ingin menyajikan pengguna dengan kotak dialog Sumber Data tempat pengguna dapat memilih sumber data. Untuk informasi selengkapnya, lihat Keterangan.

bExclusive
Tidak didukung dalam versi pustaka kelas ini. Saat ini, pernyataan gagal jika parameter ini adalah TRUE. Sumber data selalu dibuka sebagai dibagikan (tidak eksklusif).

bReadOnly
TRUE jika Anda berniat koneksi menjadi baca-saja dan melarang pembaruan ke sumber data. Semua kumpulan rekaman dependen mewarisi atribut ini. Nilai defaultnya adalah FALSE.

lpszConnect
Menentukan string koneksi. string koneksi menggabungkan informasi, mungkin termasuk nama sumber data, ID pengguna yang valid pada sumber data, string autentikasi pengguna (kata sandi, jika sumber data memerlukannya), dan informasi lainnya. Seluruh string koneksi harus diawali oleh string "ODBC;" (huruf besar atau huruf kecil). String "ODBC;" digunakan untuk menunjukkan bahwa koneksi ke sumber data ODBC; ini untuk kompatibilitas ke atas ketika versi pustaka kelas di masa mendatang mungkin mendukung sumber data non-ODBC.

bUseCursorLib
TRUE jika Anda ingin DLL Pustaka Kursor ODBC dimuat. Pustaka kursor menutupi beberapa fungsionalitas driver ODBC yang mendasarinya, secara efektif mencegah penggunaan dinaset (jika driver mendukungnya). Satu-satunya kursor yang didukung jika pustaka kursor dimuat adalah rekam jepret statis dan kursor khusus terusan. Nilai defaultnya adalah TRUE. Jika Anda berencana untuk membuat objek recordset langsung dari CRecordset tanpa turunan darinya, Anda tidak boleh memuat pustaka kursor.

Tampilkan Nilai

Bukan nol jika koneksi berhasil dibuat; jika tidak, 0 jika pengguna memilih Batal saat menyajikan kotak dialog yang meminta informasi koneksi lainnya. Dalam semua kasus lain, kerangka kerja melemparkan pengecualian.

Keterangan

Objek database Anda harus diinisialisasi sebelum Anda dapat menggunakannya untuk membuat objek kumpulan rekaman.

Catatan

Memanggil OpenEx fungsi anggota adalah cara yang lebih disukai untuk menyambungkan ke sumber data dan menginisialisasi objek database Anda.

Jika parameter dalam panggilan Anda Open tidak berisi informasi yang cukup untuk membuat koneksi, driver ODBC membuka kotak dialog untuk mendapatkan informasi yang diperlukan dari pengguna. Saat Anda memanggil Open, string koneksi Anda, lpszConnect, disimpan secara privat di CDatabase objek dan tersedia dengan memanggil GetConnect fungsi anggota.

Jika mau, Anda dapat membuka kotak dialog Anda sendiri sebelum memanggil Open untuk mendapatkan informasi dari pengguna, seperti kata sandi, lalu menambahkan informasi tersebut ke string koneksi Anda meneruskan ke Open. Atau Anda mungkin ingin menyimpan string koneksi yang Anda lewati sehingga Anda dapat menggunakannya kembali lain kali aplikasi Anda memanggil Open pada CDatabase objek.

Anda juga dapat menggunakan string koneksi untuk beberapa tingkat otorisasi masuk (masing-masing untuk objek yang berbedaCDatabase) atau untuk menyampaikan informasi spesifik sumber data lainnya. Untuk informasi selengkapnya tentang string koneksi, lihat Bab 5 di Windows SDK.

Dimungkinkan untuk upaya koneksi kehabisan waktu jika, misalnya, host DBMS tidak tersedia. Jika upaya koneksi gagal, Open melempar CDBException.

Contoh

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

Panggil fungsi anggota ini untuk menginisialisasi objek yang baru dibangun CDatabase .

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

Parameter

lpszConnectString
Menentukan string koneksi ODBC. Ini termasuk nama sumber data serta informasi opsional lainnya, seperti ID pengguna dan kata sandi. Misalnya, "DSN=SQLServer_Source;UID=SA;PWD=abc123" adalah kemungkinan string koneksi. Perhatikan bahwa jika Anda meneruskan NULL , lpszConnectStringkotak dialog Sumber Data akan meminta pengguna untuk memilih sumber data.

dwOptions
Bitmask yang menentukan kombinasi nilai berikut. Nilai default adalah 0, yang berarti bahwa database akan dibuka sebagai dibagikan dengan akses tulis, DLL Pustaka Kursor ODBC tidak akan dimuat, dan kotak dialog koneksi ODBC akan ditampilkan hanya jika tidak ada informasi yang cukup untuk membuat koneksi.

  • CDatabase::openExclusive Tidak didukung dalam versi pustaka kelas ini. Sumber data selalu dibuka sebagai dibagikan (tidak eksklusif). Saat ini, pernyataan gagal jika Anda menentukan opsi ini.

  • CDatabase::openReadOnly Buka sumber data sebagai baca-saja.

  • CDatabase::useCursorLib Muat DLL Pustaka Kursor ODBC. Pustaka kursor menutupi beberapa fungsionalitas driver ODBC yang mendasarinya, secara efektif mencegah penggunaan dinaset (jika driver mendukungnya). Satu-satunya kursor yang didukung jika pustaka kursor dimuat adalah rekam jepret statis dan kursor khusus terusan. Jika Anda berencana untuk membuat objek recordset langsung dari CRecordset tanpa turunan darinya, Anda tidak boleh memuat pustaka kursor.

  • CDatabase::noOdbcDialog Jangan tampilkan kotak dialog koneksi ODBC, terlepas dari apakah cukup informasi koneksi yang disediakan.

  • CDatabase::forceOdbcDialog Selalu tampilkan kotak dialog koneksi ODBC.

Tampilkan Nilai

Bukan nol jika koneksi berhasil dibuat; jika tidak, 0 jika pengguna memilih Batal saat menyajikan kotak dialog yang meminta informasi koneksi lainnya. Dalam semua kasus lain, kerangka kerja melemparkan pengecualian.

Keterangan

Objek database Anda harus diinisialisasi sebelum Anda dapat menggunakannya untuk membuat objek kumpulan rekaman.

lpszConnectString Jika parameter dalam panggilan Anda OpenEx tidak berisi informasi yang cukup untuk membuat koneksi, driver ODBC membuka kotak dialog untuk mendapatkan informasi yang diperlukan dari pengguna, asalkan Anda belum mengatur CDatabase::noOdbcDialog atau CDatabase::forceOdbcDialog dalam dwOptions parameter. Saat Anda memanggil OpenEx, string koneksi Anda, lpszConnectString, disimpan secara privat di CDatabase objek dan tersedia dengan memanggil GetConnect fungsi anggota.

Jika mau, Anda dapat membuka kotak dialog Anda sendiri sebelum memanggil OpenEx untuk mendapatkan informasi dari pengguna, seperti kata sandi, lalu menambahkan informasi tersebut ke string koneksi Anda meneruskan ke OpenEx. Atau Anda mungkin ingin menyimpan string koneksi yang Anda lewati sehingga Anda dapat menggunakannya kembali lain kali aplikasi Anda memanggil OpenEx pada CDatabase objek.

Anda juga dapat menggunakan string koneksi untuk beberapa tingkat otorisasi masuk (masing-masing untuk objek yang berbedaCDatabase) atau untuk menyampaikan informasi spesifik sumber data lainnya. Untuk informasi selengkapnya tentang string koneksi, lihat Bab 6 di Referensi Programmer ODBC.

Dimungkinkan untuk upaya koneksi kehabisan waktu jika, misalnya, host DBMS tidak tersedia. Jika upaya koneksi gagal, OpenEx melempar CDBException.

Contoh

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

Panggil fungsi anggota ini untuk membalikkan perubahan yang dilakukan selama transaksi.

BOOL Rollback();

Tampilkan Nilai

Bukan nol jika transaksi berhasil dibalik; jika tidak, 0. Rollback Jika panggilan gagal, sumber data dan status transaksi tidak terdefinisi. Jika Rollback mengembalikan 0, Anda harus memeriksa sumber data untuk menentukan statusnya.

Keterangan

Semua CRecordset AddNewpanggilan , Edit, Delete, dan Update yang dijalankan sejak yang terakhir BeginTrans digulung balik ke status yang ada pada saat panggilan tersebut.

Setelah panggilan ke Rollback, transaksi selesai, dan Anda harus memanggil BeginTrans lagi untuk transaksi lain. Rekaman yang saat ini sebelum Anda panggil BeginTrans menjadi rekaman saat ini lagi setelah Rollback.

Setelah pemutaran kembali, rekaman yang sedang berjalan sebelum pemutaran kembali tetap terkini. Untuk detail tentang status kumpulan rekaman dan sumber data setelah pembatalan, lihat artikel Transaksi (ODBC).

Contoh

Lihat artikel Transaksi: Melakukan Transaksi dalam Recordset (ODBC).

CDatabase::SetLoginTimeout

Panggil fungsi anggota ini — sebelum Anda memanggil OpenEx atau Open — untuk mengambil alih jumlah detik default yang diizinkan sebelum waktu koneksi sumber data yang dicoba habis.

void SetLoginTimeout(DWORD dwSeconds);

Parameter

dwSeconds
Jumlah detik yang diperbolehkan sebelum waktu upaya koneksi habis.

Keterangan

Upaya koneksi mungkin kehabisan waktu jika, misalnya, DBMS tidak tersedia. Panggil SetLoginTimeout setelah Anda membuat objek yang tidak diinisialisasi CDatabase tetapi sebelum Anda memanggil OpenEx atau Open.

Nilai default untuk batas waktu masuk adalah 15 detik. Tidak semua sumber data mendukung kemampuan untuk menentukan nilai batas waktu masuk. Jika sumber data tidak mendukung batas waktu, Anda mendapatkan output pelacakan tetapi bukan pengecualian. Nilai 0 berarti "tak terbatas."

CDatabase::SetQueryTimeout

Panggil fungsi anggota ini untuk mengambil alih jumlah detik default untuk diizinkan sebelum operasi berikutnya pada waktu sumber data yang terhubung habis.

void SetQueryTimeout(DWORD dwSeconds);

Parameter

dwSeconds
Jumlah detik yang diperbolehkan sebelum upaya kueri kehabisan waktu.

Keterangan

Operasi mungkin kehabisan waktu karena masalah akses jaringan, waktu pemrosesan kueri yang berlebihan, dan sebagainya. Panggil SetQueryTimeout sebelum membuka kumpulan rekaman Anda atau sebelum memanggil fungsi kumpulan rekaman AddNew, Update atau Delete anggota jika Anda ingin mengubah nilai batas waktu kueri. Pengaturan memengaruhi semua Openpanggilan berikutnya , , AddNew, Updatedan Delete ke kumpulan rekaman apa pun yang terkait dengan objek ini CDatabase . Mengubah nilai batas waktu kueri untuk kumpulan rekaman setelah pembukaan tidak mengubah nilai untuk kumpulan rekaman. Misalnya, operasi berikutnya Move tidak menggunakan nilai baru.

Nilai default untuk batas waktu kueri adalah 15 detik. Tidak semua sumber data mendukung kemampuan untuk mengatur nilai batas waktu kueri. Jika Anda menetapkan nilai batas waktu kueri 0, tidak ada batas waktu yang terjadi; komunikasi dengan sumber data mungkin berhenti merespons. Perilaku ini mungkin berguna selama pengembangan. Jika sumber data tidak mendukung batas waktu, Anda mendapatkan output pelacakan tetapi bukan pengecualian.

Lihat juga

CObject Kelas
Bagan Hierarki
CRecordset Kelas