SQL Server için Microsoft OLE DB Sürücüsü

OLE DB sürücüsünü indirme

Microsoft OLE DB Driver for SQL Server, OLE DB'nin bir parçası olan bağımsız bir veri erişimi uygulama programlama arayüzü (API) olarak görülüyor. C ve C++ uygulamalarını Azure SQL Veritabanı'deki Microsoft SQL Database Engine'a, Microsoft Fabric'teki SQL veritabanı, Azure SQL Yönetilen Örneği ve desteklenen SQL Server sürümlerine bağlar. Microsoft ilk olarak 2018'de 18 sürüm olarak piyasaya sürdü ve SQL Server 2019 (15.x) oyununa dahil etti.

MSOLEDBSQL19 mevcut sürücüdür. Genellikle SQL Server Native Client (SNAC) ile geriye dönük uyumludur ve Windows Veri Erişim Bileşenleri'nin (Windows DAC, önceki adıyla Microsoft Data Access Components veya MDAC) sağladığı SQL Server OLE DB sağlayıcısının yanı sıra SNAC'nin de ötesinde işlevsellik sunar.

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. Deneme başına bağlantı zaman aşımını belirler ve geçici hataları üstel geri çekilme ve titreme ile tekrar dener.

Bu makaledeki C++ parçası kısalık için COM başlatma ve log yardımcısı gibi maddeleri çıkarıyor.

std::wstring BuildConnectionString(const wchar_t* server, const wchar_t* database) {
    std::wstring cs = L"Provider=MSOLEDBSQL19";
    cs += L";Data Source=tcp:"; cs += server; cs += L",1433";
    cs += L";Initial Catalog="; cs += database;
    cs += L";Authentication=ActiveDirectoryMSI";   // managed identity, no stored secret
    cs += L";Use Encryption for Data=Strict";      // TDS 8.0 with certificate validation
    cs += L";Connect Timeout=30";                  // per-attempt connect timeout, in seconds
    cs += L";Connect Retry Count=3";               // idle connection resiliency, not initial connect
    cs += L";Connect Retry Interval=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(LONG 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.
HRESULT ConnectWithRetry(IDataInitialize* pDataInit, const std::wstring& connectionString,
                         int maxAttempts, IDBInitialize** ppDbInit) {
    HRESULT hr = E_FAIL;
    *ppDbInit = nullptr;
    for (int attempt = 1; attempt <= maxAttempts; ++attempt) {
        IDBInitialize* pDbInit = nullptr;
        hr = pDataInit->GetDataSource(nullptr, CLSCTX_INPROC_SERVER, connectionString.c_str(),
                                      IID_IDBInitialize, reinterpret_cast<IUnknown**>(&pDbInit));
        if (SUCCEEDED(hr) && SUCCEEDED(hr = pDbInit->Initialize())) {
            Log("INFO", "connected on attempt %d/%d", attempt, maxAttempts);
            *ppDbInit = pDbInit;
            return S_OK;
        }

        // Walks IErrorRecords and returns the first record that carries a real
        // SQL Server error number. Transport and timeout failures report a
        // generic wrapper record first, whose native error is 0. Errors the
        // server returns carry the number on the first record.
        LONG native = LogProviderErrors("connect", hr);
        if (pDbInit) pDbInit->Release();
        if (attempt == maxAttempts || !IsTransient(native)) return hr;

        // 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 hr;
}

Connect Retry Count ve Connect Retry Interval 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.

Bu kod parçacığı, burada gösterilen boşluklu anahtar sözcük adlarını kullanan Use Encryption for Data için bağlantı dizesini oluşturur; bunlara Connect Retry Count ve IDataInitialize::GetDataSource örnek olarak verilebilir. IDBInitialize::Initialize ve ADO aynı ayarlar için farklı isimler kullanır, örneğin Encrypt ve ConnectRetryCount.

GetDataSource yanlış kümeden bir ismi hata çıkarmadan kabul eder ve ayar hiç etki etmez. Bağlantı daha sonra sürücü varsayılan özelliğini kullanır, bu da sürücüyü zayıflatabilir. Encrypt=Strict bu durumda, MSOLEDBSQL19 üzerinde şifrelemeyi Mandatory olarak bırakır; bu nedenle bağlantı TDS 8.0’ı devre dışı bırakır ve şifrelemeyi açık metin prelogin aşamasında müzakere eder; MSOLEDBSQL üzerinde ise şifrelemeyi tamamen kapalı bırakır. Her durum açık kalmayla sonuçlanmaz: yanlış olarak ayarlanmış TrustServerCertificate de aynı şekilde yok sayılır; bu da özelliği varsayılan false değerinde bırakır ve sertifika doğrulamasını etkin tutar.

Yanlışlığı yakalamak için bir hataya güvenmeyin. Hiçbir kümeye ait olmayan bir isim, örneğin ZzzNotAKeyword, bir Invalid bağlantı dizesi attribute kayıt üretir, ancak yanlış kümeden gelen bir isim hiçbir şey üretmez. Bir ayarın etkiye girdiğini doğrulamak için, bağlanmadan önce özelliği tekrar IDBProperties::GetProperties okuyun. Her API ile birlikte gelen anahtar kelime seti için bkz. Using bağlantı dizesi keywords with OLE DB Driver for SQL Server.

OLE DB, tanılama bilgilerini yalnızca HRESULT aracılığıyla değil, hata nesnesi aracılığıyla rapor eder; 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

  • Microsoft Entra ID doğrulama: Yönetilen kimlik, hizmet prensibi, etkileşimli ve entegre akışlarla şifresiz bağlantılar.
  • Sıkı şifreleme: Tam sertifika doğrulaması ile TDS 8.0 bağlantıları ve 19.2.0 ve sonraki sürümlerde TLS 1.3.
  • Boşta bağlantı dayanıklılığı: Boşta kalan bağlantının şeffaf bir şekilde geri kazanılması.
  • Birden fazla aktif sonuç kümesi (MARS): Bağlantı başına birden fazla bekleyen istek.
  • Toplu kopya: Toplu kopya arabirimleri aracılığıyla yüksek hacimli ekleme işlemleri.
  • Tablo değerli parametreler: Tüm bir sonuç kümesi, sunucuya tek bir parametre olarak iletilir.
  • Always On erişilebilirlik grupları: Hızlı yük devretme için MultiSubnetFailover ile dinleyici desteği.
  • UTF-8 ve UTF-16 desteği: Her iki kodlamada da karakter verisi.
  • Veri sınıflandırması: Sınıflandırılmış sütunlar için duyarlılık meta verileri.
  • Eşzamansız işlemler: Engellemeyen veri kaynağı ve satır kümesi işlemleri.

Başlayın

Article Description
OLE DB Sürücüsü Ne Zaman Kullanılmalıdır Diğer SQL Server sürücüleri yerine ne zaman OLE DB Driver for SQL Server seçilmeli?
İndir Desteklenen her sürücü sürümü için yükleyici indirme dosyaları.
Sistem gereksinimleri Desteklenen işletim sistemleri, SQL Server sürümleri ve önce kurulum için ön koşullar.
Bina uygulamaları Başlık ve kütüphane dosyaları, kurulum düzeni ve MDAC'tan yükseltme yaptığınızda neler değişiyor.
Uygulama oluşturma Bir uygulamanın takip ettiği çağrı dizisi; bağlanmadan komut çalıştırmaya ve sonuçları okumaya kadar.
Destek yaşam döngüsü Hangi sürücü sürümlerinin desteklendiği ve her bir sürümün desteğinin ne zaman sona erdiği.

Yapılandırma ve bağlanma

Article Description
Bağlantı dizesi anahtar sözcükleri Sürücünün kabul ettiği her bağlantı dizesi anahtar sözcüğü ve bunların kabul edilen değerleri.
Veri kaynak nesneleri Bir bağlantının kurulduğu veri kaynağı ve oturum nesnelerini oluşturup başlatın.
Sürücüyle ADO kullanımı MARS, sorgu bildirimleri ve ADO'dan xml tipi gibi sürücü özelliklerine ulaşın.
Yüksek kullanılabilirlik ve olağanüstü durum kurtarma Bir kullanılabilirlik grubu dinleyicisi ve yük devretme davranışını denetleyen anahtar sözcükler aracılığıyla bağlanın.
Boşta bağlantı dayanıklılığı Boştayken kesilen bir bağlantıyı otomatik olarak yeniden kur.
LocalDB desteği Yerel geliştirme ve test için bir LocalDB örneğine bağlanın.

Doğrulama ve güvence

Article Description
Microsoft Entra Kimliğini Kullanma Sürücünün desteklediği Microsoft Entra kimlik doğrulama modları, yönetilen kimlik ve etkileşimli modlar dahil.
Şifreleme ve sertifika doğrulaması Encrypt ve TrustServerCertificate'i ayarlayın ve sunucu sertifikasının nasıl doğrulanacağını kontrol edin.
Şifreleri programatik olarak değiştirme Süresi dolmuş bir şifreyi yönetin ve uygulamanızdan çıkmadan yeni bir şifre belirleyin.
İstemci bağlantılarında hizmet ana adı (SPN) desteği Bir bağlantıda hizmet ana adını ayarlayın ki Kerberos karşılıklı doğrulaması başarılı olsun.
Veri sınıflandırmayı kullanma SQL Server'ın sınıflandırılmış sütunlar için verdiği hassasiyet etiketlerini okuyun.

Komutları çalıştır ve sonuçları işle

Article Description
Komutlar Komut yürütmenin üzerine kurulduğu ICommand arayüzü ve komut nesnesi modeli.
Komut sözdizimi Sürücünün komut metinde kabul ettiği ODBC SQL, ISO ve Transact-SQL sözdizimi karışımı.
Komut parametreleri Parametreleri komut metnine işaretleyin ve sürücünün her biri için desteklediği türleri belirleyin.
Birden fazla aktif sonuç kümesi (MARS) kullanımı Tek bir bağlantıda birden fazla beklemede olan sonuç setini açık tutun.
Asenkron işlemler yapmak Çağıran iş parçacığını engellemeden bir işlem başlatın ve anket yapın ya da bitmesini bekleyin.
Sorgu bildirimleriyle çalışma Sunucuda bir sorgu sonucu değiştiğinde bildirim almak için kayıt olun.
Sonuç işleme nasıl yapılır makaleleri Depolanmış bir prosedür veya fonksiyonu çalıştıran ve dönüş kodlarını, çıkış parametrelerini ve satırları okuyan örnekler.

Sıra kümeleri ve imleçlerle çalışma

Article Description
Satır kümeleri Sıra kümesi arayüzleri ve hangi tür bir sıra seti alacağınızı belirleyen özellikler.
Sıra getirme IRowset, satırları sıralı olarak getirmek, sütun değerlerini okumak ve satırları serbest bırakmak için kullanılır.
Satır kümelerinde veri güncellenmesi Değiştirilebilir bir satır kümesi elde etmek ve kilitlemesini denetlemek için IRowsetChange veya IRowsetUpdate isteyin.
Bookmarks Bir satır konumunu kaydedin ve sıralı olarak yeniden getirmek yerine daha sonra ona geri dönün.
Sıra kümeleri ve SQL Server imleçleri Sürücünün varsayılan bir sonuç kümesi kullandığı ve bunun yerine bir sunucu imleci açtığı durumlar.

Toplu kopya

Article Description
Toplu kopyalama işlemleri yapılması Veri dosyaları veya program değişkenleri aracılığıyla büyük satır hacimlerini tabloya taşıyıp dışarı taşıyın.
IRowsetFastLoad kullanarak verileri toplu kopyalama IRowsetFastLoad arabirimini kullanarak verileri bir SQL Server tablosuna toplu olarak kopyalayın.
IRowsetFastLoad ve ISequentialStream kullanarak BLOB verilerini gönder SQL Server'a satır başına farklı uzunluklarda BLOB verilerini akış olarak iletmek için IRowsetFastLoad kullanın.

Tabloya değer atanmış parametreler

Article Description
Tablo değerli parametrelerin genel görünümü Tablo değerli parametrelerin birden çok veri satırını sunucuya tek bir parametreyle nasıl ilettiği.
Tablo değerinde parametre başvurusu Parametre sırası oluşturma ve parametre tipi keşfi.
Tablo değerli parametrelere veri ekleme Tablo değerli parametre satırlarını sağlamak için push modeli ve pull modeli.
Tablo değerli parametreleri kullanın Tablo değerli bir parametre oluşturun ve satırlarını bir saklanan prosedüre iletin.

Büyük ve ikili verilerle çalışma

Article Description
BLOB'lar ve OLE nesneleri BLOB sütunlarını ISequentialStream aracılığıyla akış olarak okuyun ve yazın.
Büyük veri elde etmek Büyük bir sütun değerini, tek bir bağlı arabellek yerine parçalar halinde alın.
Büyük veri ayarlanması Bir tüketici depolama nesnesinden sunucuya büyük bir sütun değeri gönderin.
FILESTREAM desteği SQL Server veya dosya sistemi üzerinden okuyabileceğiniz büyük ikili değerleri depolayın.
FILESTREAM yönergeleri Akış arabirimleri kullanarak FILESTREAM sütunlarını okuyan ve yazan örnekler.

Tabloları, indeksleri ve depolanmış prosedürleri yönetin

Article Description
Tablolar ve indeksler ITableDefinition ve IIndexDefinition aracılığıyla tablolar ve indeksler oluşturun, değiştirin ve silin.
SQL Server tablolarının oluşturulması Sütunları tanımlayın ve bir tablo oluşturmak için çağırın ITableDefinition::CreateTable .
SQL Server indekslerinin oluşturulması Mevcut bir tabloda yeni bir indeks tanımlayın.IIndexDefinition::CreateIndex
Saklı prosedürler ODBC CALL sözdizimi veya RPC ile saklanan bir prosedürü çağırın ve döndürme kodu ile çıktı parametrelerini okuyun.

Veri türleri

Article Description
Veri türleri genel görünümü SQL Server tipleri, parametreleri ve sütunları bağlamakta OLE veritabanı tipleriyle nasıl eşleştirilir?
Satır kümeleri ve parametrelerde veri tipi eşlemesi Satır kümesi sütunları ve komut parametreleri için tam tür eşleme tablosu.
Büyük değer türleri kullanımı Varchar(max), nvarchar(max) ve varbinary(max) türlerini bağlayın.
XML veri türlerinin kullanımı XML belgelerini ve parçalarını bir xml sütununda depolayın ve alın.
Kullanıcı tanımlı türlerin kullanımı Sürücünün tip meta verileriyle birlikte ikili değerler olarak sunduğu CLR kullanıcı tanımlı türlerini bağlayın.
Seyrek sütunlar desteği Null değerlerin depolanması için optimize edilmiş seyrek sütunlar için sürücü desteği.
UTF-8 desteği UTF-8 sunucu derlemeleri ve UTF-8 istemci kodlamasıyla çalışın.
UTF-16 desteği Sürücünün, istemci arabelleğini doldururken surrogate çiftlerini nasıl işlediği.
Tarih ve saat iyileştirmeleri Date, time, datetime2 ve datetimeoffset türlerini ve izin verdikleri dönüşümleri bağlayın.

Transactions

Article Description
İşlemler genel görünümü Yerel işlem desteği ve dağıtık işlemler için Microsoft Dağıtılmış İşlem Düzenleyicisi.
Yalıtım düzeyleri Bir oturum için izolasyon seviyesini ve her seviyenin hangi eşzamanlılığı sağladığını belirleyin.
Anlık görüntü yalıtımı ile çalışma Yazma işlemlerini engellemeden okuma eşzamanlılığını artırmak için satır sürümlemeyi kullanın.
Dağıtık işlemleri destekleme Bir oturumu, ITransactionJoin::JoinTransaction ile dağıtık bir işleme dahil edin.

Tanılama ve sorun giderme

Article Description
Hatalar Sürücünün arızaları nasıl bildirdiği ve hangi arayüzlerin detayları taşıdığı.
Hata bilgisi alınıyor Hata arayüzleri arasında gezinerek ileti metnini, SQLSTATE'i ve yerel hata numarasını okuyun.
Genişletilmiş olaylar günlüğünde tanılama bilgilerine erişme Sürücü takibi aç ve elde edilen genişletilmiş etkinlik kaydını okuyun.
Bilinen sorunlar Mevcut sürücüdeki açık sorunlar ve varsa geçici çözümleri.
Sürüm notları Her sürücü sürümünde ne değişti, en yenisi önce.

Mevcut sürücüye geçiş

SQL Server için üç nesil Microsoft OLE veritabanı sağlayıcısı vardır. MSOLEDBSQL19 Yeni ve mevcut uygulamalar için kullanın ve mevcut bağlantı dizileri ona dönüştürün. OLE DB sağlayıcısı kullanımdan kaldırıldı ve 2018'de yeniden piyasaya sürüldü.

Generation Sağlayıcı dizesi Statü
Microsoft OLE DB Driver for SQL Server (bu makale) MSOLEDBSQL19, MSOLEDBSQL Supported. MSOLEDBSQL19 mevcut sürücü ve yeni geliştirme için kullanılacak sürücüdür.
SQL Server Yerel İstemcisi (SNAC) SQLNCLI11, SQLNCLI SQL Server 2022 ve SQL Server Management Studio 19'dan kaldırıldı. Yeni geliştirme için önerilmiyor.
Microsoft OLE DB Provider for SQL Server SQLOLEDB Windows Veri Erişim Bileşenleri içinde sunulur. Artık bakımı yapılmıyor. Yeni geliştirme için önerilmiyor.
Article Description
MSOLEDBSQL ana sürüm farklılıkları OLE DB Sürücü 19 ile sürüm 18 arasındaki şifreleme varsayılanları, özellik tipi değişiklikleri ve geçiş adımları dahil olmak üzere değişiklikleri kırmak.
MDAC'tan bir başvurunun güncellenmesi Eski OLE DB Provider for SQL Server ile mevcut sürücü arasında neler değişti ve güncellemeden önce neleri kontrol etmelisiniz?
SQL Server 2005 Yerel İstemciden bir uygulamanın güncellenmesi SQL Server 2005'teki (9.x) SQL Server Native Client'tan bu yana OLE DB Driver for SQL Server'daki geriye dönük uyumluluğu bozan değişiklikler.

Reference

Article Description
SQL Server özellikleri için OLE DB Sürücüsü Sürücüye özgü özelliklerin dizini ve her birinin nerede belgelendiğini.
OLE DB programlama Sürücünün sunduğu COM API modeli ve TDS üzerinden SQL Server ile nasıl iletişim kurduğu.
OLE DB nasıl yapılacağına ilişkin makaleler OLE DB nasıl yapılır makalelerinin göreve göre gruplandırılmış dizini.
OLE DB arayüzleri OLE DB, bu sürücüde sağlayıcıya özgü davranış sergileyen arayüzler ve yöntemlerdir.
Şema satır kümesi desteği Sağlayıcıya özgü şema satır kümesi davranışı, bağlı sunuculardan geri dönen meta veriler dahil.
Daha fazla bilgi bulmak Bu dokümantasyon seti dışındaki spesifikasyonlar, örnekler ve topluluk kaynakları.