Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
Uygulamanın desteklediği .NET,
System.Data.SqlClientSQL Server ve Microsoft SQL hizmetlerinin sürümlerini kaydedin.Envanter kimlik doğrulama modları, bağlantı dizesi anahtar kelimeleri, özel sertifikalar, Her Zaman Şifrelenmiş sağlayıcılar,
DbProviderFactoriesyapılandırma, SQL Server kullanıcı tanımlı tipler veSystem.Data.SqlTypeskullanım.Uygulamanın mevcut testlerini çalıştırın ve bağlantı, sorgu, işlem, tekrar deneme ve performans davranışı için bir temel kaydedin.
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:
-
System.Data.SqlClientöğesini getiren paketi belirleyin. - Mümkün olduğunda o bağımlılığı güncelleyin veya değiştirin.
- Her ikisinin de kalması gerekiyorsa, sağlayıcıya özgü tipleri bağımlılık sınırının içinde tutun.
- 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.