Bagikan melalui


Peran Manajer Driver dalam Proses Sambungan

Ingatlah bahwa aplikasi tidak memanggil fungsi driver secara langsung. Sebaliknya, mereka memanggil fungsi Driver Manager dengan nama yang sama dan Driver Manager memanggil fungsi driver. Biasanya, ini terjadi hampir segera. Misalnya, aplikasi memanggil SQLExecute di Driver Manager dan setelah beberapa pemeriksaan kesalahan, Driver Manager memanggil SQLExecute di driver.

Proses koneksi berbeda. Ketika aplikasi memanggil SQLAllocHandle dengan opsi SQL_HANDLE_ENV dan SQL_HANDLE_DBC, fungsi hanya mengalokasikan handel di Driver Manager. Manajer Driver tidak memanggil fungsi ini pada pengandar karena tidak tahu driver mana yang akan dipanggil. Demikian pula, jika aplikasi melewati handel koneksi yang tidak terhubung ke SQLSet Koneksi Attr atau SQLGet Koneksi Attr, hanya Manajer Driver yang menjalankan fungsi. Ini menyimpan atau mendapatkan nilai atribut dari handel koneksinya dan mengembalikan SQLSTATE 08003 (Koneksi ion tidak terbuka) saat mendapatkan nilai untuk atribut yang belum ditetapkan dan odbc mana yang tidak menentukan nilai default.

Ketika aplikasi memanggil SQL Koneksi, SQLDriver Koneksi, atau SQLBrowse Koneksi, Driver Manager terlebih dahulu menentukan driver mana yang akan digunakan. Kemudian memeriksa untuk menentukan apakah driver saat ini dimuat pada koneksi:

  • Jika tidak ada driver yang dimuat pada koneksi, Manajer Driver memeriksa apakah driver yang ditentukan dimuat pada koneksi lain di lingkungan yang sama. Jika tidak, Driver Manager memuat driver pada koneksi dan memanggil SQLAllocHandle di driver dengan opsi SQL_HANDLE_ENV.

    Driver Manager kemudian memanggil SQLAllocHandle di driver dengan opsi SQL_HANDLE_DBC, apakah itu baru saja dimuat atau tidak. Jika aplikasi mengatur atribut koneksi apa pun, Manajer Driver memanggil SQLSet Koneksi Attr di driver; jika terjadi kesalahan, fungsi koneksi Manajer Driver mengembalikan SQLSTATE IM006 (SQLSet Driver Koneksi Attr gagal). Terakhir, Driver Manager memanggil fungsi koneksi di driver.

  • Jika driver yang ditentukan dimuat pada koneksi, Manajer Driver hanya memanggil fungsi koneksi di driver. Dalam hal ini, driver harus memastikan bahwa semua atribut koneksi pada koneksi mempertahankan pengaturannya saat ini.

  • Jika driver yang berbeda dimuat pada koneksi, Driver Manager memanggil SQLFreeHandle di driver untuk membebaskan koneksi. Jika tidak ada koneksi lain yang menggunakan driver, Driver Manager memanggil SQLFreeHandle di driver untuk membebaskan lingkungan dan membongkar driver. Manajer Driver kemudian melakukan operasi yang sama seperti ketika driver tidak dimuat pada koneksi.

Driver Manager akan mengunci handel lingkungan (henv) sebelum memanggil SQLAllocHandle driver dan SQLFreeHandle saat HandleType diatur ke SQL_HANDLE_DBC.

Ketika aplikasi memanggil SQLDisconnect, Manajer Driver memanggil SQLDisconnect di driver. Namun, itu meninggalkan driver yang dimuat jika aplikasi terhubung kembali ke driver. Ketika aplikasi memanggil SQLFreeHandle dengan opsi SQL_HANDLE_DBC, Driver Manager memanggil SQLFreeHandle di driver. Jika driver tidak digunakan oleh koneksi lain, Driver Manager kemudian memanggil SQLFreeHandle di driver dengan opsi SQL_HANDLE_ENV dan membongkar driver.