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 permintaan string koneksi (lihat "Argumen InConnectionString" di "Komentar").
StringLength1
[Input] Panjang *InConnectionString dalam karakter.
OutConnectionString
[Output] Arahkan ke buffer karakter untuk mengembalikan hasil penelusuran string koneksi (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.
Mengembalikan
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 hasil penelusuran string koneksi, sehingga string terpotong. Buffer *StringLength2Ptr berisi panjang hasil penelusuran yang tidak terpotong string koneksi. (Fungsi mengembalikan SQL_NEED_DATA.) |
01S00 | Atribut string koneksi tidak valid | Kata kunci atribut yang tidak valid ditentukan dalam permintaan penelusuran string koneksi (InConnectionString). (Fungsi mengembalikan SQL_NEED_DATA.) Kata kunci atribut ditentukan dalam permintaan penelusuran string koneksi (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 permintaan penelusuran string koneksi (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 permintaan penelusuran string koneksi (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
Permintaan penelusuran string koneksi memiliki sintaks berikut:
connection-string ::= attribute[;
] | atribut ;
connection-string;
atribut ::= attribute-keyword=
attribute-valueDRIVER=
| [{
]attribute-value[}
]
attribute-keyword ::= DSN
PWD
| 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 permintaan penelusuran string koneksi, driver menggunakan nilai yang terkait dengan kemunculan pertama kata kunci. Jika kata kunci DSN dan DRIVER disertakan dalam permintaan penelusuran yang sama string koneksi, 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
Hasil penelusuran string koneksi adalah daftar atribut koneksi. Atribut koneksi terdiri dari kata kunci atribut dan nilai atribut yang sesuai. Hasil penelusuran string koneksi 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 hasil penelusuran string koneksi 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 permintaan penelusuran awal string koneksi; 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, permintaan penelusuran string koneksi harus berisi kata kunci DSN atau kata kunci DRIVER. Jika permintaan penelusuran string koneksi 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 permintaan penelusuran string koneksi 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 permintaan penelusuran string koneksi.
Pada setiap panggilan ke SQLBrowseConnect, aplikasi menentukan nilai atribut koneksi dalam permintaan penelusuran string koneksi. Driver mengembalikan tingkat atribut dan nilai atribut berturut-turut dalam hasil penelusuran string koneksi; driver mengembalikan SQL_NEED_DATA selama ada atribut koneksi yang belum dijumlahkan dalam permintaan penelusuran string koneksi. Aplikasi ini menggunakan konten hasil penelusuran string koneksi untuk membangun permintaan penelusuran string koneksi 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 hasil penelusuran sebelumnya string koneksi saat membangun permintaan penelusuran saat ini string koneksi; artinya, aplikasi 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 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 hasil penelusuran string koneksi 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 di 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);
}
Fungsi Terkait
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 |