SQL Server için Microsoft ODBC Sürücüsü

ODBC sürücüsü indirme

ODBC, SQL Server için C ve C++ dilinde yazılmış uygulamalar için birincil yerel veri erişim API'sidir. Microsoft ODBC Driver for SQL Server, SQL Server’a, Azure SQL Veritabanı’e, Azure SQL Yönetilen Örneği’a, Azure Synapse Analytics’e ve Microsoft Fabric’teki SQL veritabanına bağlanır. Her sürücü sürümünün desteklediği veritabanı sürümleri için SQL sürüm uyumluluğuna bakınız.

ODBC kullanabilen diğer diller COBOL, Perl, PHP ve Python'dır. ODBC, veri entegrasyon senaryolarında yaygın olarak kullanılır ve Microsoft Drivers for PHP for SQL Server bu sürücü üzerine inşa edilmiştir.

sqlcmd ve bcp yardımcı programları bu sürücüyle çalışır, ancak ayrı ayrı yüklenir: Linux ve macOS'ta mssql-tools18 paket, Windows'ta ise Microsoft Komut Satırı Utility. Transact-SQL (T-SQL) ifadeleri, sistem prosedürleri ve script dosyalarını çalıştırmak için sqlcmd kullanın. BCP'yi kullanarak verileri SQL Server örneği ile bir veri dosyası arasında, her iki yönde de toplu kopyalayabilirsiniz.

Başlangıç noktanızı seçin

Azure SQL için üretim temeli

Bu kod parçacığını üretim odaklı Azure SQL bağlantısı için başlangıç noktası olarak kullanın. Sunucu adını ve veritabanı adını uygulama yapılandırmasından yükler, yönetilen bir kimlik ile kimlik doğrulaması sağlar ve bağlantı dizesi'te hiçbir sır görünmemesini sağlar ve tam sertifika doğrulamasıyla Tabular Data Stream (TDS) 8.0 şifrelemesini etkinleştirir. Her oturum açma denemesi için bir zaman aşımı ayarlar ve geçici hataları üstel geri çekilme ve rastgele gecikme ile yeniden dener.

Bu makaledeki C++ snippeti, kısalık için include, handle allocation ve log helper bölümlerini çıkarır.

std::wstring BuildConnectionString(const wchar_t* server, const wchar_t* database) {
    std::wstring cs = L"Driver={ODBC Driver 18 for SQL Server}";
    cs += L";Server=tcp:"; cs += server; cs += L",1433";
    cs += L";Database="; cs += database;
    cs += L";Authentication=ActiveDirectoryMsi";   // managed identity, no stored secret
    cs += L";Encrypt=strict";                      // TDS 8.0 with certificate validation
    cs += L";ConnectRetryCount=3";                 // idle connection resiliency, not initial connect
    cs += L";ConnectRetryInterval=10";
    return cs;
}

// Transient fault codes documented for Azure SQL, plus the resource governance
// codes. Network termination and timeout errors (64, 233, 258, 10053, 10054,
// 10060) are retried a bounded number of times, which is the documented
// guidance for them. 258 is the code the driver reports for a connect timeout.
// 10053 and 10054 can also mean the encryption handshake failed rather than a
// plain network reset, so read the error text before assuming a network fault.
bool IsTransient(SQLINTEGER nativeError) {
    switch (nativeError) {
        case 615: case 926: case 4060: case 4221:
        case 10928: case 10929: case 10936:
        case 40197: case 40501: case 40613:
        case 42108: case 42109:
        case 49918: case 49919: case 49920:
        case 40020: case 40143: case 40166: case 40540:   // failover subcodes
        case 64: case 233: case 258:
        case 10053: case 10054: case 10060:
            return true;
        default:
            return false;
    }
}

// Retries only errors that a new connection can clear, with exponential backoff
// plus jitter so that concurrent clients don't retry in lockstep.
SQLRETURN ConnectWithRetry(SQLHDBC hDbc, const std::wstring& connectionString, int maxAttempts) {
    SQLRETURN rc = SQL_ERROR;
    for (int attempt = 1; attempt <= maxAttempts; ++attempt) {
        // Set the per-attempt connect timeout through the connection attribute.
        // This works on every driver version, so the sample doesn't depend on
        // which connection string keywords a given release accepts.
        SQLSetConnectAttrW(hDbc, SQL_ATTR_LOGIN_TIMEOUT,
                           reinterpret_cast<SQLPOINTER>(static_cast<SQLLEN>(30)), 0);

        rc = SQLDriverConnectW(hDbc, nullptr,
                               const_cast<SQLWCHAR*>(reinterpret_cast<const SQLWCHAR*>(connectionString.c_str())),
                               SQL_NTS, nullptr, 0, nullptr, SQL_DRIVER_NOPROMPT);
        if (SQL_SUCCEEDED(rc)) {
            Log("INFO", "connected on attempt %d/%d", attempt, maxAttempts);
            return rc;
        }

        // Walks the diagnostic records and returns the first record that carries
        // a real SQL Server error number. Microsoft Entra failures report several
        // driver-specific records first, whose native error is 0.
        SQLINTEGER native = LogDiagnostics(SQL_HANDLE_DBC, hDbc, "connect");
        if (attempt == maxAttempts || !IsTransient(native)) return rc;

        // Cap the backoff at 64 seconds. This also keeps the shift in range
        // when a caller passes a large maxAttempts.
        int shift = (attempt - 1 < 6) ? attempt - 1 : 6;
        DWORD delayMs = (1UL << shift) * 1000UL + (DWORD)(GetTickCount64() % 500);
        Log("WARN", "retrying in %lu ms (attempt %d/%d)", delayMs, attempt + 1, maxAttempts);
        Sleep(delayMs);
    }
    return rc;
}

ConnectRetryCount ve ConnectRetryInterval boşta bağlantı dayanıklılığını etkinleştirir; bu da boşta kalan bağlantıyı şeffaf şekilde geri getirir. İlk bağlantıyı tekrar denemez bu yüzden bu snippet uygulama düzeyinde yeniden denemeyi de uygular. İkisini de sakla.

ODBC, tanılama bilgilerini yalnızca dönüş kodu üzerinden değil, SQLGetDiagRec aracılığıyla bildirir; bu nedenle yeniden denemeden önce başarısızlıkları sınıflandırın. Bir kimlik doğrulama veya yapılandırma hatası hemen başarısız olur ve tüm yeniden deneme bütçesini tüketmez.

Bu yapılandırmanın her bölümü hakkında daha fazla bilgi için bkz:

Azure SQL geçici hatalarının kataloğu için geçici hata kodlarına bakınız.

Temel özellikler

  • Çapraz platform: Windows, Linux ve macOS'ta aynı API.
  • Microsoft Entra ID doğrulama: Yönetilen kimlik, hizmet prensibi, etkileşimli ve entegre akışlarla şifresiz bağlantılar.
  • Sıkı şifreleme: TDS 8.0 bağlantıları, sürüm 18 ve sonraki sürümlerde tam sertifika doğrulaması ile sağlanır.
  • Her Zaman Şifreli: Hassas sütunlar için istemci tarafı şifreleme, özel anahtar deposu sağlayıcılarını desteklemek.
  • Bağlantı dayanıklılığı: Boştayken kesilen bir bağlantının şeffaf olarak yeniden kurulması.
  • Yüksek kullanılabilirlik: MultiSubnetFailover ile kullanılabilirlik grubu dinleyicisi desteği.
  • Veri sınıflandırması: Sınıflandırılmış sütunlar için duyarlılık meta verileri.
  • Vektör veri tipi: Vektör tipi için yerel destek.
  • Dağıtık işlemler: Microsoft Dağıtılmış İşlem Düzenleyicisi (MSDTC) aracılığıyla XA işlem desteği.
  • Yardımcı araçlar: sqlcmd ve bcp, ayrı ayrı kurulmuş.

Başlayın

Makale Description
SQL Server için ODBC Sürücüsünü indirme Desteklenen her sürücü sürümü için kurulum ve paket indirmeleri, üç platformda da var.
C++ ile veritabanına bağlanın ve sorgulayın Bağlanan, sorgu çalıştıran ve sonuçları okuyan, böylece kurulumunuzu baştan uca onaylayabilmeniz için tam bir C++ örneği.
Destek yaşam döngüsü Hangi sürücü sürümlerinin hâlâ desteklenmeye devam ettiği ve her birinin destek kapsamından çıktığı tarih.
Başlıca sürüm farklılıkları Şifreleme varsayılan değişikliğinden başlayarak 17. sürümden 18. sürüme geçtiğinizde ne bozuluyor?

Sürücüyü yükleme

Makale Description
Sistem gereksinimleri, kurulum ve sürücü dosyaları (Windows) Desteklenen Windows sürümleri, sessiz dağıtım için kurulumcu komut satırı ve her sürücü dosyasının diske indiği yer.
Sistem gereksinimleri (Linux ve macOS) Her sürücü sürümünün desteklediği Linux dağıtımları ve macOS sürümleri ile SQL Server sürüm uyumluluğu.
ODBC sürücüsünü Linux'a yükleyin Alpine, Debian, Red Hat, SUSE, Ubuntu ve Azure Linux için paket yöneticisi adımları, ayrıca çevrimdışı kurulum ve sürücü dosya konumları.
ODBC sürücüsünü macOS'a yükleyin macOS için Homebrew tap ve formula adımları; 18, 17 veya 13.1 sürümünün nasıl kurulacağı da dahil.
UnixODBC sürücü yöneticisini (Linux ve macOS) kur Linux ve macOS'ta ODBC sürücüsünü yükleyen sürücü yöneticisi unixODBC'yi kur veya yükseltin.

Yapılandırma ve bağlanma

Makale Description
DSN ve bağlantı dizesi anahtar sözcükleri ve öznitelikleri Her biri için kabul edilen değerlerle birlikte bağlantı dizesi anahtar kelimeleri, DSN girişleri ve SQLSetConnectAttr niteliklerinin tam kataloğu.
Bağlantı dizisi anahtar kelimeleri ve veri kaynağı adları (Linux ve macOS) odbc.ini ve odbcinst.ini’in Linux ve macOS’ta bir DSN’yi nasıl tanımladığı ve ayrıca bu platformlara özgü TLS ve TCP bağlantıyı canlı tutma ayarları.
ODBC Veri Kaynağı Yöneticisi DSN (Windows) Bağlantı dizesi yerine kullanıcı arayüzü üzerinden bir veri kaynağı yapılandırdığınızda, Windows DSN sihirbazı sayfalarındaki her seçenek.
Sürücüye duyarlı bağlantı havuzu (Windows) Hangi bağlantı dizesi anahtar sözcükleri ve öznitelikleri bir bağlantıyı ayrı bir havuza yerleştirir ve hangileri bağlantıyı sıfırlamak için ek bir gidiş-dönüş gerektirir.

Doğrulama ve güvence

Makale Description
ODBC sürücüsü ile Microsoft Entra ID'yi kullanın Her Authentication anahtar kelime değeri, yönetilen kimlik ve hizmet prensibinden etkileşimli ve entegre hale kadar, her birinin ihtiyaç duyduğu kurulumla birlikte.
ODBC sürücüsüyle Her Zaman Şifrelenmiş Kullan İstemci sürecinde hassas sütunları şifreleyin ki düz metin sunucuya ulaşmasın, sürücünün API özeti ve belgelenmiş sınırlamalarıyla birlikte.
Veri sınıflandırma Sunucunun gizli sütunlara eklediği hassasiyet etiketlerini okuyun, böylece uygulamanız kendi veri koruma politikasını uygulayabilir.
Entegre kimlik doğrulama kullanın (Linux ve macOS) Kerberos'u Linux veya macOS istemcisi Windows Server girişi yerine Windows kimlik bilgileriyle bağlanacak şekilde yapılandırın.

Yüksek kullanılabilirlik ve dayanıklılık

Makale Description
Bağlantı dayanıklılığı ConnectRetryCount ve ConnectRetryInterval'in, sunucu boşta beklerken bağlantıyı keserse bağlantıyı nasıl yeniden kurduğu ve kurtarma mümkün olmadığında sürücünün döndürdüğü IMCxx hatalar.
Yüksek kullanılabilirlik ve olağanüstü durum kurtarma Kullanılabilirlik grubu dinleyicisi üzerinden bağlanın ve failover'ın alt ağ zaman aşımında durmaması için kullanın MultiSubnetFailover .
Şeffaf ağ IP çözünürlüğü kullanın Eski TransparentNetworkIPResolution yedek geri dönüş sistemi birden fazla IP adresi arasında bağlantı denemelerini nasıl sıralıyor ve neden MultiSubnetFailover bunun önüne geçiyor.

Verilerle çalışma

Makale Description
Vektör veri türü vector türünü, yerel C temsili ve toplu kopyalama desteği dahil olmak üzere bağlayın, gönderin ve alın.
DTC ile XA işlemlerini kullanın Windows Server, Linux veya macOS üzerinde Microsoft Dağıtılmış İşlem Düzenleyicisi aracılığıyla dağıtık bir işlem içinde SQL Server'ı kaydedin.
Programlama yönergeleri (Linux ve macOS) Sürücünün Linux ve macOS'ta hangi özellikleri desteklediği, hangilerini desteklemediği ve karakter kümesi ile OpenSSL'in ele alınışının Windows'takinden nasıl farklı olduğu.

Tanılama ve sorun giderme

Makale Description
Bağlantı şifreleme sorun giderme Varsayılan olarak şifrelediği için 18. sürümde ortaya çıkan sertifika ve şifreleme hatalarını düzeltin.
Veri erişim izleme (Linux ve macOS) Sürücü takibi aç ve uygulamanızın gerçekten yaptığı çağrıları görmek istediğinizde bir log dosyası yakalayın.
Bilinen sorunlar (Linux ve macOS) Kusurlar ve bunların çözüm yolları doğrulandı. Destek davası açmadan önce buraya bakın.
Sıkça Sorulan Sorular (Linux ve macOS) Linux ve macOS'ta sürücüyle ilgili en sık karşılaşılan sorulara kısa cevaplar.

Sürüm notları ve hata düzeltmeleri

Makale Description
Windows için sürüm notları Her Windows sürücü sürümünde yeni özellikler, davranış değişiklikleri ve düzeltmeler.
Linux ve macOS için sürüm notları Her Linux ve macOS sürücü sürümünde yeni özellikler, davranış değişiklikleri ve düzeltmeler.
SQL Server araçları için sürüm notları Linux ve macOS'ta sürücüden ayrı yüklenen sqlcmd ve bcp yardımcı araçlarında değişiklikler.

Reference

Makale Description
Windows'ta ODBC sürücüsü Sürücünün Windows'ta neyi desteklediğine dair sürüm bazında bir özet ve Windows'a özgü makalelerin bir dizini.
Windows'ta ODBC sürücüsünün özellikleri Hangi sürüm Windows'un her özelliğini ve bununla birlikte gelen davranış değişikliklerini tanıttı.