Fungsi SQLConnect

Kesesuaian
Versi diperkenalkan: Kepatuhan Standar ODBC 1.0: ISO 92

Ringkasan
SQLConnect membuat koneksi ke driver dan sumber data. Koneksi menangani referensi penyimpanan semua informasi tentang koneksi ke sumber data, termasuk status, status transaksi, dan informasi kesalahan.

Sintaks

  
SQLRETURN SQLConnect(  
     SQLHDBC        ConnectionHandle,  
     SQLCHAR *      ServerName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      UserName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      Authentication,  
     SQLSMALLINT    NameLength3);  

Argumen

ConnectionHandle
[Input] Handel koneksi.

ServerName
[Input] Nama sumber data. Data mungkin terletak pada komputer yang sama dengan program, atau di komputer lain di suatu tempat pada jaringan. Untuk informasi tentang cara aplikasi memilih sumber data, lihat Memilih Sumber Data atau Driver.

NameLength1
[Input] Panjang *ServerName dalam karakter.

UserName
[Input] Pengidentifikasi pengguna.

NameLength2
[Input] Panjang *UserName dalam karakter.

Autentikasi
[Input] String autentikasi (biasanya kata sandi).

NameLength3
[Input] Panjang *Autentikasi dalam karakter.

Kembali

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE, atau SQL_STILL_EXECUTING.

Diagnostik

Saat SQLConnect mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_DBC dan Handle of ConnectionHandle. Tabel berikut mencantumkan nilai SQLSTATE yang biasanya dikembalikan oleh SQLConnect dan menjelaskan masing-masing dalam konteks fungsi ini; notasi "(DM)" mendahului deskripsi SQLSTATEs yang dikembalikan oleh Driver Manager. Kode pengembalian yang terkait dengan setiap nilai SQLSTATE SQL_ERROR, kecuali disebutkan sebaliknya.

SQLSTATE Kesalahan Deskripsi
01000 Peringatan umum Pesan informasi khusus driver. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01S02 Nilai opsi berubah Driver tidak mendukung nilai yang ditentukan dari argumen ValuePtr di SQLSetConnectAttr dan menggantikan nilai yang sama. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
08001 Klien tidak dapat membuat koneksi Pengandar tidak dapat membuat sambungan dengan sumber data.
08002 Nama koneksi yang digunakan (DM) ConnectionHandle yang ditentukan telah digunakan untuk membuat koneksi dengan sumber data, dan koneksi masih terbuka atau pengguna sedang menelusuri koneksi.
08004 Server menolak koneksi Sumber data menolak pembentukan koneksi karena alasan yang ditentukan implementasi.
08S01 Kegagalan tautan komunikasi Tautan komunikasi antara driver dan sumber data tempat driver mencoba menyambungkan gagal sebelum fungsi selesai diproses.
28000 Spesifikasi otorisasi tidak valid Nilai yang ditentukan untuk argumen UserName atau nilai yang ditentukan untuk argumen Autentikasi melanggar batasan yang ditentukan oleh sumber data.
HY000 Kesalahan umum Terjadi kesalahan yang tidak ada SQLSTATE tertentu dan tidak ada SQLSTATE khusus implementasi yang ditentukan. Pesan kesalahan yang dikembalikan oleh SQLGetDiagRec di buffer *MessageText menjelaskan kesalahan dan penyebabnya.
HY001 Kesalahan alokasi memori (DM) Manajer Driver tidak dapat mengalokasikan memori yang diperlukan untuk mendukung eksekusi atau penyelesaian fungsi.
HY008 Operasi dibatalkan Pemrosesan asinkron diaktifkan untuk ConnectionHandle. Fungsi SQLConnect dipanggil, dan sebelum selesai dieksekusi, Fungsi SQLCancelHandle dipanggil pada ConnectionHandle, dan kemudian fungsi SQLConnect dipanggil lagi pada ConnectionHandle.

Atau, fungsi SQLConnect dipanggil, dan sebelum selesai dieksekusi, SQLCancelHandle dipanggil pada ConnectionHandle dari utas yang berbeda dalam aplikasi multithread.
HY010 Kesalahan urutan fungsi (DM) Fungsi eksekusi asinkron (bukan yang ini) dipanggil untuk ConnectionHandle dan masih dijalankan ketika fungsi ini dipanggil.
HY013 Kesalahan manajemen memori Panggilan fungsi tidak dapat diproses karena objek memori yang mendasar tidak dapat diakses, mungkin karena kondisi memori yang rendah.
HY090 String atau panjang buffer tidak valid (DM) Nilai yang ditentukan untuk argumen NameLength1, NameLength2, atau NameLength3 kurang dari 0 tetapi tidak sama dengan SQL_NTS.

(DM) Nilai yang ditentukan untuk argumen NameLength1 melebihi panjang maksimum untuk nama sumber data.
HYT00 Waktu habis kedaluwarsa Periode batas waktu kueri kedaluwarsa sebelum koneksi ke sumber data selesai. Periode batas waktu diatur melalui SQLSetConnectAttr, SQL_ATTR_LOGIN_TIMEOUT.
HY114 Driver tidak mendukung eksekusi fungsi asinkron tingkat koneksi (DM) Aplikasi mengaktifkan operasi asinkron pada handel koneksi sebelum membuat koneksi. Namun, driver tidak mendukung operasi asinkron pada handel koneksi.
HYT01 Kesalahan waktu habis koneksi kedaluwarsa Periode batas waktu koneksi kedaluwarsa sebelum sumber data merespons permintaan. Periode batas waktu koneksi diatur melalui SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Driver tidak mendukung fungsi ini (DM) Driver yang ditentukan oleh nama sumber data tidak mendukung fungsi.
IM002 Sumber data tidak ditemukan dan tidak ada driver default yang ditentukan (DM) Nama sumber data yang ditentukan dalam argumen ServerName tidak ditemukan dalam informasi sistem, juga tidak ada spesifikasi driver default.
IM003 Pengandar yang ditentukan tidak dapat disambungkan (DM) Driver yang tercantum dalam spesifikasi sumber data dalam informasi sistem tidak ditemukan atau tidak dapat dihubungkan karena alasan lain.
IM004 SQLAllocHandle driver pada SQL_HANDLE_ENV gagal (DM) Selama SQLConnect, Driver Manager memanggil fungsi SQLAllocHandle driver dengan HandleType SQL_HANDLE_ENV dan driver mengembalikan kesalahan.
IM005 SQLAllocHandle driver pada SQL_HANDLE_DBC gagal (DM) Selama SQLConnect, Driver Manager memanggil fungsi SQLAllocHandle driver dengan HandleType SQL_HANDLE_DBC dan driver mengembalikan kesalahan.
IM006 SQLSetConnectAttr driver gagal Selama SQLConnect, Manajer Driver memanggil fungsi SQLSetConnectAttr driver dan driver mengembalikan kesalahan. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
IM009 Tidak dapat tersambung ke DLL terjemahan Pengandar tidak dapat tersambung ke DLL terjemahan yang ditentukan untuk sumber data.
IM010 Nama sumber data terlalu panjang (DM) *ServerName lebih panjang dari SQL_MAX_DSN_LENGTH karakter.
IM014 DSN yang ditentukan berisi ketidakcocokan arsitektur antara Driver dan Aplikasi (DM) aplikasi 32-bit menggunakan DSN yang terhubung ke driver 64-bit; atau sebaliknya.
IM015 SQLConnect driver pada SQL_HANDLE_DBC_INFO_HANDLE gagal Jika driver mengembalikan SQL_ERROR, Driver Manager akan mengembalikan SQL_ERROR ke aplikasi dan koneksi akan gagal.

Untuk informasi selengkapnya tentang SQL_HANDLE_DBC_INFO_TOKEN, lihat Mengembangkan Kesadaran Kumpulan Koneksi di Driver ODBC.
IM017 Polling dinonaktifkan dalam mode pemberitahuan asinkron Setiap kali model pemberitahuan digunakan, polling dinonaktifkan.
IM018 SQLCompleteAsync belum dipanggil untuk menyelesaikan operasi asinkron sebelumnya pada handel ini. Jika panggilan fungsi sebelumnya pada handel mengembalikan SQL_STILL_EXECUTING dan jika mode pemberitahuan diaktifkan, SQLCompleteAsync harus dipanggil pada handel untuk melakukan pasca-pemrosesan dan menyelesaikan operasi.
S1118 Driver tidak mendukung pemberitahuan asinkron Ketika driver tidak mendukung pemberitahuan asinkron, Anda tidak dapat mengatur SQL_ATTR_ASYNC_DBC_EVENT atau SQL_ATTR_ASYNC_DBC_RETCODE_PTR.

Komentar

Untuk informasi tentang mengapa aplikasi menggunakan SQLConnect, lihat Menyambungkan dengan SQLConnect.

Manajer Driver tidak tersambung ke driver sampai aplikasi memanggil fungsi (SQLConnect, SQLDriverConnect, atau SQLBrowseConnect) untuk menyambungkan ke driver. Sampai saat itu, Driver Manager bekerja dengan handelnya sendiri dan mengelola informasi koneksi. Ketika aplikasi memanggil fungsi koneksi, Driver Manager memeriksa apakah driver saat ini terhubung ke untuk ConnectionHandle yang ditentukan:

  • Jika driver tidak tersambung, Driver Manager terhubung ke driver dan memanggil SQLAllocHandle dengan HandleType SQL_HANDLE_ENV, SQLAllocHandle dengan HandleType SQL_HANDLE_DBC, SQLSetConnectAttr (jika aplikasi menentukan atribut koneksi), dan fungsi koneksi di driver. Driver Manager mengembalikan SQLSTATE IM006 (Driver SQLSetConnectOption gagal) dan SQL_SUCCESS_WITH_INFO untuk fungsi koneksi jika driver mengembalikan kesalahan untuk SQLSetConnectAttr. Untuk informasi selengkapnya, lihat Menyambungkan ke Sumber Data atau Driver.

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

  • Jika driver yang berbeda terhubung, Driver Manager memanggil SQLFreeHandle dengan HandleType SQL_HANDLE_DBC, dan kemudian, jika tidak ada driver lain yang terhubung ke lingkungan tersebut, driver memanggil SQLFreeHandle dengan HandleType SQL_HANDLE_ENV di driver yang terhubung dan kemudian memutuskan sambungan driver tersebut. Kemudian melakukan operasi yang sama seperti ketika driver tidak terhubung.

Driver kemudian mengalokasikan handel dan menginisialisasi dirinya sendiri.

Ketika aplikasi memanggil SQLDisconnect, Manajer Driver memanggil SQLDisconnect di driver. Namun, tidak memutuskan sambungan driver. Ini membuat driver dalam memori untuk aplikasi yang berulang kali tersambung dan memutuskan sambungan dari sumber data. Ketika aplikasi memanggil SQLFreeHandle dengan HandleType of SQL_HANDLE_DBC, Driver Manager memanggil SQLFreeHandle dengan HandleType SQL_HANDLE_DBC lalu SQLFreeHandle dengan HandleType SQL_HANDLE_ENV di driver, lalu memutuskan sambungan driver.

Aplikasi ODBC dapat membuat lebih dari satu koneksi.

Pedoman Manajer Driver

Konten *ServerName memengaruhi cara Manajer Driver dan driver bekerja sama untuk membuat koneksi ke sumber data.

  • Jika *ServerName berisi nama sumber data yang valid, Manajer Driver menemukan spesifikasi sumber data yang sesuai dalam informasi sistem dan tersambung ke driver terkait. Driver Manager meneruskan setiap argumen SQLConnect ke driver.

  • Jika nama sumber data tidak dapat ditemukan atau ServerName adalah penunjuk null, Manajer Driver menemukan spesifikasi sumber data default dan tersambung ke driver terkait. Manajer Driver meneruskan ke driver argumen UserName dan Authentication yang tidak dimodifikasi, dan "DEFAULT" untuk argumen ServerName .

  • Jika argumen ServerName adalah "DEFAULT", Manajer Driver menemukan spesifikasi sumber data default dan tersambung ke driver terkait. Driver Manager meneruskan setiap argumen SQLConnect ke driver.

  • Jika nama sumber data tidak dapat ditemukan atau ServerName adalah penunjuk null, dan spesifikasi sumber data default tidak ada, Manajer Driver mengembalikan SQL_ERROR dengan SQLSTATE IM002 (Nama sumber data tidak ditemukan dan tidak ada driver default yang ditentukan).

Setelah disambungkan oleh Driver Manager, driver dapat menemukan spesifikasi sumber data yang sesuai dalam informasi sistem dan menggunakan informasi khusus driver dari spesifikasi untuk menyelesaikan serangkaian informasi koneksi yang diperlukan.

Jika pustaka terjemahan default ditentukan dalam informasi sistem untuk sumber data, driver akan tersambung ke pustaka tersebut. Pustaka terjemahan yang berbeda dapat dihubungkan dengan memanggil SQLSetConnectAttr dengan atribut SQL_ATTR_TRANSLATE_LIB. Opsi terjemahan dapat ditentukan dengan memanggil SQLSetConnectAttr dengan atribut SQL_ATTR_TRANSLATE_OPTION.

Jika driver mendukung SQLConnect, bagian kata kunci driver dari informasi sistem untuk driver harus berisi kata kunci ConnectFunctions dengan karakter pertama yang diatur ke "Y."

Pengumpulan Koneksi

Pengumpulan koneksi memungkinkan aplikasi untuk menggunakan kembali koneksi yang telah dibuat. Ketika pengumpulan koneksi diaktifkan dan SQLConnect dipanggil, Manajer Driver mencoba membuat koneksi menggunakan koneksi yang merupakan bagian dari kumpulan koneksi di lingkungan yang telah ditunjuk untuk pengumpulan koneksi. Lingkungan ini adalah lingkungan bersama yang digunakan oleh semua aplikasi yang menggunakan koneksi di kumpulan.

Pengumpulan koneksi diaktifkan sebelum lingkungan dialokasikan dengan memanggil SQLSetEnvAttr untuk mengatur SQL_ATTR_CONNECTION_POOLING ke SQL_CP_ONE_PER_DRIVER (yang menentukan maksimum satu kumpulan per driver) atau SQL_CP_ONE_PER_HENV (yang menentukan maksimum satu kumpulan per lingkungan). SQLSetEnvAttr dalam hal ini dipanggil dengan EnvironmentHandle diatur ke null, yang menjadikan atribut sebagai atribut tingkat proses. Jika SQL_ATTR_CONNECTION_POOLING diatur ke SQL_CP_OFF, pengumpulan koneksi dinonaktifkan.

Setelah pengumpulan koneksi diaktifkan, SQLAllocHandle dengan HandleType SQL_HANDLE_ENV dipanggil untuk mengalokasikan lingkungan. Lingkungan yang dialokasikan oleh panggilan ini adalah lingkungan bersama karena pengumpulan koneksi telah diaktifkan. Namun, lingkungan yang akan digunakan tidak ditentukan sampai SQLAllocHandle dengan HandleType SQL_HANDLE_DBC dipanggil.

SQLAllocHandle dengan HandleType SQL_HANDLE_DBC dipanggil untuk mengalokasikan koneksi. Driver Manager mencoba menemukan lingkungan bersama yang ada yang cocok dengan atribut lingkungan yang ditetapkan oleh aplikasi. Jika tidak ada lingkungan seperti itu, lingkungan tersebut dibuat sebagai lingkungan bersama implisit. Jika lingkungan bersama yang cocok ditemukan, handel lingkungan dikembalikan ke aplikasi dan jumlah referensinya bertambah.

Namun, koneksi yang akan digunakan tidak ditentukan sampai SQLConnect dipanggil. Pada titik itu, Driver Manager mencoba menemukan koneksi yang ada di kumpulan koneksi yang cocok dengan kriteria yang diminta oleh aplikasi. Kriteria ini mencakup opsi koneksi yang diminta dalam panggilan ke SQLConnect (nilai kata kunci ServerName, UserName, dan Authentication ) dan atribut koneksi apa pun yang ditetapkan sejak SQLAllocHandle dengan HandleType SQL_HANDLE_DBC dipanggil. Driver Manager memeriksa kriteria ini terhadap kata kunci dan atribut koneksi yang sesuai dalam koneksi di kumpulan. Jika kecocokan ditemukan, koneksi di kumpulan digunakan. Jika tidak ada kecocokan yang ditemukan, koneksi baru akan dibuat.

Jika atribut lingkungan SQL_ATTR_CP_MATCH diatur ke SQL_CP_STRICT_MATCH, kecocokan harus tepat agar koneksi di kumpulan digunakan. Jika atribut lingkungan SQL_ATTR_CP_MATCH diatur ke SQL_CP_RELAXED_MATCH, opsi koneksi dalam panggilan ke SQLConnect harus cocok tetapi tidak semua atribut koneksi harus cocok.

Aturan berikut diterapkan ketika atribut koneksi, seperti yang ditetapkan oleh aplikasi sebelum SQLConnect dipanggil, tidak cocok dengan atribut koneksi di kumpulan:

  • Jika atribut koneksi harus diatur sebelum koneksi dibuat:

    Jika SQL_ATTR_CP_MATCH SQL_CP_STRICT_MATCH, SQL_ATTR_PACKET_SIZE dalam koneksi yang dikumpulkan harus identik dengan atribut yang ditetapkan oleh aplikasi. Jika SQL_CP_RELAXED_MATCH, nilai SQL_ATTR_PACKET_SIZE bisa berbeda.

    Nilai SQL_ATTR_LOGIN_VALUE tidak memengaruhi kecocokan.

  • Jika atribut koneksi dapat diatur baik sebelum atau sesudah koneksi dibuat:

    Jika atribut koneksi belum diatur oleh aplikasi tetapi telah diatur pada koneksi di kumpulan, dan ada default, atribut koneksi dalam koneksi terkumpul diatur kembali ke default dan kecocokan dinyatakan. Jika tidak ada default, koneksi terkumpul tidak dianggap cocok.

    Jika atribut koneksi telah diatur oleh aplikasi tetapi belum diatur pada koneksi di kumpulan, atribut koneksi pada kumpulan diubah ke yang diatur oleh aplikasi dan kecocokan dideklarasikan.

    Jika atribut koneksi telah diatur oleh aplikasi, dan juga telah diatur pada koneksi di kumpulan tetapi nilainya berbeda, nilai atribut koneksi aplikasi digunakan dan kecocokan dideklarasikan.

  • Jika nilai atribut koneksi khusus driver tidak identik dan SQL_ATTR_CP_MATCH diatur ke SQL_CP_STRICT_MATCH, koneksi di kumpulan tidak digunakan.

Ketika aplikasi memanggil SQLDisconnect untuk memutuskan sambungan, koneksi dikembalikan ke kumpulan koneksi dan tersedia untuk digunakan kembali.

Mengoptimalkan Performa Pengumpulan Koneksi

Ketika transaksi terdistribusi terlibat, dimungkinkan untuk mengoptimalkan performa pengumpulan koneksi dengan menggunakan SQL_DTC_TRANSITION_COST, yang merupakan bitmask SQLUINTEGER. Transisi yang dimaksud adalah transisi atribut koneksi SQL_ATTR_ENLIST_IN_DTC dari nilai 0 ke nonzero, dan sebaliknya. Ini adalah koneksi yang berasal dari tidak terdaftar dalam transaksi terdistribusi untuk terdaftar dalam transaksi terdistribusi, dan sebaliknya. Tergantung pada bagaimana driver telah menerapkan pendaftaran (mengatur atribut koneksi SQL_ATTR_ENLIST_IN_DTC), transisi ini mungkin mahal dan oleh karena itu harus dihindari untuk performa terbaik.

Nilai yang dikembalikan oleh driver berisi kombinasi bit berikut:

  • SQL_DTC_ENLIST_EXPENSIVE, ketika ditetapkan, menyiratkan transisi nol ke nonzero secara signifikan lebih mahal daripada transisi dari nonzero ke nilai nonzero lain (mendaftarkan koneksi yang sebelumnya terdaftar dalam transaksi berikutnya).

  • SQL_DTC_UNENLIST_EXPENSIVE, ketika diatur, menyiratkan transisi nonzero ke nol secara signifikan lebih mahal daripada menggunakan koneksi yang atribut SQL_ATTR_ENLIST_IN_DTC-nya sudah diatur ke nol.

Ada performa versus tradeoff penggunaan koneksi. Jika driver menunjukkan bahwa satu atau beberapa transisi ini mahal, pengumpul koneksi manajer driver merespons ini dengan menyimpan lebih banyak koneksi di kumpulan. Beberapa koneksi di kumpulan lebih disukai untuk penggunaan nontransaksi, dan beberapa lebih disukai untuk penggunaan transaksional. Namun, jika driver menunjukkan bahwa transisi ini tidak mahal, lebih sedikit koneksi yang dapat digunakan, mungkin bergantian antara penggunaan nontransaksi dan transaksional.

Driver yang tidak mendukung SQL_ATTR_ENLIST_IN_DTC tidak perlu mendukung SQL_DTC_TRANSITION_COST. Untuk driver yang mendukung SQL_ATTR_ENLIST_IN_DTC tetapi tidak SQL_DTC_TRANSITION_COST, diasumsikan bahwa transisi tidak mahal, seolah-olah driver mengembalikan 0 (tidak ada bit yang ditetapkan) untuk nilai ini.

Meskipun SQL_DTC_TRANSITION_COST diperkenalkan dalam ODBC 3.5, ODBC 2.driver x juga dapat mendukungnya karena manajer driver akan meminta informasi ini terlepas dari versi driver.

Contoh Kode

Dalam contoh berikut, aplikasi mengalokasikan pegangan lingkungan dan koneksi. Kemudian terhubung ke sumber data SalesOrders dengan ID pengguna JohnS dan kata sandi Wijen dan memproses data. Setelah selesai memproses data, data terputus dari sumber data dan membebaskan handel.

// SQLConnect_ref.cpp  
// compile with: odbc32.lib  
#include <windows.h>  
#include <sqlext.h>  
  
int main() {  
   SQLHENV henv;  
   SQLHDBC hdbc;  
   SQLHSTMT hstmt;  
   SQLRETURN retcode;  
  
   SQLCHAR * OutConnStr = (SQLCHAR * )malloc(255);  
   SQLSMALLINT * OutConnStrLen = (SQLSMALLINT *)malloc(255);  
  
   // Allocate environment handle  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
  
   // Set the ODBC version environment attribute  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
      retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);   
  
      // Allocate connection handle  
      if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
         retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
  
         // Set login timeout to 5 seconds  
         if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
            SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
  
            // Connect to data source  
            retcode = SQLConnect(hdbc, (SQLCHAR*) "NorthWind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
  
            // Allocate statement handle  
            if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
               retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);   
  
               // Process data  
               if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
                  SQLFreeHandle(SQL_HANDLE_STMT, hstmt);  
               }  
  
               SQLDisconnect(hdbc);  
            }  
  
            SQLFreeHandle(SQL_HANDLE_DBC, hdbc);  
         }  
      }  
      SQLFreeHandle(SQL_HANDLE_ENV, henv);  
   }  
}  
Untuk informasi tentang Lihat
Mengalokasikan handel Fungsi SQLAllocHandle
Menemukan dan menghitung nilai yang diperlukan untuk menyambungkan ke sumber data Fungsi SQLBrowseConnect
Memutuskan sambungan dari sumber data Fungsi SQLDisconnect
Menyambungkan ke sumber data menggunakan string koneksi atau kotak dialog Fungsi SQLDriverConnect
Mengembalikan pengaturan atribut koneksi Fungsi SQLGetConnectAttr
Mengatur atribut koneksi Fungsi SQLSetConnectAttr

Lihat Juga

Referensi API ODBC
File Header ODBC