Fungsi SQLBrowseConnect

Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 1.0: ODBC

Ringkasan
SQLBrowseConnect mendukung metode berulang untuk menemukan dan menghitung atribut dan nilai atribut yang diperlukan untuk terhubung ke sumber data. Setiap panggilan ke SQLBrowseConnect mengembalikan tingkat atribut dan nilai atribut berturut-turut. Ketika semua tingkat telah dijumlahkan, koneksi ke sumber data selesai dan string koneksi lengkap dikembalikan oleh SQLBrowseConnect. Kode pengembalian SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO menunjukkan bahwa semua informasi koneksi telah ditentukan dan aplikasi sekarang terhubung ke sumber data.

Sintaks

  
SQLRETURN SQLBrowseConnect(  
     SQLHDBC         ConnectionHandle,  
     SQLCHAR *       InConnectionString,  
     SQLSMALLINT     StringLength1,  
     SQLCHAR *       OutConnectionString,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLength2Ptr);  

Argumen

ConnectionHandle
[Input] Handel koneksi.

InConnectionString
[Input] Telusuri string koneksi permintaan (lihat "Argumen InConnectionString " di "Komentar").

StringLength1
[Input] Panjang *InConnectionString dalam karakter.

OutConnectionString
[Output] Penunjuk ke buffer karakter untuk mengembalikan string koneksi hasil penelusuran (lihat "Argumen OutConnectionString " di "Komentar").

Jika OutConnectionString adalah NULL, StringLength2Ptr masih akan mengembalikan jumlah total karakter (tidak termasuk karakter penghentian null untuk data karakter) yang tersedia untuk dikembalikan dalam buffer yang diarahkan oleh OutConnectionString.

BufferLength
[Input] Panjang, dalam karakter, dari buffer *OutConnectionString .

StringLength2Ptr
[Output] Jumlah total karakter (tidak termasuk null-termination) yang tersedia untuk dikembalikan dalam *OutConnectionString. Jika jumlah karakter yang tersedia untuk dikembalikan lebih besar dari atau sama dengan BufferLength, string koneksi di *OutConnectionString dipotong menjadi BufferLength dikurangi panjang karakter penghentian null.

Kembali

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_ERROR, SQL_INVALID_HANDLE, atau SQL_STILL_EXECUTING.

Diagnostik

Saat SQLBrowseConnect mengembalikan SQL_ERROR, SQL_SUCCESS_WITH_INFO, atau SQL_NEED_DATA, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_STMT dan Handle of ConnectionHandle. Tabel berikut mencantumkan nilai SQLSTATE yang umumnya dikembalikan oleh SQLBrowseConnect 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.)
01004 Data string, terpotong kanan Buffer *OutConnectionString tidak cukup besar untuk mengembalikan seluruh string koneksi hasil penelusuran, sehingga string terpotong. Buffer *StringLength2Ptr berisi panjang string koneksi hasil penelusuran yang tidak terpotong. (Fungsi mengembalikan SQL_NEED_DATA.)
01S00 Atribut string koneksi tidak valid Kata kunci atribut yang tidak valid ditentukan dalam string koneksi permintaan penelusuran (InConnectionString). (Fungsi mengembalikan SQL_NEED_DATA.)

Kata kunci atribut ditentukan dalam string koneksi permintaan penelusuran (InConnectionString) yang tidak berlaku untuk tingkat koneksi saat ini. (Fungsi mengembalikan SQL_NEED_DATA.)
01S02 Nilai 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) Koneksi yang ditentukan telah digunakan untuk membuat koneksi dengan sumber data, dan koneksi terbuka.
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 Pengidentifikasi pengguna atau string otorisasi atau keduanya, seperti yang ditentukan dalam string koneksi permintaan telusur (InConnectionString), 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.

Driver tidak dapat mengalokasikan memori yang diperlukan untuk mendukung eksekusi atau penyelesaian fungsi.
HY008 Operasi dibatalkan Operasi asinkron dibatalkan dengan memanggil Fungsi SQLCancelHandle. Kemudian, fungsi asli dipanggil lagi pada ConnectionHandle.

Operasi dibatalkan dengan memanggil SQLCancelHandle 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 StringLength1 kurang dari 0 dan tidak sama dengan SQL_NTS.

(DM) Nilai yang ditentukan untuk argumen BufferLength kurang dari 0.
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.
HYT00 Waktu habis kedaluwarsa Periode batas waktu masuk kedaluwarsa sebelum koneksi ke sumber data selesai. Periode batas waktu diatur melalui SQLSetConnectAttr, SQL_ATTR_LOGIN_TIMEOUT.
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 sesuai dengan nama sumber data yang ditentukan tidak mendukung fungsi.
IM002 Sumber data tidak ditemukan dan tidak ada driver default yang ditentukan (DM) Nama sumber data yang ditentukan dalam string koneksi permintaan telusur (InConnectionString) tidak ditemukan dalam informasi sistem, juga tidak ada spesifikasi driver default.

(DM) Sumber data ODBC dan informasi driver default tidak dapat ditemukan dalam informasi sistem.
IM003 Pengandar yang ditentukan tidak dapat dimuat (DM) Driver yang tercantum dalam spesifikasi sumber data dalam informasi sistem atau ditentukan oleh kata kunci DRIVER tidak ditemukan atau tidak dapat dimuat karena alasan lain.
IM004 SQLAllocHandle driver pada SQL_HANDLE _ENV gagal (DM) Selama SQLBrowseConnect, 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 SQLBrowseConnect, Driver Manager memanggil fungsi SQLAllocHandle driver dengan HandleType SQL_HANDLE_DBC dan driver mengembalikan kesalahan.
IM006 SQLSetConnectAttr driver gagal (DM) Selama SQLBrowseConnect, Manajer Driver memanggil fungsi SQLSetConnectAttr driver dan driver mengembalikan kesalahan.
IM009 Tidak dapat memuat DLL terjemahan Pengandar tidak dapat memuat DLL terjemahan yang ditentukan untuk sumber data atau untuk koneksi.
IM010 Nama sumber data terlalu panjang (DM) Nilai atribut untuk kata kunci DSN lebih panjang dari SQL_MAX_DSN_LENGTH karakter.
IM011 Nama driver terlalu panjang (DM) Nilai atribut untuk kata kunci DRIVER lebih panjang dari 255 karakter.
IM012 Kesalahan sintaks kata kunci DRIVER (DM) Pasangan nilai kata kunci untuk kata kunci DRIVER berisi kesalahan sintaks.
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.
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.

Argumen InConnectionString

String koneksi permintaan telusuri memiliki sintaks berikut:

connection-string ::= attribute[;] | atribut;connection-string;
atribut ::= attribute-keyword=attribute-valueDRIVER= | [{]attribute-value[}]
attribute-keyword ::= DSNPWD | UID | | driver-defined-attribute-keyword
attribute-value ::= character-string
driver-defined-attribute-keyword ::= identifier

di mana karakter-string memiliki nol atau lebih karakter; pengidentifikasi memiliki satu atau beberapa karakter; atribut-kata kunci tidak peka huruf besar/kecil; nilai atribut mungkin peka huruf besar/kecil; dan nilai kata kunci DSN tidak hanya terdiri dari kosong. Karena string koneksi dan tata bahasa file inisialisasi, kata kunci dan nilai atribut yang berisi karakter []{}(),;? *=!@ harus dihindari. Karena tata bahasa dalam informasi sistem, kata kunci dan nama sumber data tidak boleh berisi karakter garis miring terbelakang (\). Untuk ODBC 2.x driver, kurung kurawal diperlukan di sekitar nilai atribut untuk kata kunci DRIVER.

Jika ada kata kunci yang diulang dalam string koneksi permintaan penelusuran, driver menggunakan nilai yang terkait dengan kemunculan pertama kata kunci. Jika kata kunci DSN dan DRIVER disertakan dalam string koneksi permintaan penelusuran yang sama, Manajer Driver dan driver menggunakan kata kunci mana pun yang muncul terlebih dahulu.

Untuk informasi tentang cara aplikasi memilih sumber data atau driver, lihat Memilih Sumber Data atau Driver.

Argumen OutConnectionString

String koneksi hasil penelusuran adalah daftar atribut koneksi. Atribut koneksi terdiri dari kata kunci atribut dan nilai atribut yang sesuai. String koneksi hasil telusuri memiliki sintaks berikut:

connection-string ::= attribute[;] | string koneksi atribut;
atribut ::= [*]attribute-keyword=attribute-value
attribute-keyword ::= ODBC-attribute-keyword | driver-defined-attribute-keyword
ODBC-attribute-keyword = {UID | PWD}[:localized-identifier] driver-defined-attribute-keyword ::= identifier[:localized-identifier] attribute-value ::= {attribute-value-list} | ? (Kurung kurawal bersifat harfiah; dikembalikan oleh driver.)
attribute-value-list ::= character-string [:localized-character string] | character-string [:localized-character string] ,attribute-value-list

di mana string karakter dan string karakter yang dilokalkan memiliki nol karakter atau lebih; pengidentifikasi dan pengidentifikasi lokal memiliki satu atau beberapa karakter; atribut-kata kunci tidak peka huruf besar/kecil; dan atribut-nilai mungkin peka huruf besar/kecil. Karena string koneksi dan tata bahasa file inisialisasi, kata kunci, pengidentifikasi yang dilokalkan, dan nilai atribut yang berisi karakter []{}(),;? *=!@ harus dihindari. Karena tata bahasa dalam informasi sistem, kata kunci dan nama sumber data tidak boleh berisi karakter garis miring terbelakang (\).

Sintaks string koneksi hasil penelusuran digunakan sesuai dengan aturan semantik berikut:

  • Jika tanda bintang (*) mendahului atribut-kata kunci, atribut bersifat opsional dan dapat dihilangkan dalam panggilan berikutnya ke SQLBrowseConnect.

  • Kata kunci atribut UID dan PWD memiliki arti yang sama seperti yang didefinisikan dalam SQLDriverConnect.

  • Driver-defined-attribute-keyword menamai jenis atribut yang nilai atributnya dapat disediakan. Misalnya, mungkin SERVER, DATABASE, HOST, atau DBMS.

  • Kata kunci atribut ODBC dan kata kunci atribut yang ditentukan driver menyertakan versi kata kunci yang dilokalkan atau mudah digunakan. Ini mungkin digunakan oleh aplikasi sebagai label dalam kotak dialog. Namun, UID, PWD, atau pengidentifikasi saja harus digunakan saat meneruskan string permintaan penelusuran ke driver.

  • {attribute-value-list} adalah enumerasi nilai aktual yang valid untuk atribut-kata kunci yang sesuai. Perhatikan bahwa kurung kurawal ({}) tidak menunjukkan daftar pilihan; kurung kurawal dikembalikan oleh driver. Misalnya, mungkin daftar nama server atau daftar nama database.

  • Jika nilai atribut adalah tanda tanya tunggal (?), satu nilai sesuai dengan kata kunci atribut. Misalnya, UID=JohnS; PWD=Wijen.

  • Setiap panggilan ke SQLBrowseConnect hanya mengembalikan informasi yang diperlukan untuk memenuhi tingkat proses koneksi berikutnya. Driver mengaitkan informasi status dengan handel koneksi sehingga konteks selalu dapat ditentukan pada setiap panggilan.

Menggunakan SQLBrowseConnect

SQLBrowseConnect memerlukan koneksi yang dialokasikan. Manajer Driver memuat driver yang ditentukan di atau yang sesuai dengan nama sumber data yang ditentukan dalam string koneksi permintaan penelusuran awal; untuk informasi tentang kapan hal ini terjadi, lihat bagian "Komentar" di Fungsi SQLConnect. Driver dapat membuat koneksi dengan sumber data selama proses penjelajahan. Jika SQLBrowseConnect mengembalikan SQL_ERROR, koneksi yang terutang dihentikan dan koneksi dikembalikan ke status tidak tersambung.

Catatan

SQLBrowseConnect tidak mendukung pengumpulan koneksi. Jika SQLBrowseConnect dipanggil saat pengumpulan koneksi diaktifkan, SQLSTATE HY000 (Kesalahan umum) akan dikembalikan.

Ketika SQLBrowseConnect dipanggil untuk pertama kalinya pada koneksi, string koneksi permintaan penelusuran harus berisi kata kunci DSN atau kata kunci DRIVER . Jika string koneksi permintaan penelusuran berisi kata kunci DSN , Driver Manager menemukan spesifikasi sumber data yang sesuai dalam informasi sistem:

  • Jika Driver Manager menemukan spesifikasi sumber data yang sesuai, itu memuat DLL driver terkait; driver dapat mengambil informasi tentang sumber data dari informasi sistem.

  • Jika Manajer Driver tidak dapat menemukan spesifikasi sumber data yang sesuai, Manajer Driver menemukan spesifikasi sumber data default dan memuat DLL driver terkait; driver dapat mengambil informasi tentang sumber data default dari informasi sistem. "DEFAULT" diteruskan ke driver untuk DSN.

  • Jika Manajer Driver tidak dapat menemukan spesifikasi sumber data yang sesuai dan tidak ada spesifikasi sumber data default, itu mengembalikan SQL_ERROR dengan SQLSTATE IM002 (Sumber data tidak ditemukan dan tidak ada driver default yang ditentukan).

Jika string koneksi permintaan telusuri berisi kata kunci DRIVER , Manajer Driver memuat driver yang ditentukan; itu tidak mencoba menemukan sumber data dalam informasi sistem. Karena kata kunci DRIVER tidak menggunakan informasi dari informasi sistem, driver harus menentukan kata kunci yang cukup sehingga driver dapat terhubung ke sumber data hanya menggunakan informasi dalam string koneksi permintaan telusur.

Pada setiap panggilan ke SQLBrowseConnect, aplikasi menentukan nilai atribut koneksi dalam string koneksi permintaan penelusuran. Driver mengembalikan tingkat atribut dan nilai atribut berturut-turut dalam string koneksi hasil penelusuran; ini mengembalikan SQL_NEED_DATA selama ada atribut koneksi yang belum dijumlahkan dalam string koneksi permintaan penelusuran. Aplikasi ini menggunakan konten string koneksi hasil penelusuran untuk membangun string koneksi permintaan penelusuran untuk panggilan berikutnya ke SQLBrowseConnect. Semua atribut wajib (yang tidak didahului oleh tanda bintang dalam argumen OutConnectionString ) harus disertakan dalam panggilan berikutnya ke SQLBrowseConnect. Perhatikan bahwa aplikasi tidak dapat menggunakan konten string koneksi hasil penelusuran sebelumnya saat membangun string koneksi permintaan penelusuran saat ini; artinya, tidak dapat menentukan nilai yang berbeda untuk atribut yang ditetapkan di tingkat sebelumnya.

Ketika semua tingkat koneksi dan atribut terkait telah dijumlahkan, driver mengembalikan SQL_SUCCESS, koneksi ke sumber data selesai, dan string koneksi lengkap dikembalikan ke aplikasi. String koneksi cocok untuk digunakan, bersama dengan SQLDriverConnect, dengan opsi SQL_DRIVER_NOPROMPT untuk membuat koneksi lain. String koneksi lengkap tidak dapat digunakan dalam panggilan lain ke SQLBrowseConnect, namun; jika SQLBrowseConnect dipanggil lagi, seluruh urutan panggilan harus diulang.

SQLBrowseConnect juga mengembalikan SQL_NEED_DATA jika ada kesalahan nonfatal yang dapat dipulihkan selama proses penelusuran; misalnya, kata kunci kata sandi atau atribut yang tidak valid yang disediakan oleh aplikasi. Ketika SQL_NEED_DATA dikembalikan dan string koneksi hasil penelusuran tidak berubah, kesalahan telah terjadi dan aplikasi dapat memanggil SQLGetDiagRec untuk mengembalikan SQLSTATE untuk kesalahan penelusuran waktu. Ini memungkinkan aplikasi untuk memperbaiki atribut dan melanjutkan penelusuran.

Aplikasi dapat menghentikan proses penelusuran kapan saja dengan memanggil SQLDisconnect. Driver akan mengakhiri koneksi yang belum terputus dan mengembalikan koneksi ke status tidak tersambung.

Jika operasi asinkron diaktifkan pada handel koneksi, SQLBrowseConnect mungkin juga mengembalikan SQL_STILL_EXECUTING. Saat mengembalikan SQL_NEED_DATA, aplikasi harus menggunakan SQLDisconnect untuk membatalkan proses penelusuran. Jika SQLBrowseConnect mengembalikan SQL_STILL_EXECUTING, aplikasi harus menggunakan SQLCancelHandle untuk membatalkan operasi yang sedang berlangsung. Memanggil SQLCancelHandle setelah fungsi mengembalikan SQL_NEED_DATA tidak berpengaruh.

Untuk informasi selengkapnya, lihat Menyambungkan dengan SQLBrowseConnect.

Jika driver mendukung SQLBrowseConnect, bagian kata kunci driver dalam informasi sistem untuk driver harus berisi kata kunci ConnectFunctions dengan karakter ketiga yang diatur ke "Y."

Contoh Kode

Catatan

Jika Anda menyambungkan ke penyedia sumber data yang mendukung autentikasi Windows, Anda harus menentukan Trusted_Connection=yes alih-alih ID pengguna dan informasi kata sandi dalam string koneksi.

Dalam contoh berikut, aplikasi memanggil SQLBrowseConnect berulang kali. Setiap kali SQLBrowseConnect mengembalikan SQL_NEED_DATA, SQLBrowseConnect mengembalikan informasi tentang data yang dibutuhkan dalam *OutConnectionString. Aplikasi meneruskan OutConnectionString ke GetUserInput rutinnya (tidak ditampilkan). GetUserInput mengurai informasi, membangun, dan menampilkan kotak dialog, dan mengembalikan informasi yang dimasukkan oleh pengguna di *InConnectionString. Aplikasi meneruskan informasi pengguna ke driver dalam panggilan berikutnya ke SQLBrowseConnect. Setelah aplikasi memberikan semua informasi yang diperlukan bagi driver untuk terhubung ke sumber data, SQLBrowseConnect mengembalikan SQL_SUCCESS dan aplikasi berlanjut.

Untuk contoh yang lebih rinci tentang menyambungkan ke driver SQL Server dengan memanggil SQLBrowseConnect, lihat Contoh Penjelajahan SQL Server.

Misalnya, untuk menyambungkan ke sumber data Penjualan, tindakan berikut mungkin terjadi. Pertama, aplikasi meneruskan string berikut ke SQLBrowseConnect:

"DSN=Sales"  

Driver Manager memuat driver yang terkait dengan penjualan sumber data. Kemudian memanggil fungsi SQLBrowseConnect driver dengan argumen yang sama dengan yang diterimanya dari aplikasi. Driver mengembalikan string berikut dalam *OutConnectionString:

"HOST:Server={red,blue,green};UID:ID=?;PWD:Password=?"  

Aplikasi meneruskan string ini ke rutinitas GetUserInput-nya, yang membangun kotak dialog yang meminta pengguna untuk memilih server merah, biru, atau hijau dan memasukkan ID pengguna dan kata sandi. Rutinitas meneruskan kembali informasi yang ditentukan pengguna berikut di *InConnectionString, yang diteruskan aplikasi ke SQLBrowseConnect:

"HOST=red;UID=Smith;PWD=Sesame"  

SQLBrowseConnect menggunakan informasi ini untuk menyambungkan ke server merah sebagai Smith dengan kata sandi Sesame, lalu mengembalikan string berikut di *OutConnectionString:

"*DATABASE:Database={SalesEmployees,SalesGoals,SalesOrders}"  

Aplikasi meneruskan string ini ke rutinitas GetUserInput-nya, yang membangun kotak dialog yang meminta pengguna untuk memilih database. Pengguna memilih empdata dan aplikasi memanggil SQLBrowseConnect waktu terakhir dengan string ini:

"DATABASE=SalesOrders"  

Ini adalah bagian akhir dari informasi yang dibutuhkan driver untuk terhubung ke sumber data; SQLBrowseConnect mengembalikan SQL_SUCCESS, dan *OutConnectionString berisi string koneksi yang telah selesai:

// SQLBrowseConnect_Function.cpp  
// compile with: odbc32.lib  
#include <windows.h>  
#include <sqltypes.h>  
#include <sqlext.h>  
  
#define BRWS_LEN 100  
SQLHENV henv;  
SQLHDBC hdbc;  
SQLHSTMT hstmt;  
SQLRETURN retcode;  
SQLCHAR szConnStrIn[BRWS_LEN], szConnStrOut[BRWS_LEN];  
SQLSMALLINT cbConnStrOut;  
  
void GetUserInput(SQLCHAR * szConnStrOut, SQLCHAR * szConnStrIn) {}  
  
int main() {  
   // Allocate the environment handle.  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);        
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
  
      // Set the version environment attribute.  
      retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);  
      if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
  
         // Allocate the connection handle.  
         retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  
         if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
            // Call SQLBrowseConnect until it returns a value other than SQL_NEED_DATA   
            // (pass data source name the first time).  If SQL_NEED_DATA is returned, call GetUserInput   
            // (not shown) to build a dialog from the values in szConnStrOut.  The user-supplied values   
            // are returned in szConnStrIn, which is passed in the next call to SQLBrowseConnect.  
  
            strcpy_s((char*)szConnStrIn, _countof(szConnStrIn), "DSN=Sales");  
            do {  
               retcode = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS,  
                  szConnStrOut, BRWS_LEN, &cbConnStrOut);  
               if (retcode == SQL_NEED_DATA)  
                  GetUserInput(szConnStrOut, szConnStrIn);  
            } while (retcode == SQL_NEED_DATA);  
  
            if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){  
  
               // Allocate the statement handle.  
               retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
               if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
                  // Process data after successful connection  
                  SQLFreeHandle(SQL_HANDLE_STMT, hstmt);  
               SQLDisconnect(hdbc);  
            }  
         }  
         SQLFreeHandle(SQL_HANDLE_DBC, hdbc);  
      }  
   }  
   SQLFreeHandle(SQL_HANDLE_ENV, henv);  
}  
Untuk informasi tentang Lihat
Mengalokasikan handel koneksi Fungsi SQLAllocHandle
Menyambungkan ke sumber data Fungsi SQLConnect
Memutuskan sambungan dari sumber data Fungsi SQLDisconnect
Menyambungkan ke sumber data menggunakan string koneksi atau kotak dialog Fungsi SQLDriverConnect
Mengembalikan deskripsi dan atribut driver Fungsi SQLDrivers
Mengosongkan handel koneksi Fungsi SQLFreeHandle

Lihat Juga

Referensi API ODBC
File Header ODBC