Bagikan melalui


Pengecualian: Pengecualian Database

Artikel ini menjelaskan cara menangani pengecualian database. Sebagian besar materi dalam artikel ini berlaku apakah Anda bekerja dengan kelas MFC untuk Open Database Koneksi ivity (ODBC) atau kelas MFC untuk Objek Akses Data (DAO). Materi khusus untuk satu atau model lainnya ditandai secara eksplisit. Topik meliputi:

Pendekatan untuk Penanganan Pengecualian

Pendekatannya sama apakah Anda bekerja dengan DAO (usang) atau ODBC.

Anda harus selalu menulis penangan pengecualian untuk menangani kondisi yang luar biasa.

Pendekatan paling pragmatis untuk menangkap pengecualian database adalah menguji aplikasi Anda dengan skenario pengecualian. Tentukan kemungkinan pengecualian yang mungkin terjadi untuk operasi dalam kode Anda, dan paksa pengecualian terjadi. Kemudian periksa output jejak untuk melihat pengecualian apa yang dilemparkan, atau periksa informasi kesalahan yang dikembalikan dalam debugger. Ini memungkinkan Anda mengetahui kode pengembalian mana yang akan Anda lihat untuk skenario pengecualian yang Anda gunakan.

Kode Kesalahan yang Digunakan untuk Pengecualian ODBC

Selain mengembalikan kode yang ditentukan oleh kerangka kerja, yang memiliki nama formulir AFX_SQL_ERROR_XXX, beberapa CDBExceptions didasarkan pada kode pengembalian ODBC. Kode pengembalian untuk pengecualian tersebut memiliki nama formulir SQL_ERROR_XXX.

Kode pengembalian — baik yang ditentukan kerangka kerja maupun yang ditentukan ODBC — bahwa kelas database dapat kembali didokumentasikan di bawah anggota data kelas CDBExceptionm_nRetCode . Informasi tambahan tentang kode pengembalian yang ditentukan oleh ODBC tersedia di Referensi Pemrogram ODBC.

Kode Kesalahan yang Digunakan untuk Pengecualian DAO

Untuk pengecualian DAO, informasi lebih lanjut biasanya tersedia. Anda dapat mengakses informasi kesalahan melalui tiga anggota data objek CDaoException yang tertangkap:

  • m_pErrorInfo berisi penunjuk ke objek CDaoErrorInfo yang merangkum informasi kesalahan dalam kumpulan objek kesalahan DAO yang terkait dengan database.

  • m_nAfxDaoError berisi kode kesalahan yang diperluas dari kelas MFC DAO. Kode kesalahan ini, yang memiliki nama formulir AFX_DAO_ERROR_XXX, didokumentasikan di bawah anggota data di CDaoException.

  • m_scode berisi OLE SCODE dari DAO, jika berlaku. Namun, Anda jarang perlu bekerja dengan kode kesalahan ini. Biasanya informasi lebih lanjut tersedia di dua anggota data lainnya. Lihat anggota data untuk informasi selengkapnya tentang nilai SCODE .

Informasi tambahan tentang kesalahan DAO, jenis objek Kesalahan DAO, dan koleksi Kesalahan DAO tersedia di bawah kelas CDaoException.

Contoh penanganan pengecualian database

Contoh berikut mencoba membuat objek turunan CRecordset pada tumpukan dengan new operator, lalu membuka kumpulan rekaman (untuk sumber data ODBC). Untuk contoh serupa untuk kelas DAO, lihat "Contoh Pengecualian DAO" di bawah ini.

Contoh Pengecualian ODBC

Fungsi Anggota terbuka dapat melemparkan pengecualian (jenis CDBException untuk kelas ODBC), sehingga kode ini memetakan Open panggilan dengan try blok. Blok berikutnya catch akan menangkap CDBException. Anda dapat memeriksa objek pengecualian itu sendiri, yang disebut e, tetapi dalam hal ini cukup untuk mengetahui bahwa upaya untuk membuat kumpulan rekaman telah gagal. Blok catch menampilkan kotak pesan dan membersihkan dengan menghapus objek kumpulan rekaman.

CRecordset* CMyDatabaseDoc::GetRecordset()
{
   CCourses* pSet = new CCourses(&m_dbCust);
   try
   {
      pSet->Open();
   }
   catch (CDBException* e)
   {
      AfxMessageBox(e->m_strError, MB_ICONEXCLAMATION);
      // Delete the incomplete recordset object
      delete pSet;
      pSet = NULL;
      e->Delete();
   }
   return pSet;
}

Contoh Pengecualian DAO

Contoh DAO mirip dengan contoh untuk ODBC, tetapi Anda biasanya dapat mengambil lebih banyak jenis informasi. Kode berikut juga mencoba membuka kumpulan rekaman. Jika upaya tersebut melemparkan pengecualian, Anda dapat memeriksa anggota data objek pengecualian untuk informasi kesalahan. Seperti contoh ODBC sebelumnya, mungkin cukup untuk mengetahui bahwa upaya untuk membuat kumpulan rekaman gagal.

CDaoRecordset* CMyDaoDatabaseDoc::GetRecordset()
{
   CDaoRecordset* pSet = new CCustSet(&m_db);
   try
   {
      pSet->Open();
   }
   catch (CDaoException* pe)
   {
      AfxMessageBox(pe->m_pErrorInfo->m_strDescription, MB_ICONEXCLAMATION);
      // Delete the incomplete recordset object
      delete pSet;
      pSet = NULL;
      pe->Delete();
   }
   return pSet;
}

Kode ini mendapatkan string pesan kesalahan dari anggota m_pErrorInfo objek pengecualian. MFC mengisi anggota ini ketika melempar pengecualian.

Untuk diskusi tentang informasi kesalahan yang CDaoException dikembalikan oleh objek, lihat kelas CDaoException dan CDaoErrorInfo.

Ketika Anda bekerja dengan database Microsoft Jet (.mdb), dan dalam kebanyakan kasus ketika Anda bekerja dengan ODBC, hanya akan ada satu objek kesalahan. Dalam kasus yang jarang terjadi ketika Anda menggunakan sumber data ODBC dan ada beberapa kesalahan, Anda dapat mengulangi pengumpulan Kesalahan DAO berdasarkan jumlah kesalahan yang dikembalikan oleh CDaoException::GetErrorCount. Setiap kali melalui perulangan, panggil CDaoException::GetErrorInfo untuk mengisi m_pErrorInfo ulang anggota data.

Baca juga

Penanganan Pengecualian