System.Data.SqlClient'tan Microsoft'a geçiş. Data.SqlClient

Microsoft. Data.SqlClient, .NET uygulamalarında yeni SQL Server özellikleri için desteklenen sağlayıcıdır. Kullanılan ADO.NET programlama modelini System.Data.SqlClientkorur, ancak paketler, isim alanları, varsayılanlar ve bazı genel türler farklılık gösterir.

Göçü sadece bir isim alanı değişikliği değil, bir sağlayıcı güncellemesi olarak değerlendirin.

Geçişi planlama

Kodu değiştirmeden önce:

  1. Uygulamanın desteklediği .NET, System.Data.SqlClientSQL Server ve Microsoft SQL hizmetlerinin sürümlerini kaydedin.

  2. Envanter kimlik doğrulama modları, bağlantı dizesi anahtar kelimeleri, özel sertifikalar, Her Zaman Şifrelenmiş sağlayıcılar, DbProviderFactories yapılandırma, SQL Server kullanıcı tanımlı tipler ve System.Data.SqlTypes kullanım.

  3. Uygulamanın mevcut testlerini çalıştırın ve bağlantı, sorgu, işlem, tekrar deneme ve performans davranışı için bir temel kaydedin.

  4. Doğrudan ve geçişli paket referanslarını arayın:

    dotnet list package --include-transitive
    

Bir seferde bir uygulama veya paylaşılan veri erişim kütüphanesini taşın. Sağlayıcıya özgü nesneleri, hâlâ System.Data.SqlClient kullanan kod ile Microsoft.Data.SqlClient kullanan kod arasında iletmeyin.

Paketi değiştirin

Eğer varsa, açık System.Data.SqlClient bir paket referansını kaldırın:

dotnet remove package System.Data.SqlClient

Microsoft.Data.SqlClient ekleyin:

dotnet add package Microsoft.Data.SqlClient

Eğer Microsoft. Data.SqlClient 7.0 veya daha yeni bir sürücü tarafından sağlanan Microsoft Entra kimlik doğrulama modu kullanıyorsa, ayrıca şunları ekleyin:

dotnet add package Microsoft.Data.SqlClient.Extensions.Azure --version <same-version-as-Microsoft.Data.SqlClient>

Sürüm ve paket seçimi için bkz. Microsoft'u Yükle, güncelle ve dağıt. Data.SqlClient.

Ad alanlarını güncelleştirme

Ana sağlayıcı isim alanını değiştirin:

-using System.Data.SqlClient;
+using Microsoft.Data.SqlClient;

System.Data.SqlClient öğesine başvuran tam nitelikli adları, takma adları, oluşturulan kodu, bağımlılık enjeksiyonu kayıtlarını, yansıtma dizelerini, yapılandırmayı ve test çiftlerini güncelleyin.

General System.Data veya System.Data.Common isim boşluklarını değiştirmeyin. Microsoft.Data.SqlClientADO.NET türlerini kullanmaya devam eder, örneğin CommandType, DbType, IsolationLevel, DataTable, DbConnection, , ve DbCommand bu isim alanlarından gelir.

Bazı SQL Server'a özgü türler başka Microsoft.Data isim alanlarına geçer:

Türü Önceki isim alanı Microsoft.Data.SqlClient ad alanı
SqlDataRecord, SqlMetaData Microsoft.SqlServer.Server Microsoft.Data.SqlClient.Server
SqlFileStream System.Data.SqlTypes Microsoft.Data.SqlTypes
SqlNotificationRequest System.Data.Sql Microsoft.Data.Sql
OperationAbortedException System.Data Microsoft.Data

Microsoft.Data.SqlClient 5.0 ve sonraki sürümlerde, diğer SQL Server ortak dil çalışma zamanı (CLR) türleri Microsoft.SqlServer.Server içinde kalır. Her bir türü, tüm ad alanını değiştirmek yerine, derleyici hatalarından ve Microsoft.Data.SqlClient API referansından yararlanarak güncelleyin.

.NET Framework yapılandırmasını güncelleme

Sağlayıcıları DbProviderFactories aracılığıyla çözen bir uygulama, App.config veya Web.config içinde bir sağlayıcı kaydına ihtiyaç duyabilir:

<configuration>
  <system.data>
    <DbProviderFactories>
      <add name="SqlClient Data Provider"
           invariant="Microsoft.Data.SqlClient"
           description=".NET data provider for SQL Server"
           type="Microsoft.Data.SqlClient.SqlClientFactory, Microsoft.Data.SqlClient" />
    </DbProviderFactories>
  </system.data>
</configuration>

Sağlayıcı değişmez adını talep eden kodu güncelleyin:

DbProviderFactory factory =
    DbProviderFactories.GetFactory("Microsoft.Data.SqlClient");

Uygulama SqlConnection öğesini doğrudan oluşturuyor ve DbProviderFactories kullanmıyorsa bu yapılandırmayı eklemeyin.

Şifreleme ve sertifika doğrulamasını inceleyin

Microsoft. Data.SqlClient, System.Data.SqlClient'a göre daha güvenli varsayılan ayarlar kullanır.

Davranış System.Data.SqlClient Microsoft.Data.SqlClient
Varsayılan şifreleme Encrypt=false Encrypt=true 4.0 sürümünden itibaren
Sunucu sertifikası doğrulaması Sertifikayı yalnızca istemci şifreleme etkinleştirildiğinde doğrular 2.0 sürümünden itibaren, sunucu şifrelemeyi zorunlu kıldığında, sertifikayı TrustServerCertificate uyarınca doğrular; Encrypt=false olsa bile
Sıkı şifreleme Desteklenmiyor Encrypt=Strict TDS 8.0 özellikli sunucular için 5.0 sürümünden itibaren
SqlConnectionStringBuilder.Encrypt tür bool SqlConnectionEncryptOption 5.0 sürümünden itibaren

Encrypt=false veya TrustServerCertificate=true öğesini genel bir geçiş düzeltmesi olarak ayarlamayın. İstemcinin güvendiği bir sertifikayı yapılandırın ve sertifikaya uygun bir sunucu adı kullanın. Sadece doğrulamanın mümkün olmadığı kontrollü geliştirme ortamları için kullanın TrustServerCertificate=true .

SqlConnectionEncryptOption öğesine yapılan değişiklik, örtük dönüşümler sayesinde yaygın atamalarda kaynak uyumludur, ancak ikili uyumluluğu bozan bir değişikliktir. SqlConnectionStringBuilder.Encrypt'ye erişen her derlemeyi yeniden derleyin.

Ayrıntılar için bkz . Şifreleme ve sertifika doğrulama.

Bağlantı dizelerini incele

Microsoft. Data.SqlClient, System.Data.SqlClient'ın tanımadığı anahtar kelimeler ve takma adlar ekler. Örneğin, Multi Subnet Failover ve Application Intent gibi boşluk içeren takma adları kabul eder.

Microsoft.Data.SqlClient.SqlConnectionStringBuilder ile bir bağlantı dizesi oluşturup ardından bunu System.Data.SqlClient öğesine geçirmeyin. Aşamalı bir geçiş sırasında, her bağlantı dizesi oluşturucusunu sağlayıcısıyla eşleştirilmiş halde tutun.

Kimlik doğrulama, şifreleme, yeniden deneme, failover ve sertifika anahtar kelimelerini Bağlantı dizisi sözdizimi karşılaştırarak inceleyin.

Parametre davranışını inceleme

Test tarihi ve saati parametreleri açıkça şunlardır:

Parametre System.Data.SqlClient davranışı Microsoft. Data.SqlClient davranışı
DbType.Time DateTime değerine sahip Değeri kabul eder Bir TimeSpan değer kullanın
DateTime değerine sahip DbType.Date Tarih ve saat bileşenleri gönderebilir Zaman bileşenlerini kısaltır

SQL Server tipi çıkarımının sorgu planlarını veya dönüşüm davranışını değiştirebileceği parametreler için , uzunluk, hassasiyet ve ölçek belirtinSqlDbType. Veritabanı türü biliniyorsa AddWithValue öğesini geçiş kısayolu olarak kullanmayın.

Geçişli sağlayıcı referanslarını kontrol edin

Bir paketin doğrudan kaldırılması, System.Data.SqlClient öğesinin ortadan kalktığını garanti etmez. Çalıştırın:

dotnet list package --include-transitive

Her iki sağlayıcı da kalırsa:

  1. System.Data.SqlClient öğesini getiren paketi belirleyin.
  2. Mümkün olduğunda o bağımlılığı güncelleyin veya değiştirin.
  3. Her ikisinin de kalması gerekiyorsa, sağlayıcıya özgü tipleri bağımlılık sınırının içinde tutun.
  4. Açık isim alanı takma adlarını sadece geçici bir yardımcı olarak kullanın. Bir sağlayıcıdan diğerine bağlantı, işlem, parametre veya okuyucu göndermeyin.

Özellikle SQL Server CLR tür kitaplıklarına ve genel API’lerinde System.Data.SqlClient türlerini açığa çıkaran eski veri erişim çerçevelerine özellikle dikkat edin.

Küreselleşme davranışını gözden geçirin

.NET Framework ve .NET 5'ten önceki .NET sürümleri, Windows'ta Ulusal Dil Desteği (NLS) küreselleşmesini kullanır. Mevcut .NET sürümleri, Windows, Linux ve macOS genelinde varsayılan olarak International Components for Unicode (ICU) kullanır.

Bu çalışma süresi farkı bazı SqlString karşılaştırmaları değiştirebilir. SQL Server, NLS karşılaştırma davranışını kullanır. İstemci tarafı SqlString karşılaştırmalarının sunucu davranışıyla eşleşmesi gerekiyorsa, etkilenen değerleri test edin ve Globalization and ICU konusunu gözden geçirin. Bir uygulama, gerektiğinde yoğun bakım yerine NLS kullanabilir .

Küreselleştirmeden bağımsız mod, Microsoft.Data.SqlClient tarafından desteklenmiyor.

Göç edilen uygulamayı doğrulayın

Desteklenen her hedef çerçeve ve işletim sisteminde inşa edin ve test edin.

Doğrulama:

  • Paket geri yükleme ve yayımlama çıktısı.
  • SQL kimlik doğrulaması, Windows entegre kimlik doğrulama ve uygulama tarafından kullanılan Microsoft Entra doğrulaması.
  • TLS müzakere, sertifika doğrulama ve bağlantı dizesi ayrıştırma.
  • Bağlantı havuzu ve erişim belirtecinin yenilenmesi.
  • Parametre türleri, null değerler, hassasiyet, ölçek, tarih ve zaman davranışı.
  • İşlemler, iptal, zaman aşımları, denemeler ve yedekleme.
  • Her Zaman Şifreli, SQL Server CLR türleri, toplu kopyalama, sorgu bildirimleri ve uygulama tarafından kullanılan diğer sağlayıcıya özgü özellikler.
  • Günlükleme, sayaçlar, izleme ve özel durum işleme.

Desteklenen her veritabanı motoru sürümüne karşı temsilci sorgular çalıştırın. Başarılı bir derleme, bağlantı güvenliğini, çalışma zamanı bağımlılıklarını veya veri dönüşümlerini doğrulamaz.