SQLDriverConnect İşlevi

Uygunluk
Tanıtılan Sürüm: ODBC 1.0 Standartlar Uyumu: ODBC

Özet
SQLDriverConnect , SQLConnect'e alternatif olarak sunulmaktadır. SQLConnect'teki üç argümana göre daha fazla bağlantı bilgisi gerektiren veri kaynaklarını, kullanıcıya tüm bağlantı bilgilerini soran diyalog kutularını ve sistem bilgilerinde tanımlanmayan veri kaynaklarını destekler. Daha fazla bilgi için SQLDriverConnect ile bağlantı kurma bölümünü inceleyebilirsiniz.

Syntax

  
SQLRETURN SQLDriverConnect(  
     SQLHDBC         ConnectionHandle,  
     SQLHWND         WindowHandle,  
     SQLCHAR *       InConnectionString,  
     SQLSMALLINT     StringLength1,  
     SQLCHAR *       OutConnectionString,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLength2Ptr,  
     SQLUSMALLINT    DriverCompletion);  

Arguments

ConnectionHandle
[Giriş] Bağlantı tutamacı.

WindowHandle
[Giriş] Pencere kolu. Uygulama, varsa ana pencerenin tutamacını veya pencere kolu geçerli değilse veya SQLDriverConnect herhangi bir diyalog kutusu göstermiyorsa bir null işaretçiyi geçirebilir.

InConnectionString
[Giriş] Tam bir bağlantı dizesi (bkz. "Comments"teki sözdizim), kısmi bağlantı dizesi veya boş bir string.

StringLength1
[Giriş] *InConnectionString'in uzunluğu, eğer dizi Unicode'sa, karakter olarak, eğer dizi ANSI veya DBCS ise baytlarla.

OutConnectionString
[Çıkış] Tamamlanmış bağlantı dizesi için bir tampona işaret edin. Hedef veri kaynağına başarılı bağlantı sağlandığında, bu tampon tamamlanmış bağlantı dizesi'i içerir. Uygulamalar bu tampon için en az 1.024 karakter ayırmalıdır.

OutConnectionString NULL ise, StringLength2Ptr yine de OutConnectionString tarafından işaret edilen tamponda döndürülebilecek toplam karakter sayısını (karakter verisi için null-terminasyon karakteri hariç) döndürecektir.

BufferLength
[Giriş] *OutConnectionString tamponunun uzunluğu, karakter cinsinden.

StringLength2Ptr
[Çıkış] *OutConnectionString'de döndürülebilecek toplam karakter sayısını (null-sonlandırma karakteri hariç) döndürmek için bir tampon işareti. Döndürülebilecek karakter sayısı BufferLength'den büyük veya eşitse, *OutConnectionString'deki tamamlanan bağlantı dizesi BufferLength olarak kısaltılır; null-termination karakterinin uzunluğu çıkarılır.

DriverCompletion
[Giriş] Sürücü Menecerinin veya sürücünün daha fazla bağlantı bilgisi isteyip istemediğini gösteren bayrak:

SQL_DRIVER_PROMPT, SQL_DRIVER_COMPLETE, SQL_DRIVER_COMPLETE_REQUIRED ya da SQL_DRIVER_NOPROMPT.

(Ek bilgi için "Yorumlar" bölümüne bakınız.)

İadeler

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_ERROR, SQL_INVALID_HANDLE veya SQL_STILL_EXECUTING.

Diagnostics

SQLDriverConnect SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri, SQL_HANDLE_DBC fHandleType ve ConnectionHandlehHandle ile SQLGetDiagRec çağrılmasıyla elde edilebilir. Aşağıdaki tablo, SQLDriverConnect tarafından sıkça duygulanan SQLSTATE değerlerini listeler ve her birini bu fonksiyonun bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.

SQLSTATE Error Açıklama
01000 Genel uyarı Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
01004 Dize verileri, sağ kesilmiş *OutConnectionString tamponu tüm bağlantı dizesi'i geri döndürecek kadar büyük değildi, bu yüzden bağlantı dizesi kesildi. Kısmamış bağlantı dizesi'in uzunluğu *StringLength2Ptr içinde döner. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
01S00 Geçersiz bağlantı dizesi özniteliği Geçersiz bir özellik anahtar kelimesi bağlantı dizesi'te (InConnectionString) belirtilmişti, ancak sürücü yine de veri kaynağına bağlanabiliyordu. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
01S02 Seçenek değeri değiştirildi Sürücü, SQLSetConnectAttr'dekiValuePtr argümanı tarafından belirtilen değeri desteklemiyor ve benzer bir değeri değiştiriyordu. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
01S08 DSN dosya hata kaydetme *InConnectionString'deki dizide bir FILEDSN anahtar kelimesi bulunuyordu, ancak .dsn dosyası kaydedilmedi. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
01S09 Geçersiz anahtar kelime (DM) *InConnectionString'deki dizide bir SAVEFILE anahtar kelimesi bulunuyordu ancak bir DRIVER veya FILEDSN anahtar kelimesi yoktu. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
08001 İstemci bağlantı kuramıyor Sürücü, veri kaynağı ile bağlantı kuramadı.
08002 Bağlantının adı kullanımda (DM) Belirtilen ConnectionHandle zaten bir veri kaynağına bağlantı kurmak için kullanılmıştı ve bağlantı hâlâ açıktı.
08004 Sunucu bağlantıyı reddetti Veri kaynağı, uygulamada tanımlanmış nedenlerle bağlantının kurulmasını reddetti.
08S01 İletişim bağlantısı hatası Sürücü ile sürücünün bağlanmaya çalıştığı veri kaynağı arasındaki iletişim bağlantısı, SQLDriverConnect fonksiyonu işleme tamamlanmadan önce başarısız oldu.
28000 Geçersiz yetkilendirme spesifikasyonu Kullanıcı tanımlayıcısı ya da yetkilendirme dizisi, ya da her ikisi, bağlantı dizesi'de (InConnectionString) belirtildiği gibi, veri kaynağı tarafından tanımlanan kısıtlamaları ihlal etmiştir.
HY000 Genel hata Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *szMessageText tamponunda SQLGetDiagRec tarafından gönderilen hata mesajı, hatayı ve nedenini tanımlar.
HY000 Genel hata: Geçersiz dosya dsn (DM) *InConnectionString'deki dizide bir FILEDSN anahtar kelimesi bulunuyordu, ancak .dsn dosyasının adı bulunamadı.
HY000 Genel hata: Dosya tamponu oluşturulamıyor (DM) *InConnectionString'deki dizide bir FILEDSN anahtar kelimesi bulunuyordu, ancak .dsn dosyası okunamazdı.
HY001 Bellek ayırma hatası Sürücü Yöneticisi, SQLDriverConnect fonksiyonunun çalıştırılması veya tamamlanmasını desteklemek için gereken belleği ayıramıyordu.

Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı.
HY008 İşlem iptal edildi ConnectionHandle için asenkron işlem etkinleştirildi. Fonksiyon çağrıldı ve çalıştırma tamamlanmadan önce SQLCancelHandle fonksiyonu ConnectionHandle üzerinde çağrıldı, ardından SQLDriverConnect fonksiyonu ConnectionHandle üzerinde tekrar çağrıldı.

Ya da SQLDriverConnect fonksiyonu çağrılır ve çalıştırma tamamlanmadan önce, çok iş parçacıklı bir uygulamadaki farklı bir iş parçacığından ConnectionHandleüzerinde SQLCancelHandle çağrılırdı.
HY010 İşlev dizisi hatası (DM) ConnectionHandle için başka bir asenkron çalışan fonksiyon (SQLDriverConnect değil) çağrıldı ve SQLDriverConnect fonksiyonu çağrıldığında hâlâ çalışıyordu.
HY013 Bellek yönetimi hatası SQLDriverConnect fonksiyon çağrısı, düşük bellek koşulları nedeniyle temel bellek nesnelerine erişilemediği için işlenemedi.
HY090 Geçersiz dize veya arabellek uzunluğu (DM) StringLength1 argümanı için belirtilen değer 0'dan küçüktü ve SQL_NTS'e eşit değildi.

(DM) BufferLength bağımsız değişkeni için belirtilen değer 0'dan küçüktür.
HY092 Geçersiz öznitelik/seçenek tanımlayıcısı (DM) DriverCompletion argümanı SQL_DRIVER_PROMPT ve WindowHandle argümanı bir null pointer'dı.
HY110 Geçersiz sürücü tamamlanması (DM) DriverCompletion argümanı için belirtilen değer SQL_DRIVER_PROMPT, SQL_DRIVER_COMPLETE, SQL_DRIVER_COMPLETE_REQUIRED veya SQL_DRIVER_NOPROMPT'e eşit değildi.

(DM) Bağlantı havuzu etkinleştirildi ve DriverCompletion argümanı için belirtilen değer SQL_DRIVER_NOPROMPT'a eşit değildi.
HYC00 İsteğe bağlı özellik uygulanmadı Sürücü, uygulamanın istediği ODBC davranış sürümünü desteklemez.
HYT00 Zaman aşımı süresi doldu Giriş süresi, veri kaynağına bağlantı tamamlanmadan önce sona erdi. Zaman aşımına sahip dönem SQLSetConnectAttr, SQL_ATTR_LOGIN_TIMEOUT üzerinden belirlenir.
HYT01 Bağlantı zaman aşımı süresi doldu Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır.
IM001 Sürücü bu işlevi desteklemiyor (DM) Belirtilen veri kaynağı adına karşılık gelen sürücü bu fonksiyonu desteklemez.
IM002 Veri kaynağı bulunamadı ve varsayılan sürücü belirtilmedi (DM) bağlantı dizesi'de belirtilen veri kaynağı adı (InConnectionString) sistem bilgilerinde bulunmadı ve varsayılan sürücü spesifikasyonu yoktu.

(DM) ODBC veri kaynağı ve varsayılan sürücü bilgileri sistem bilgilerinde bulunamadı.
IM003 Belirtilen sürücü yüklenemedi. (DM) Sistem bilgilerindeki veri kaynağı spesifikasyonunda listelenen veya DRIVER anahtar kelimesinde belirtilen sürücü bulunamadı veya başka bir nedenle yüklenemedi.
IM004 Sürücünün SQLAllocHandle SQL_HANDLE_ENV başarısız oldu (DM) SQLDriverConnect sırasında, Sürücü Yöneticisi sürücünün SQLAllocHandle fonksiyonunu fHandleType SQL_HANDLE_ENV ile çağırdı ve sürücü hata döndürdü.
IM005 Sürücünün SQLAllocHandle SQL_HANDLE_DBC üzerinde başarısız oldu. (DM) SQLDriverConnect sırasında, Sürücü Yöneticisi sürücünün SQLAllocHandle fonksiyonunu fHandleType SQL_HANDLE_DBC ile çağırdı ve sürücü hata döndürdü.
IM006 Driver'ın SQLSetConnectAttr başarısız oldu (DM) SQLDriverConnect sırasında, Sürücü Yöneticisi sürücünün SQLSetConnectAttr fonksiyonunu çağırdı ve sürücü hata döndürdü.
IM007 Veri kaynağı veya sürücü belirtilmemiştir; Diyalog yasak bağlantı dizesi'de veri kaynağı adı veya sürücü belirtilmedi ve DriverCompletion SQL_DRIVER_NOPROMPT.
IM008 Diyalog başarısız oldu Sürücü giriş iletişim kutusunu göstermeye çalıştı ama başarısız oldu.

WindowHandle bir null pointer'dı ve DriverCompletion SQL_DRIVER_NO_PROMPT değildi.
IM009 Çeviri DLL'i yüklenemez Sürücü, veri kaynağı veya bağlantı için belirtilen çeviri DLL'sini yükleyemedi.
IM010 Veri kaynağı adı çok uzun (DM) DSN anahtar kelimesinin öznitelik değeri SQL_MAX_DSN_LENGTH karakterden uzundu.
IM011 Sürücü adı çok uzun (DM) DRIVER anahtar kelimesinin öznitelik değeri 255 karakterden uzundu.
IM012 DRIVER anahtar kelime sözdizimi hatası (DM) DRIVER anahtar kelimesi için anahtar kelime-değer çiftinde bir sözdizimi hatası bulunuyordu.

(DM) *InConnectionString'deki dizide bir FILEDSN anahtar kelimesi bulunuyordu, ancak .dsn dosyasında DRIVER anahtar kelimesi veya DSN anahtar kelimesi bulunmuyordu.
IM014 Belirtilen DSN, Sürücü ile Uygulama arasında mimari uyumsuzluğu içerir (DM) 32-bit uygulama, 64-bit sürücüye bağlanan bir DSN kullanır; ya da tam tersi.
IM015 Sürücünün SQLDriverConnect SQL_HANDLE_DBC_INFO_HANDLE üzerinde başarısız oldu Bir sürücü SQL_ERROR dönerse, Sürücü Yöneticisi SQL_ERROR uygulamaya döner ve bağlantı başarısız olur.

SQL_HANDLE_DBC_INFO_TOKEN hakkında daha fazla bilgi için bkz. ODBC Sürücüsünde Farkındalık Connection-Pool Geliştirme.
IM017 Yoklama zaman uyumsuz bildirim modunda devre dışı bırakıldı Bildirim modeli her kullanıldığında yoklama devre dışı bırakılır.
IM018 SQLCompleteAsync , bu tanıtıcıda önceki zaman uyumsuz işlemi tamamlamak için çağrılmadı. Tanıtıcıdaki önceki işlev çağrısı SQL_STILL_EXECUTING döndürüyorsa ve bildirim modu etkinleştirildiyse, son işlemeyi yapmak ve işlemi tamamlamak için tanıtıcıda SQLCompleteAsync çağrılmalıdır.
S1118 Sürücü asenkron bildirimi desteklemiyor Sürücü asenkron bildirimi desteklemiyorsa, SQL_ATTR_ASYNC_DBC_EVENT veya SQL_ATTR_ASYNC_DBC_RETCODE_PTR ayarlayamazsınız.

Comments

Bir bağlantı dizesi şu sözdizimine sahiptir:

bağlantı-dizisi ::= boş-dize[;] | öznitelik[;] | nitelik; bağlantı dizisi

boş-string ::=öznitelik ::= öznitelik-anahtar kelime=öznitelik-değer | DRIVER=[{]attribute-value[}]

attribute-keyword ::= DSN | UID | PWD | driver-defined-attributed-keyword

öznitelik-değeri ::= karakter-dizisi

driver-defined-attribute-keyword ::= tanımlayıcı

burada karakter-dizisi sıfır veya daha fazla karaktere sahiptir; tanımlayıcı bir veya daha fazla karakterden oluşur; öznitelik-anahtar kelime büyük harf duyarlı değildir; öznitelik-değeri beve duyarlı olabilir; ve DSN anahtar kelimesinin değeri sadece boşluklardan oluşmaz.

bağlantı dizesi ve başlatma dosyası dilbilgisi, anahtar kelimeler ve öznitelik değerleri nedeniyle []{}(),;? karakterlerini içerir. *=!@ diş telleriyle birlikte kullanılmamalıdır. DSN anahtar sözcüğü değeri yalnızca boşluklardan oluşamaz ve baştaki boşlukları içermemelidir. Sistem bilgilerinin dil bilgisi nedeniyle anahtar sözcükler ve veri kaynağı adları ters eğik çizgi (\) karakterini içeremez.

Uygulamalar, öznitelik değerinin etrafına DRIVER anahtar kelimesinden sonra destek eklemek zorunda değildir; öznitelikte nokta virgül (;), bu durumda braketler gereklidir. Sürücünün aldığı öznitelik değeri küme ayraçları içeriyorsa, sürücü bunları kaldırmamalıdır, ancak döndürülen bağlantı dizesinin bir parçası olmalıdır.

DSN veya bağlantı dizesi değeri, [](),;? karakterlerinden herhangi birini içeren braketlerle ({}) eklenmiş{} *=!@ sürücüye sağlam olarak aktarılır. Ancak, bu karakterler bir anahtar kelimede kullanıldığında, Sürücü Yöneticisi dosya DSN'leriyle çalışırken hata döndürür ancak normal bağlantı dizileri için bağlantı dizesi'i sürücüye iletir. Bir anahtar sözcük değerinde katıştırılmış küme ayraçları kullanmaktan kaçının.

Bağlantı dizesi herhangi bir sayıda sürücü tanımlı anahtar sözcük içerebilir. DRIVER anahtar kelimesi sistem bilgisinden bilgi kullanmadığı için, sürücü sadece bağlantı dizesi'deki bilgileri kullanarak bir veri kaynağına bağlanabilmesi için yeterli anahtar kelime tanımlamalıdır. (Daha fazla bilgi için, bu bölümün ilerleyen bölümlerinde "Sürücü Rehberleri" bölümüne bakınız.) Sürücü, veri kaynağına bağlanmak için hangi anahtar kelimelerin gerekeceğini tanımlar.

Aşağıdaki tablo, DSN, FILEDSN, DRIVER, UID, PWD ve SAVEFILE anahtar kelimelerinin öznitelik değerlerini açıklar.

Keyword Öznitelik değeri tanımı
DSN SQLDataSources veya SQLDriverConnect'in veri kaynakları iletişim kutusu tarafından döndürülen veri kaynağı adı.
FILEDSN Veri kaynağı için bir bağlantı dizesi oluşturulacak .dsn dosyasının adı. Bu veri kaynaklarına dosya veri kaynakları denir.
SÜRÜCÜ SQLDrivers fonksiyonu tarafından döndürülen sürücünün tanımı. Örneğin, Rdb veya SQL Server.
UID Kullanıcı kimliği.
PWD Kullanıcı kimliğine karşılık gelen şifre veya kullanıcı kimliği için şifre yoksa boş bir dizi (PWD=;).
KAYDEDİLİŞ DOSYASI Mevcut ve başarılı bağlantıyı kurmak için kullanılan anahtar kelimelerin öznitelik değerlerinin kaydedilmesi gereken .dsn dosyasının dosya adı.

Bir uygulamanın veri kaynağı veya sürücü seçme şekli hakkında bilgi için Veri Kaynağı veya Sürücü Seçme bölümüne bakınız.

Eğer bağlantı dizesi'de herhangi bir anahtar kelime tekrarlanırsa, sürücü anahtar kelimenin ilk kez gerçekleştiği değeri kullanır. DSN ve DRIVER anahtar kelimeleri aynı bağlantı dizesi'te yer alıyorsa, Driver Manager ve sürücü önce görünen anahtar kelimeyi kullanır.

FILEDSN ve DSN anahtar kelimeleri birbirini dışlar: hangi anahtar kelime önce görünürse kullanılır, ikinci görünen ise göz ardı edilir. Öte yandan, FILEDSN ve DRIVER anahtar kelimeleri birbirini dışlamaz. Eğer herhangi bir anahtar kelime FILEDSN ile bir bağlantı dizesi'te görünürse, bağlantı dizesi'deki anahtar kelimenin öznitelik değeri, .dsn dosyasındaki aynı anahtar kelimenin öznitelik değeri yerine kullanılır.

Eğer FILEDSN anahtar kelimesi kullanılırsa, .dsn dosyasında belirtilen anahtar kelimeler bir bağlantı dizesi oluşturmak için kullanılır. (Daha fazla bilgi için, bu bölümün ilerleyen bölümlerinde "Dosya Veri Kaynakları"na bakınız.) UID anahtar kelimesi isteğe bağlıdır; .dsn dosyası yalnızca DRIVER anahtar kelimesiyle oluşturulabilir. PWD anahtar kelimesi .dsn dosyasında saklanmaz. .dsn dosyasının kaydedilmesi ve yüklenmesi için varsayılan dizin, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion ve "ODBC\DataSources" içinde CommonFileDir tarafından belirtilen yolun birleşimi olacaktır. (Eğer CommonFileDir "C:\Program Files\Common Files" olsaydı, varsayılan dizin "C:\Program Files\Common Files\ODBC\Data Sources" olurdu.)

Note

.dsn dosyası, kurulumcu DLL'de SQLReadFileDSN ve SQLWriteFileDSN fonksiyonları çağrılarak doğrudan yönetilebilir.

Eğer SAVEFILE anahtar kelimesi kullanılırsa, mevcut ve başarılı bağlantının oluşturulmasında kullanılan anahtar kelimelerin öznitelik değerleri, SAVEFILE anahtar kelimesinin öznitelik değerinin adıyla birlikte .dsn dosyası olarak kaydedilir. SAVEFILE anahtar kelimesi, DRIVER anahtar kelimesi, FILEDSN anahtar kelimesi veya her ikisi ile birlikte kullanılmalıdır, aksi takdirde fonksiyon SQLSTATE 01S09 (Geçersiz anahtar kelime) ile SQL_SUCCESS_WITH_INFO döndürmelidir. SAVEFILE anahtar kelimesi, bağlantı dizesi'te DRIVER anahtar kelimesinden önce görünmelidir, aksi takdirde sonuçlar tanımlanmamış olur.

Sürücü Yöneticisi Yönergeleri

Driver Manager, sürücünün SQLDriverConnect fonksiyonunun InConnectionString argümanında sürücüye iletmek için bir bağlantı dizesi oluşturur. Driver Manager, uygulama tarafından kendisine iletilen InConnectionString argümanını değiştirmez.

Driver Manager'ın eylemi, DriverCompletion argümanının değerine dayanır:

  • SQL_DRIVER_PROMPT: Eğer bağlantı dizesi DRIVER, DSN veya FILEDSN anahtar kelimesini içermiyorsa, Sürücü Yöneticisi Veri Kaynakları iletişim kutusunu gösterir. Diyalog kutusu tarafından döndürülen veri kaynağı adından ve uygulama tarafından ona iletilen diğer anahtar kelimelerden bir bağlantı dizesi oluşturur. Eğer iletişim kutusunun geri dönen veri kaynağı adı boşsa, Sürücü Yöneticisi anahtar kelime-değer çiftini DSN=Varsayılan olarak belirtir. (Bu diyalog kutusu "Default" adlı bir veri kaynağını göstermez.)

  • SQL_DRIVER_COMPLETE veya SQL_DRIVER_COMPLETE_REQUIRED: Uygulama tarafından belirtilen bağlantı dizesi DSN anahtar kelimesini içeriyorsa, Sürücü Yöneticisi uygulamanın belirttiği bağlantı dizesi kopyalar. Aksi takdirde, DriverCompletion SQL_DRIVER_PROMPT olduğunda yaptığı aynı işlemleri yapar.

  • SQL_DRIVER_NOPROMPT: Sürücü Yöneticisi, uygulamanın belirttiği bağlantı dizesi kopyalar.

Uygulama tarafından belirtilen bağlantı dizesi DRIVER anahtar kelimesini içeriyorsa, Driver Manager uygulama tarafından belirtilen bağlantı dizesi'i kopyalar.

Oluşturduğu bağlantı dizesi'i kullanarak, Driver Manager hangi sürücünün kullanılacağını belirler, o sürücüye bağlanır ve oluşturduğu bağlantı dizesi'i sürücüye iletir; Driver Manager ile sürücünün etkileşimi hakkında daha fazla bilgi için SQLConnect Fonksiyonu'ndaki "Yorumlar" bölümüne bakınız. Eğer bağlantı dizesi DRIVER anahtar kelimesini içermiyorsa, Driver Manager hangi sürücünün kullanılacağını şu şekilde belirler:

  1. Eğer bağlantı dizesi DSN anahtar kelimesini içeriyorsa, Driver Manager sistem bilgilerinden veri kaynağına ilişkin sürücüyü alır.

  2. Eğer bağlantı dizesi DSN anahtar kelimesini içermiyorsa veya veri kaynağı bulunmazsa, Driver Manager sistem bilgilerinden Varsayılan veri kaynağına bağlı sürücüyü alır. (Daha fazla bilgi için bkz. Varsayılan Alt Anahtar.) Driver Manager, bağlantı dizesi'deki DSN anahtar kelimesinin değerini "DEFAULT" olarak değiştirir.

  3. Eğer bağlantı dizesi'deki DSN anahtar kelimesi "DEFAULT" olarak ayarlanmışsa, Driver Manager sistem bilgilerinden Varsayılan veri kaynağına bağlı sürücüyü alır.

  4. Veri kaynağı bulunmazsa ve Varsayılan veri kaynağı bulunmazsa, Sürücü Yöneticisi SQLSTATE IM002 (Veri kaynağı bulunmadı ve varsayılan sürücü belirtilmedi) ile SQL_ERROR döner.

Dosya Veri Kaynakları

Eğer uygulamanın SQLDriverConnect çağrısında belirttiği bağlantı dizesi FILEDSN anahtar kelimesini içeriyorsa ve bu anahtar kelime DSN veya DRIVER anahtar kelimesi tarafından değiştirilmiyorsa, Driver Manager .dsn dosyasındaki bilgiler ve InConnectionString argümanı kullanılarak bir bağlantı dizesi oluşturur. Sürücü Müdürü şu şekilde devam eder:

  1. .dsn dosyasının adının geçerli olup olmadığını kontrol eder. Eğer değilse, SQLSTATE IM014 (Dosyanın geçersiz adı DSN) ile SQL_ERROR döndürür. Dosya adı boş bir dizedirse ("") ve SQL_DRIVER_NOPROMPT belirtilmemişse, Dosya Açma diyalog kutusu görüntülenir. Dosya adı geçerli bir yol içeriyorsa ancak dosya adı veya geçersiz bir dosya adı yoksa ve SQL_DRIVER_NOPROMPT belirtilmemişse, Dosya-Aç diyalog kutusu mevcut dizin dosya adında belirtilen dizinle gösterilir. Dosya adı boş bir dizis ("") ise veya dosya adı geçerli bir yol içeriyorsa ancak dosya adı ya da geçersiz bir dosya adı içermiyorsa ve SQL_DRIVER_NOPROMPT belirtiliyorsa, SQL_ERROR SQLSTATE IM014 (Dosyanın geçersiz adı DSN) ile döner.

  2. .dsn dosyasının [ODBC] bölümündeki tüm anahtar kelimeleri okur. DRIVER anahtar kelimesi yoksa, .dsn dosyası paylaşılamaz ve dolayısıyla sadece DSN anahtar kelimesi içeren durumlarda SQLSTATE IM012 (Driver anahtar kelime hatası var) ile SQL_ERROR döner.

    Dosya veri kaynağı paylaşılamazsa, Sürücü Yöneticisi DSN anahtar kelimesinin değerini okur ve gerekirse paylaşılamayan dosya veri kaynağı tarafından yönlendirilen kullanıcı veya sistem veri kaynağına bağlanır. 3'ten 5'e kadar olan adımlar yapılmaz.

  3. Sürücü için bir bağlantı dizesi oluşturur. Sürücü bağlantı dizesi, .dsn dosyasında belirtilen anahtar kelimeler ile orijinal uygulama bağlantı dizesi'inde belirtilen anahtar kelimelerin birleşimidir. Anahtar kelimelerin örtüştüğü sürücü bağlantı dizesi'in oluşturulması için kurallar şunlardır:

    • Eğer DRIVER anahtar kelimesi uygulama bağlantı dizesi'inde bulunuyorsa ve DRIVER anahtar kelimeleriyle belirtilen sürücüler .dsn dosyası ile uygulama bağlantı dizesi'te aynı değilse, .dsn dosyasındaki sürücü bilgileri göz ardı edilir ve uygulama bağlantı dizesi'deki sürücü bilgileri kullanılır. DRIVER anahtar kelimesi tarafından belirtilen sürücüler .dsn dosyasında ve uygulamanın bağlantı dizesi'inde aynıysa, tüm anahtar kelimeler örtüşüyorsa, uygulama bağlantı dizesi'de belirtilenler, .dsn dosyasında belirtilenlere göre önceliklidir.

    • Yeni bağlantı dizesi'te FILEDSN anahtar kelimesi kaldırılır.

  4. Sürücü Adı DRIVER anahtar kelimesiyle belirtildiği kayıt girişine bakarak sürücüyü yükler; HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\<Driver> Name\Driver><

  5. Sürücüye yeni bağlantı dizisini verir.

.dsn dosyalarına örnekler için bkz. Dosya Veri Kaynakları Kullanılarak Bağlantı Bağlantısı.

SAVEFILE Anahtar Kelimesi

Uygulama tarafından belirtilen bağlantı dizesi SAVEFILE anahtar kelimesini içeriyorsa, Driver Manager bağlantı dizesi'i .dsn dosyasında kaydeder. Sürücü Müdürü şu şekilde devam eder:

  1. SAVEFILE anahtar kelimesinin öznitelik değeri olarak dahil edilen .dsn dosyasının dosya adının geçerli olup olmadığını kontrol eder. Eğer değilse, SQLSTATE IM014 (Dosyanın geçersiz adı DSN) ile SQL_ERROR döndürür. Dosya adının geçerliliği, standart sistem adlandırma kurallarıyla belirlenir. Dosya adı boş bir dizedirse ("") ve DriverCompletion argümanı SQL_DRIVER_NOPROMPT değilse, dosya adı geçerlidir. Dosya adı zaten mevcutsa, DriverCompletion SQL_DRIVER_NOPROMPT ise, dosya üzerine yazılır. DriverCompletion SQL_DRIVER_PROMPT, SQL_DRIVER_COMPLETE veya SQL_DRIVER_COMPLETE_REQUIRED ise, bir iletişim kutusu kullanıcıya dosyanın üzerine yazılıp yazılmaması gerektiğini belirtir. Eğer Yok yazılırsa, Dosya-Kaydetme diyalog kutusu görünür.

  2. Sürücü SQL_SUCCESS döndürüyorsa ve dosya adı boş bir dizem değilse, Sürücü Yöneticisi, OutConnectionString argümanında döndürülen bağlantı bilgilerini, bu bölümün önceki bölümlerinde belirtilen "Bağlantı Dizleri" bölümünde belirtilen formatta belirtilen dosyaya yazar.

  3. Sürücü SQL_SUCCESS döndürüyorsa ve dosya adı boş bir diziyse (""), Sürücü Yöneticisi hwnd belirtilen Dosya Kaydetme ortak diyalog kutusunu çağırır ve OutConnectionString'de dönen bağlantı bilgilerini, bu bölümün önceki bölümlerinde belirtilen "Bağlantı Dizleri" bölümünde belirtilen formatla File-Save ortak diyalog kutusunda belirtilen dosyaya yazar.

  4. Sürücü SQL_SUCCESS dönerse, bağlantı dizesi içeren OutConnectionString argümanını uygulamaya döndürür.

  5. Sürücü SQL_SUCCESS_WITH_INFO veya SQL_ERROR döndürürse, Sürücü Yöneticisi SQLSTATE'i uygulamaya döndürür.

Sürücü Yönergeleri

Sürücü, Driver Manager tarafından kendisine iletilen bağlantı dizesi'in DSN veya DRIVER anahtar kelimesini içerip içermediğini kontrol eder. Eğer bağlantı dizesi DRIVER anahtar kelimesini içeriyorsa, sürücü sistem bilgilerinden veri kaynağı hakkında bilgi alamaz. Eğer bağlantı dizesi DSN anahtar kelimesini içeriyorsa veya DSN ya da DRIVER anahtar kelimesini içermiyorsa, sürücü sistem bilgilerinden veri kaynağı hakkında aşağıdaki şekilde bilgi alabilir:

  1. Eğer bağlantı dizesi DSN anahtar kelimesini içeriyorsa, sürücü belirtilen veri kaynağı için bilgileri alır.

  2. Eğer bağlantı dizesi DSN anahtar kelimesini içermiyorsa, belirtilen veri kaynağı bulunmuyorsa veya DSN anahtar kelimesi "DEFAULT" olarak ayarlanmışsa, sürücü Varsayılan veri kaynağı için bilgileri alır.

Sürücü, sistem bilgisinden aldığı herhangi bir bilgiyi, bağlantı dizesi'te kendisine iletilen bilgiyi artırmak için kullanır. Sistem bilgisindeki bilgi bağlantı dizesi'deki bilgiyi çoğaltıyorsa, sürücü bağlantı dizesi'deki bilgiyi kullanır.

DriverCompletion değerine dayanarak, sürücü kullanıcıya kullanıcı kimliği ve şifre gibi bağlantı bilgilerini sorar ve veri kaynağına bağlanır:

  • SQL_DRIVER_PROMPT: Sürücü, bağlantı dizesi değerleri ve sistem bilgisi (varsa) kullanılarak bir diyalog kutusu gösterir. Kullanıcı iletişim kutusundan çıktığında, sürücü veri kaynağına bağlanır. Ayrıca, *InConnectionString'dekiDSN veya DRIVER anahtar kelimesinin değerinden ve diyalog kutusundan geri dönen bilgilerden bir bağlantı dizesi oluşturur. Bu bağlantı dizesi'i *OutConnectionString buffer'ına yerleştirir.

  • SQL_DRIVER_COMPLETE veya SQL_DRIVER_COMPLETE_REQUIRED: Eğer bağlantı dizesi yeterli bilgi içeriyorsa ve bu bilgi doğruysa, sürücü veri kaynağına bağlanır ve *InConnectionString'i *OutConnectionString'e kopyalar. Herhangi bir bilgi eksikse veya yanlışsa, sürücü DriverCompletion SQL_DRIVER_PROMPT olduğunda yaptığı aynı işlemleri yapar; ancak DriverCompletion SQL_DRIVER_COMPLETE_REQUIRED olduğunda, sürücü veri kaynağına bağlanmak için gerekli olmayan bilgilerin kontrollerini devre dışı bırakır.

  • SQL_DRIVER_NOPROMPT: Eğer bağlantı dizesi yeterli bilgi içeriyorsa, sürücü veri kaynağına bağlanır ve *InConnectionString'i *OutConnectionString'e kopyalar. Aksi takdirde, sürücü SQLDriverConnect için SQL_ERROR döndürür.

Veri kaynağına başarılı bağlandığında, sürücü ayrıca *StringLength2Ptr'yi *OutConnectionString'de geri dönebilecek çıkış bağlantı dizesi'in uzunluğuna ayarlar.

Kullanıcı, Sürücü Yöneticisi veya sürücü tarafından sunulan bir iletişim kutusunu iptal ederse, SQLDriverConnect SQL_NO_DATA döner.

Bağlantı sürecinde Sürücü Yöneticisi ile sürücünün nasıl etkileşime girdiğine dair bilgi için SQLConnect Fonksiyonu sayfasına bakınız.

Bir sürücü SQLDriverConnect'i destekliyorsa, sürücünün sistem bilgisinin sürücü anahtar kelime bölümü, ikinci karakter ayarı "Y" olan ConnectFunctions anahtar kelimesini içermelidir.

Bağlantı havuzu etkinleştirildiğinde bağlanma

Bağlantı havuzu, bir uygulamanın zaten oluşturulmuş bir bağlantıyı yeniden kullanmasına olanak tanır. SQLDriverConnect çağrıldığında, Sürücü Yöneticisi, bağlantı havuzunun bir parçası olan ve bağlantı havuzunun parçası olan bir bağlantı kullanarak bağlantı kurmaya çalışır. Bağlantı havuzu hakkında daha fazla bilgi için SQLConnect Fonksiyonu sayfasına bakınız.

Bir uygulama, havuzlama etkin olduğu bir bağlantıda SQLDisconnect çağırmadan önce SQL_ATTR_RESET_CONNECTION ayarlayabilir. Daha fazla bilgi için bkz . SQLSetConnectAttr İşlevi.

Bir uygulama SQLDriverConnect'i havuzlu bağlantıya bağlamak için çağırdığında aşağıdaki kısıtlamalar geçerlidir:

  • SAVEFILE anahtar kelimesi bağlantı dizesi'te belirtildiğinde bağlantı havuzu işleme işlemi yapılmaz.

  • Bağlantı havuzu etkinleştirilmişse, SQLDriverConnect yalnızca SQL_DRIVER_NOPROMPT DriverCompletion argümanı ile çağrılabilir; eğer SQLDriverConnect başka herhangi bir DriverCompletion ile çağrılırsa, SQLSTATE HY110 (Geçersiz sürücü tamamlanması) geri döner.

Bağlantı Öznitelikleri

SQLSetConnectAttr kullanılarak ayarlanan SQL_ATTR_LOGIN_TIMEOUT bağlantı özniteliği, sürücünün başarılı bir bağlantı ile tamamlanmasını bekleme saniye sayısını tanımlar; ardından uygulamaya geri dönmek gerekir. Kullanıcıdan bağlantı dizesi'i tamamlaması istenirse, sürücü bağlantı sürecini başlattığında her giriş isteği için bir bekleme süresi başlar.

Sürücü, bağlantıyı varsayılan olarak SQL_MODE_READ_WRITE erişim modunda açar. Erişim modunu SQL_MODE_READ_ONLY olarak ayarlamak için, uygulama SQLDriverConnectConnect'i çağırmadan önce SQL_ATTR_ACCESS_MODE özniteliğiyle SQLSetConnectAttr'yi çağırmalıdır.

Eğer veri kaynağı için sistem bilgilerinde varsayılan bir çeviri kütüphanesi belirtilirse, sürücü onu yükler. Farklı bir çeviri kütüphanesi, SQL_ATTR_TRANSLATE_LIB özniteliğine sahip SQLSetConnectAttr çağrılarak yüklenebilir. Çeviri seçeneği, SQLSetConnectAttr ile SQL_ATTR_TRANSLATE_OPTION seçeneği çağrılarak belirtilebilir.

Daha fazla bilgi için SQLDriverConnect ile bağlantı kurma bölümünü inceleyebilirsiniz.

// SQLDriverConnect_ref.cpp  
// compile with: odbc32.lib user32.lib  
#include <windows.h>  
#include <sqlext.h>  
  
int main() {  
   SQLHENV henv;  
   SQLHDBC hdbc;  
   SQLHSTMT hstmt;  
   SQLRETURN retcode;  
  
   SQLCHAR OutConnStr[255];  
   SQLSMALLINT OutConnStrLen;  
  
   HWND desktopHandle = GetDesktopWindow();   // desktop's window handle  
  
   // 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, (SQLPOINTER*)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);  
  
            retcode = SQLDriverConnect( // SQL_NULL_HDBC  
               hdbc,   
               desktopHandle,   
               (SQLCHAR*)"driver=SQL Server",   
               _countof("driver=SQL Server"),  
               OutConnStr,  
               255,   
               &OutConnStrLen,  
               SQL_DRIVER_PROMPT );  
  
            // 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);  
   }  
}  

Ayrıca Örnek ODBC Programı'na bakınız.

Hakkında bilgi için Bkz:
Bir tutacağa tahsis etmek SQLAllocHandle Fonksiyonu
Bir veri kaynağına bağlanmak için gereken değerleri keşfetmek ve saymak SQLBrowseConnect Fonksiyonu
Veri kaynağına bağlanma SQLConnect İşlevi
Bir veri kaynağından kopma SQLDisconnect Fonksiyonu
Geri dönen sürücü tanımları ve özellikleri SQLDrivers Fonksiyonu
Bir sapı serbest bırakmak SQLFreeHandle Fonksiyonu
Bağlantı özelliği ayarı SQLSetConnectAttr İşlevi

Ayrıca Bkz.

ODBC API Referansı
ODBC Üst Bilgi Dosyaları