Aracılığıyla paylaş


Microsoft.Data.SqlClient ad alanına giriş

ADO.NET İndir

Microsoft.Data.SqlClient ad alanı temelde System.Data.SqlClient ad alanının yeni bir sürümüdür. Microsoft.Data.SqlClient genellikle System.Data.SqlClient ile aynı API'yi ve geriye dönük uyumluluğu korur. System.Data.SqlClient'dan Microsoft.Data.SqlClient'a geçiş yapmak, çoğu uygulama için basittir. Microsoft.Data.SqlClient üzerinde bir NuGet bağımlılığı ekleyin ve başvuruları ve using deyimlerini Microsoft.Data.SqlClient'a güncelleyin.

Daha az kullanılan API'lerde System.Data.SqlClient ile karşılaştırıldığında bazı uygulamaları etkileyebilecek birkaç fark vardır. Bu farklar için, yararlı taşıma bilgi sayfasınabakın.

API referansı

Microsoft.Data.SqlClient API'sinin ayrıntıları .NET API Browseriçinde bulunabilir.

Microsoft.Data.SqlClient 6.1 sürüm notları

6.1 sürümündeki yeni özellikler

Ayrılmış SQL Server vektör veri türü desteği eklendi

Değişenler:

  • MDS ile SQL Server 2025 (17.x) arasında en iyi duruma getirilmiş vektör iletişimi, TDS protokolü üzerinden özel ikili biçimi (#3433, #3443) kullanır.

  • Mevcut JSON tabanlı vektör desteğine kıyasla daha az işleme yükü.

  • 32 bit tek duyarlıklı kayan nokta vektörleri için ilk destek.

Kimler avantajlı:

  • Büyük vektör veri kümelerini hareket ettiren uygulamalar, işleme sürelerine ve bellek gereksinimlerine yönelik yararlı iyileştirmeler görür.
  • Vektöre özgü API'ler, gelecekteki sayısal gösterimleri tutarlı bir genel görünümle desteklemeye hazırdır.

Etki:

  • SQL Server 2025 (17.x) kullanarak vektör işlemleri için JSON'a göre daha az iletim ve işleme süresi:

    • Okumalar: 50 kat iyileştirme
    • Yazma işlemleri: 3,3 kat iyileştirme
    • Toplu Kopyalama: 19 kat iyileştirme
    • (Her işlem için maksimum 1998 boyutu ve 10.000 kayıt vektör sütunuyla gözlemlenir.)
  • JSON serileştirme/seri durumdan çıkarma ve dize gösterimi bloat'ının ortadan kaldırılması nedeniyle bellek ayak izi iyileştirildi.

  • Önceki SQL Server Vector uygulamalarıyla geriye dönük uyumluluk için, uygulamalar vektör verilerini göndermek/almak için JSON dizelerini kullanmaya devam edebilir, ancak daha önce belirtilen performans iyileştirmelerinden hiçbirini görmezler.

.NET Standard 2.0 hedef desteği yeniden canlandı

Değişenler:

Kimler avantajlı:

  • MDS'ye bağımlı kitaplıklar aşağıdaki çerçevelerden herhangi birini sorunsuz bir şekilde hedef alabilir:
    • .NET Standard 2.0
    • .NET Framework 4.6.2 ve üzeri
    • .NET 8.0
    • .NET 9.0
  • Uygulamalar çalışma zamanlarını hedeflemeye devam etmelidir.
    • MDS .NET Standard 2.0 hedef çerçeve desteği gerçek bir uygulama içermez ve çalışma zamanıyla kullanılamaz.
    • Bir uygulamanın derleme/yayımlama işlemi her zaman uygun MDS .NET/.NET Framework çalışma zamanı uygulamasını seçmelidir.
    • Çalışma zamanında MDS .NET Standard 2.0 başvuru DLL'sini yanlış dağıtmaya çalışan özel derleme/yayımlama eylemleri desteklenmez.

Etki:

  • .NET Standard 2.0'a yönelik kitaplıklar artık aşağıdaki gibi uyarılar almıyor:

    warning NU1701: Package 'Microsoft.Data.SqlClient 6.0.2' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8, .NETFramework,Version=v4.8.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
    

Diğer eklemeler

  • Doku uç noktalarıyla özel kasa desteği eklendi. (#3084)

6.1 Hedef platform desteği

  • .NET Framework 4.6.2+ (Windows Arm64, Windows x86, Windows x64)
  • .NET 8.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Bağımlılıklar da dahil olmak üzere tam sürüm notları GitHub Deposu: 6.1 Sürüm Notları'nda kullanılabilir.

Microsoft.Data.SqlClient 6.0 sürüm notları

6.0'daki uyumluluk bozan değişiklikler

  • .NET Standard desteği bırakıldı. #2386
  • .NET 6 #2927 desteği bırakıldı
  • UWP (UAP) referansları kaldırıldı. #2483
  • .NET Framework #2981için SQL 2000 istemci tarafı hata ayıklama desteği bırakıldı #2940

6.0 sürümündeki yeni özellikler

  • JSON veri tipi için destek eklendi #2916, #2892, #2891, #2880, #2882, #2829, #2830
  • .NET 9 #2946 desteği eklendi
  • .NET'te Microsoft.Data.SqlClient.Diagnostics.SqlClientDiagnostic türü eklendi. #2226
  • yapılandırılmış parametre olarak DateOnly için TimeOnly ve DataTable desteği eklendi. #2258
  • SqlConnectionOverrides API OpenAsync() için desteği eklendi
  • Yerelleştirme Çekçe, Lehçe ve Türkçe dillerinde eklendi #2987
  • TokenCredential'de belirteç önbelleğe alma özelliğinden yararlanmak için ActiveDirectoryAuthenticationProvider nesnesi eklendi. #2380
  • NuGet paketine Readme dosyası eklendi #2826
  • #3024 NuGet.org denetim kaynağı aracılığıyla NuGet paketi denetimi etkinleştirildi
  • #3009 eksik SqlCommand_BeginExecuteReader kod örneği eklendi
  • GenerateSspiClientContextiçin kapsam izlemesi eklendi. #2497#2725

JSON veri türü desteği

JSON veri türü desteği artık Microsoft.Data.SqlClient v6.0'da kullanılabilir. Bu sürüm, SqlJsoniçin uzantı olarak kullanılabilen System.Data.SqlDbTypes türünü tanıtır:

using System;
using System.Data.SqlTypes;
using System.Text.Json;

namespace Microsoft.Data.SqlTypes
{
    /// <summary>
    /// Represents the Json data type in SQL Server.
    /// </summary>
    public class SqlJson : INullable
    {
        /// <summary>
        /// Parameterless constructor. Initializes a new instance of the SqlJson class which
        /// represents a null JSON value.
        /// </summary>
        public SqlJson() { }

        /// <summary>
        /// Takes a <see cref="string"/> as input and initializes a new instance of the SqlJson class.
        /// </summary>
        /// <param name="jsonString"></param>
        public SqlJson(string jsonString) { }

        /// <summary>
        /// Takes a <see cref="JsonDocument"/> as input and initializes a new instance of the SqlJson class.
        /// </summary>
        /// <param name="jsonDoc"></param>
        public SqlJson(JsonDocument jsonDoc) { }

        /// <inheritdoc/>
        public bool IsNull => throw null;

        /// <summary>
        /// Represents a null instance of the <see cref="SqlJson"/> type.
        /// </summary>
        public static SqlJson Null { get { throw null; } }

        /// <summary>
        /// Gets the string representation of the JSON content of this <see cref="SqlJson" /> instance.
        /// </summary>
        public string Value { get ; }
    }
}

JSON veri türü okuma, yazma, akış ve toplu kopyalama işlemlerini destekler.

SqlClientDiagnostics ile tanışın

Ad alanında Microsoft.Data.SqlClient.Diagnostics , anahtar-değer çiftlerinin kesin olarak belirlenmiş bir koleksiyonunu sağlayan yeni türler kullanılabilir. Bu türler, sürücü tarafından yayılan tanılama olaylarını toplamak için uygulamalar tüketilerek yakalanabilir. Bu sürüm aşağıdaki türleri tanıtır:

  • SqlClientCommandBefore
  • SqlClientCommandAfter
  • SqlClientCommandError
  • SqlClientConnectionOpenBefore
  • SqlClientConnectionOpenAfter
  • SqlClientConnectionOpenError
  • SqlClientConnectionCloseBefore
  • SqlClientConnectionCloseAfter
  • SqlClientConnectionCloseError
  • SqlClientTransactionCommitBefore
  • SqlClientTransactionCommitAfter
  • SqlClientTransactionCommitError
  • SqlClientTransactionRollbackBefore
  • SqlClientTransactionRollbackAfter
  • SqlClientTransactionRollbackError

OpenAsync() API'sinde Bağlantı Geçersiz Kılmaları desteği eklendi

SqlConnection.OpenAsync() varsayılan davranışı, geçici hatalar tarafından tetiklenen on saniyelik gecikmeyi ve otomatik bağlantı yeniden denemelerini devre dışı bırakmak için geçersiz kılınabilir.

using(SqlConnection sqlConnection = new SqlConnection("Data Source=(local);Integrated Security=true;Initial Catalog=AdventureWorks;"))
{
    await sqlConnection.OpenAsync(SqlConnectionOverrides.OpenWithoutRetry, cancellationToken);
}

6.0 Hedef platform desteği

  • .NET Framework 4.6.2+ (Windows x86, Windows x64)
  • .NET 8.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Bağımlılıklar da dahil olmak üzere tam sürüm notlarına GitHub Deposu'ndan ulaşabilirsiniz: 6.0 Sürüm Notları.

Microsoft.Data.SqlClient 5.2 sürüm notları

5.2 sürümündeki yeni özellikler

  • SqlDiagnosticListenerüzerinde desteği eklendi. #1931
  • RowsCopied64'e yeni bir özellik SqlBulkCopy eklendi. #2004Daha fazla bilgi
  • AccessTokenCallBackiçin yeni bir SqlConnection API'si eklendi. #1260Daha fazla bilgi
  • Windows üzerinde .NET'te şifreleme için SuperSocketNetLib kayıt defteri seçeneği desteği eklendi. #2047
  • .NET 6+ SqlBatchüzerinde desteği eklendi #2223Daha fazla bilgi
  • #2159İş Yükü Kimliği kimlik doğrulama desteği eklendi #2264
  • .NET #2210 yerelleştirme desteği eklendi
  • Georgian sıralama desteği eklendi #2194
  • #2170 Big Endian sistemleri için destek eklendi
  • .NET 8 desteği #2230 eklendi
  • System.Runtime.Caching 8.0.0, System.Configuration.ConfigurationManager 8.0.0 ve System.Diagnostics.DiagnosticSource 8.0.0 #2303 üzerinde ana .NET sürüm bağımlılıkları için açık sürüm eklendi
  • #2137 ayrı bir paket dosyasında hata ayıklama simgeleri oluşturma özelliği eklendi

SqlBulkCopy'ye yeni özellik RowsCopied64 eklendi

SqlBulkCopy, RowsCopied64 değer türlerini destekleyen yeni bir özellik long sahiptir.

Mevcut SqlBulkCopy.RowsCopied davranış değişmemiştir. değer int.MaxValueaştığında RowsCopied negatif bir sayı döndürebilir.

Örnek kullanım:

    using (SqlConnection srcConn = new SqlConnection(srcConstr))
    using (SqlCommand srcCmd = new SqlCommand("select top 5 * from employees", srcConn))
    {
        srcConn.Open();
        using (DbDataReader reader = srcCmd.ExecuteReader())
        {
            using (SqlBulkCopy bulkcopy = new SqlBulkCopy(dstConn))
            {
                bulkcopy.DestinationTableName = dstTable;
                SqlBulkCopyColumnMappingCollection ColumnMappings = bulkcopy.ColumnMappings;

                ColumnMappings.Add("EmployeeID", "col1");
                ColumnMappings.Add("LastName", "col2");
                ColumnMappings.Add("FirstName", "col3");

                bulkcopy.WriteToServer(reader);
                long rowsCopied = bulkcopy.RowsCopied64;
            }
        }
    }

SqlConnection'a yeni özellik AccessTokenCallBack eklendi

SqlConnection, federasyon kimlik doğrulamasına ait erişim belirtecini döndürmek için bir TokenCredential temsilcisi olarak yeni bir AccessTokenCallBack özelliği tanıtarak Func<SqlAuthenticationParameters, CancellationToken,Task<SqlAuthenticationToken>> kimlik doğrulamasını destekler.

Örnek kullanım:

using Microsoft.Data.SqlClient;
using Azure.Identity;

const string defaultScopeSuffix = "/.default";
string connectionString = GetConnectionString();
DefaultAzureCredential credential = new();
using SqlConnection connection = new(connectionString);

connection.AccessTokenCallback = async (authParams, cancellationToken) =>
{
    string scope = authParams.Resource.EndsWith(defaultScopeSuffix)
        ? authParams.Resource
        : $"{authParams.Resource}{defaultScopeSuffix}";
    AccessToken token = await credential.GetTokenAsync(
        new TokenRequestContext([scope]),
        cancellationToken);

    return new SqlAuthenticationToken(token.Token, token.ExpiresOn);
}

connection.Open();
Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
Console.WriteLine("State: {0}", connection.State);

SqlBatch API'si

Örnek kullanım:

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string str = "Data Source=(local);Initial Catalog=Northwind;"
        + "Integrated Security=SSPI;Encrypt=False";
        RunBatch(str);
    }

    static void RunBatch(string connString)
    {
        using var connection = new SqlConnection(connString);
        connection.Open();

        var batch = new SqlBatch(connection);

        const int count = 10;
        const string parameterName = "parameter";
        for (int i = 0; i < count; i++)
        {
            var batchCommand = new SqlBatchCommand($"SELECT @{parameterName} as value");
            batchCommand.Parameters.Add(new SqlParameter(parameterName, i));
            batch.BatchCommands.Add(batchCommand);
        }

        // Optionally Prepare
        batch.Prepare();

        var results = new List<int>(count);
        using (SqlDataReader reader = batch.ExecuteReader())
        {
            do
            {
                while (reader.Read())
                {
                    results.Add(reader.GetFieldValue<int>(0));
                }
            } while (reader.NextResult());
        }
        Console.WriteLine(string.Join(", ", results));
    }
}

5.2 Hedef platform desteği

  • .NET Framework 4.6.2+ (Windows x86, Windows x64)
  • .NET 6.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Bağımlılıklar da dahil olmak üzere tam sürüm notları GitHub Deposu'nda bulunur: 5.2 Sürüm Notları.

Microsoft.Data.SqlClient 5.1 sürüm notları

5.1'de hataya neden olan değişiklikler

5.1 sürümündeki yeni özellikler

  • DateOnly ve TimeOnly için SqlParameter değeri ve GetFieldValuedesteği eklendi. #1813
  • .NET Core ve SNI Native için TLS 1.3 desteği eklendi. #1821
  • ServerCertificate veya Encrypt=Mandatoryiçin Encrypt=Strict ayarı eklendi. #1822Daha fazla bilgi
  • .NET Framework hedeflenirken Windows Arm64 desteği eklendi. #1828

Sunucu sertifikası

ServerCertificate bağlantı ayarının varsayılan değeri boş bir dizedir. Encrypt Mandatory veya Strictolarak ayarlandığında ServerCertificate, dosya sistemindeki bir sertifika dosyasının yolunu sunucunun TLS/SSL sertifikasıyla eşleşecek şekilde belirtmek için kullanılabilir. Belirtilen sertifikanın geçerli olması için tam eşleşme olması gerekir. Kabul edilen sertifika biçimleri PEM, DERve CER' dır. Kullanım örneği aşağıda verilmiştir:

"Data Source=...;Encrypt=Strict;ServerCertificate=C:\\certificates\\server.cer"

5.1 Hedef platform desteği

  • .NET Framework 4.6.2+ (Windows x86, Windows x64)
  • .NET 6.0+ (Windows x86, Windows x64, Windows Arm64, Azure Resource Manager, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Bağımlılıklar da dahil olmak üzere tam sürüm notları GitHub Deposunda mevcuttur: 5.1 Sürüm Notları.

Microsoft.Data.SqlClient 5.0 sürüm notları

5.0'da uyumluluğu bozan değişiklikler

  • .NET Framework 4.6.1 #1574 desteği bırakıldı
  • Microsoft.SqlServer.Server paketine bir bağımlılık eklendi. Uygulamanız bu ad alanına başvuruda bulunuyorsa ve hala .NET Core'dan System.Data.SqlClient'a paket başvuruları (doğrudan veya dolaylı) varsa, bu yeni bağımlılık ad alanı çakışmalarına neden olabilir.
  • Microsoft.Data.SqlClient.Server ad alanından bırakılan sınıflar, Microsoft.SqlServer.Server paketinden desteklenen türlerle değiştirildi.#1585. Etkilenen sınıflar ve enumlar şunlardır:
    • Microsoft.Data.SqlClient.Server.IBinarySerialize -> Microsoft.SqlServer.Server.IBinarySerialize
    • Microsoft.Data.SqlClient.Server.InvalidUdtException -> Microsoft.SqlServer.Server.InvalidUdtException
    • Microsoft.Data.SqlClient.Server.SqlFacetAttribute -> Microsoft.SqlServer.Server.SqlFacetAttribute
    • Microsoft.Data.SqlClient.Server.SqlFunctionAttribute -> Microsoft.SqlServer.Server.SqlFunctionAttribute
    • Microsoft.Data.SqlClient.Server.SqlMethodAttribute -> Microsoft.SqlServer.Server.SqlMethodAttribute
    • Microsoft.Data.SqlClient.Server.SqlUserDefinedAggregateAttribute -> Microsoft.SqlServer.Server.SqlUserDefinedAggregateAttribute
    • Microsoft.Data.SqlClient.Server.SqlUserDefinedTypeAttribute -> Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute
    • (sabit listesi) Microsoft.Data.SqlClient.Server.DataAccessKind -> Microsoft.SqlServer.Server.DataAccessKind
    • (sabit listesi) Microsoft.Data.SqlClient.Server.Format -> Microsoft.SqlServer.Server.Format
    • (sabit listesi) Microsoft.Data.SqlClient.Server.SystemDataAccessKind -> Microsoft.SqlServer.Server.SystemDataAccessKind

5.0 sürümündeki yeni özellikler

TDS 8.0 gelişmiş güvenlik

TDS 8.0'ı kullanmak için bağlantı dizesinde Encrypt=Strict değerini belirtin. Katı mod, TrustServerCertificate'i devre dışı bırakır (Katı modda her zaman False olarak değerlendirilir). Bazı Katı mod senaryolarına yardımcı olmak için HostNameInCertificate eklendi. TDS 8.0, güvenli, şifreli bir TLS bağlantısı içinde tüm sunucu iletişimlerini başlatır ve devam eder.

Bağlantı şifreleme davranışını netleştirmek için yeni Şifreleme değerleri eklendi. Encrypt=Mandatory Encrypt=True eşdeğerdir ve TDS bağlantı anlaşması sırasında bağlantıları şifreler. Encrypt=Optional Encrypt=False eşdeğerdir ve yalnızca sunucu istemciye TDS bağlantı anlaşması sırasında şifreleme gerektiğini söylerse bağlantıyı şifreler.

Sunucu bağlantılarını şifreleme hakkında daha fazla bilgi için bkz. Microsoft.Data.SqlClient'da şifreleme ve sertifika doğrulama.

HostNameInCertificate, istemcinin sunucuyu tanımlamak için kullandığı addan farklı bir ada veya alternatif bir konu adına sahip olan bir sunucuya şifreleme ile bağlanmak için takma adlar kullanıldığında bağlantı dizesinde belirtilebilir (örneğin, DNS takma adları). Örnek kullanım: HostNameInCertificate=MyDnsAliasName

Sunucu SPN'i

Benzersiz etki alanı/orman topografisi olan bir ortamda bağlanırken, Sunucu SPN'leri için belirli gereksinimleriniz olabilir. Etki alanı ortamında tümleşik kimlik doğrulaması sırasında kullanılan otomatik olarak oluşturulan sunucu SPN'lerini geçersiz kılmak için ServerSPN/Server SPN ve FailoverServerSPN/Yük Devretme Sunucusu SPN bağlantı dizesi ayarları kullanılabilir.

SQL için diğer adlar desteği

Kullanıcılar SQL Server Configuration Manager'ı kullanarak Takma Adları yapılandırabilir. Bu takma adlar Windows kayıt defterinde depolanır ve .NET Framework'ü hedeflerken zaten desteklenmektedir. Bu sürüm, Windows üzerinde .NET veya .NET Core hedeflenirken takma ad desteği getirir.

SQL veri kaynağı numaralandırıcı desteği

Yerel ağ içindeki tüm kullanılabilir SQL Server örneklerini listelemek için bir mekanizma sağlar.

using Microsoft.Data.Sql;
static void Main()
  {
    // Retrieve the enumerator instance and then the data.
    SqlDataSourceEnumerator instance =
      SqlDataSourceEnumerator.Instance;
    System.Data.DataTable table = instance.GetDataSources();

    // Display the contents of the table.
    DisplayData(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
  }

  private static void DisplayData(System.Data.DataTable table)
  {
    foreach (System.Data.DataRow row in table.Rows)
    {
      foreach (System.Data.DataColumn col in table.Columns)
      {
        Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
      }
      Console.WriteLine("============================");
    }
  }

Güvenli olmayan TLS uyarılarını gizleme

Sunucuyla anlaşmak için 1.2'den küçük TLS sürümü kullanılıyorsa konsolda bir güvenlik uyarısı oluşturulur. Bu uyarı, uygulama başlangıcında aşağıdaki AppContext anahtarı etkinleştirilerek Encrypt = false SQL bağlantısında bastırılabilir:

Switch.Microsoft.Data.SqlClient.SuppressInsecureTLSWarning

5.0 Hedef platform desteği

  • .NET Framework 4.6.2+ (Windows x86, Windows x64)
  • .NET Core 3.1+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Bağımlılıklar da dahil olmak üzere tam sürüm notları GitHub Deposunda mevcuttur: 5.0 Sürüm Notları.

Microsoft.Data.SqlClient 4.1 sürüm notları

Bağımlılıklar dahil olmak üzere tam sürüm notları GitHub Deposu'nda mevcuttur: 4.1 Sürüm Notları.

4.1 sürümündeki yeni özellikler

Kanıtlama protokollerini tanıtma Yok

Bağlantı dizesinde None adlı yeni bir kanıtlama protokolüne izin verilir. Bu protokol, kullanıcıların VBS enklavları için enklav kanıtlamasından vazgeçmesine olanak tanır. Bu protokol ayarlandığında, enklav doğrulama URL özelliği isteğe bağlıdır.

Bağlantı dizesi örneği:

//Attestation protocol NONE with no URL
"Data Source = {server}; Initial Catalog = {db}; Column Encryption Setting = Enabled; Attestation Protocol = None;"

4.1 Hedef platform desteği

  • .NET Framework 4.6.1+ (Windows x86, Windows x64)
  • .NET Core 3.1+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Microsoft.Data.SqlClient 4.0 sürüm notları

Bağımlılıklarla birlikte tam sürüm notları, GitHub deposunda bulunmaktadır: 4.0 Sürüm Notları.

4.0'daki uyumluluk bozan değişiklikler

  • Encrypt bağlantı dizesi özelliği varsayılan olarak true olarak değiştirildi. #1210Daha fazla bilgi
  • Sürücü artık Active Directory kimlik doğrulama modları için SqlException'nin yerine AggregateException atıyor. #1213
  • .NET Framework'ten eski Asynchronous Processing bağlantı özelliği kaldırıldı. #1148
  • Güvenlik anahtarı Configurable Retry Logic kaldırıldı. #1254Daha fazla bilgi
  • .NET Core 2.1 #1272 desteği bırakıldı
  • [.NET Framework] Kullanıcı kimliği bağlantı dizesinde sağlandığında Active Directory Integrated kimlik doğrulaması #1359 kullanılırken özel durum fırlatılmaz.

4.0 sürümündeki yeni özellikler

Varsayılan değeri true olarak şifreleme

Encrypt bağlantı ayarının varsayılan değeri false olarak trueolarak değiştirildi. Bulut veritabanlarının artan kullanımı ve bu bağlantıların güvenli olduğundan emin olmak gerektiğinden, geriye dönük uyumluluk açısından çığır açan bu değişikliğin zamanı geldi.

Şifreleme gerektiğinde bağlantıların başarısız olduğundan emin olun

İstemci şifreleme kitaplıklarının devre dışı bırakıldığı veya kullanılamadığı senaryolarda, Şifreleme true olarak ayarlandığında veya sunucu şifreleme gerektirdiğinde şifrelenmemiş bağlantıların yapılması mümkündü.

Sistem varsayılan protokollerini kullanmak için Uygulama Bağlam Geçişi

TLS 1.3 sürücü tarafından desteklenmez; bu nedenle, varsayılan olarak desteklenen protokoller listesinden kaldırılmıştır. Kullanıcılar, aşağıdaki Uygulama Bağlamı anahtarını etkinleştirerek İşletim Sisteminin istemci protokollerinin kullanımını zorlamaya geri dönebilir:

Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols

İyileştirilmiş parametre bağlamasını etkinleştirme

Microsoft.Data.SqlClient, çok sayıda parametreye sahip sorgularının performansını artırmak için yeni bir SqlCommand API'si olan EnableOptimizedParameterBinding'i tanıtır. Bu özellik varsayılan olarak devre dışıdır. trueolarak ayarlandığında, komut yürütülürken parametre adları SQL Server örneğine gönderilmez.

public class SqlCommand
{
    public bool EnableOptimizedParameterBinding { get; set; }
}

Yapılandırılabilir yeniden deneme mantığı güvenlik anahtarını kaldırma

Yapılandırılabilir yeniden deneme mantığı özelliğini kullanmak için "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" Uygulama Bağlamı anahtarı artık gerekli değildir. Bu özellik artık üretimde desteklenmektedir. Özelliğin varsayılan davranışı, istemci uygulamaların yeniden denemeleri etkinleştirmek için değiştirmesi gereken bir yeniden deneme yapmama politikası olarak kalır.

SqlLocalDb paylaşılan örneği desteği

Yönetilen SNI kullanılırken SqlLocalDb paylaşılan örnekleri artık destekleniyor.

  • Olası senaryolar:
    • (localdb)\. (SqlLocalDb'nin varsayılan örneğine bağlanır)
    • (localdb)\<named instance>
    • (localdb)\.\<shared instance name> (*yeni eklenen destek)

GetFieldValueAsync<T>, GetFieldValue<T>XmlReader türleri için TextReader ve Stream desteği

XmlReader, TextReaderStream türleri artık GetFieldValueAsync<T> ve GetFieldValue<T>kullanılırken desteklenmektedir.

Örnek kullanım:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    using (SqlCommand command = new SqlCommand(query, connection))
    {
        connection.Open();
        using (SqlDataReader reader = await command.ExecuteReaderAsync())
        {
            if (await reader.ReadAsync())
            {
                using (Stream stream = await reader.GetFieldValueAsync<Stream>(1))
                {
                    // Continue to read from stream
                }
            }
        }
    }
}

4.0 Hedef platform desteği

  • .NET Framework 4.6.1+ (Windows x86, Windows x64)
  • .NET Core 3.1+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Microsoft.Data.SqlClient 3.0 sürüm notları

Bağımlılıklar da dahil olmak üzere tam sürüm notları için GitHub Deposunu inceleyebilirsiniz: 3.0 Sürüm Notları.

3.0'da hataya neden olan değişiklikler

3.0 sürümündeki yeni özellikler

Yapılandırılabilir yeniden deneme mantığı

Bu yeni özellik, istemci uygulamalarının "geçici" veya "yeniden denenebilir" hataları yeniden denemesi için yapılandırılabilir destek sunar. Yapılandırma, kod veya uygulama yapılandırma dosyaları aracılığıyla yapılabilir ve bağlantı açmak veya komut yürütmek için yeniden deneme işlemleri uygulanabilir. Bu özellik varsayılan olarak devre dışıdır ve şu anda önizleme aşamasındadır. Bu desteği etkinleştirmek için istemci uygulamalarının aşağıdaki güvenlik anahtarını açması gerekir:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.EnableRetryLogic", true);

.NET AppContext anahtarı etkinleştirildikten sonra, SqlConnection ve SqlCommand için bağımsız olarak veya çeşitli özelleştirme seçenekleri kullanılarak birlikte bir yeniden deneme mantığı ilkesi tanımlanabilir.

Özel bir SqlConnection uygulamasını kaydetmek için SqlCommand ve SqlRetryLogicBaseProvider yeni genel API'ler kullanıma sunulmuştur:

public SqlConnection
{
    public SqlRetryLogicBaseProvider RetryLogicProvider;
}

public SqlCommand
{
    public SqlRetryLogicBaseProvider RetryLogicProvider;
}

API Kullanımı örneklerine buradan ulaşabilirsiniz:

using Microsoft.Data.SqlClient;

/// Detecting retriable exceptions is a vital part of the retry pattern.
/// Before applying retry logic it is important to investigate exceptions and choose a retry provider that best fits your scenario.
/// First, log your exceptions and find transient faults.
/// The purpose of this sample is to illustrate how to use this feature and the condition might not be realistic.
class RetryLogicSample
{
    private const string DefaultDB = "Northwind";
    private const string CnnStringFormat = "Server=localhost; Initial Catalog={0}; Integrated Security=true; pooling=false;";
    private const string DropDatabaseFormat = "DROP DATABASE {0}";

    // For general use
    private static SqlConnection s_generalConnection = new SqlConnection(string.Format(CnnStringFormat, DefaultDB));

    static void Main(string[] args)
    {
        // 1. Define the retry logic parameters
        var options = new SqlRetryLogicOption()
        {
            NumberOfTries = 5,
            MaxTimeInterval = TimeSpan.FromSeconds(20),
            DeltaTime = TimeSpan.FromSeconds(1)
        };

        // 2. Create a retry provider
        var provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);

        // define the retrying event to report the execution attempts
        provider.Retrying += (object s, SqlRetryingEventArgs e) =>
            {
                int attempts = e.RetryCount + 1;
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"attempt {attempts} - current delay time:{e.Delay} \n");
                Console.ForegroundColor = ConsoleColor.DarkGray;
                if (e.Exceptions[e.Exceptions.Count - 1] is SqlException ex)
                {
                    Console.WriteLine($"{ex.Number}-{ex.Message}\n");
                }
                else
                {
                    Console.WriteLine($"{e.Exceptions[e.Exceptions.Count - 1].Message}\n");
                }

                // It is not a good practice to do time-consuming tasks inside the retrying event which blocks the running task.
                // Use parallel programming patterns to mitigate it.
                if (e.RetryCount == provider.RetryLogic.NumberOfTries - 1)
                {
                    Console.WriteLine("This is the last chance to execute the command before throwing the exception.");
                    Console.WriteLine("Press Enter when you're ready:");
                    Console.ReadLine();
                    Console.WriteLine("continue ...");
                }
            };

        // Open the general connection.
        s_generalConnection.Open();

        try
        {
            // Assume the database is being created and other services are going to connect to it.
            RetryConnection(provider);
        }
        catch
        {
            // exception is thrown if connecting to the database isn't successful.
            throw;
        }
    }

    private static void ExecuteCommand(SqlConnection cn, string command)
    {
        using var cmd = cn.CreateCommand();
        cmd.CommandText = command;
        cmd.ExecuteNonQuery();
    }

    private static void RetryConnection(SqlRetryLogicBaseProvider provider)
    {
        // Change this if you already have a database with the same name in your database.
        string dbName = "Invalid_DB_Open";

        // Create a connection to an invalid database.
        using var cnn = new SqlConnection(string.Format(CnnStringFormat, dbName));
        // 3. Assign the `provider` to the connection
        cnn.RetryLogicProvider = provider;
        Console.WriteLine($"Connecting to the [{dbName}] ...");
        // Manually execute the following command in SSMS to create the invalid database while the SqlConnection is attempting to connect to it.
        // >> CREATE DATABASE Invalid_DB_Open;
        Console.WriteLine($"Manually, run the 'CREATE DATABASE {dbName};' in the SQL Server before exceeding the {provider.RetryLogic.NumberOfTries} attempts.");
        // the connection tries to connect to the database 5 times
        Console.WriteLine("The first attempt, before getting into the retry logic.");
        cnn.Open();
        Console.WriteLine($"Connected to the [{dbName}] successfully.");

        cnn.Close();

        // Drop it after test
        ExecuteCommand(s_generalConnection, string.Format(DropDatabaseFormat, dbName));
        Console.WriteLine($"The [{dbName}] is removed.");
    }
}
/// Detecting retriable exceptions is a vital part of the retry pattern.
/// Before applying retry logic it is important to investigate exceptions and choose a retry provider that best fits your scenario.
/// First, log your exceptions and find transient faults.
/// The purpose of this sample is to illustrate how to use this feature and the condition might not be realistic.

    private const string DefaultDB = "Northwind";
    private const string CnnStringFormat = "Server=localhost; Initial Catalog={0}; Integrated Security=true; pooling=false;";
    private const string DropDatabaseFormat = "DROP DATABASE {0}";
    private const string CreateDatabaseFormat = "CREATE DATABASE {0}";

    // For general use
    private static SqlConnection s_generalConnection = new SqlConnection(string.Format(CnnStringFormat, DefaultDB));

    static void Main(string[] args)
    {
        // 1. Define the retry logic parameters
        var options = new SqlRetryLogicOption()
        {
            NumberOfTries = 5,
            MaxTimeInterval = TimeSpan.FromSeconds(20),
            DeltaTime = TimeSpan.FromSeconds(1),
            AuthorizedSqlCondition = null,
            // error number 3702 : Cannot drop database "xxx" because it is currently in use.
            TransientErrors = new int[] {3702}
        };

        // 2. Create a retry provider
        var provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);

        // define the retrying event to report execution attempts
        provider.Retrying += (object s, SqlRetryingEventArgs e) =>
            {
                int attempts = e.RetryCount + 1;
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"attempt {attempts} - current delay time:{e.Delay} \n");
                Console.ForegroundColor = ConsoleColor.DarkGray;
                if (e.Exceptions[e.Exceptions.Count - 1] is SqlException ex)
                {
                    Console.WriteLine($"{ex.Number}-{ex.Message}\n");
                }
                else
                {
                    Console.WriteLine($"{e.Exceptions[e.Exceptions.Count - 1].Message}\n");
                }

                // It is not good practice to do time-consuming tasks inside the retrying event which blocks the running task.
                // Use parallel programming patterns to mitigate it.
                if (e.RetryCount == provider.RetryLogic.NumberOfTries - 1)
                {
                    Console.WriteLine("This is the last chance to execute the command before throwing the exception.");
                    Console.WriteLine("Press Enter when you're ready:");
                    Console.ReadLine();
                    Console.WriteLine("continue ...");
                }
            };

        // Open a general connection.
        s_generalConnection.Open();

        try
        {
            // Assume the database is creating and other services are going to connect to it.
            RetryCommand(provider);
        }
        catch
        {
            s_generalConnection.Close();
            // exception is thrown if connecting to the database isn't successful.
            throw;
        }
        s_generalConnection.Close();
    }

    private static void ExecuteCommand(SqlConnection cn, string command)
    {
        using var cmd = cn.CreateCommand();
        cmd.CommandText = command;
        cmd.ExecuteNonQuery();
    }

    private static void FindActiveSessions(SqlConnection cnn, string dbName)
    {
        using var cmd = cnn.CreateCommand();
        cmd.CommandText = "DECLARE @query NVARCHAR(max) = '';" + Environment.NewLine +
            $"SELECT @query = @query + 'KILL ' + CAST(spid as varchar(50)) + ';' FROM sys.sysprocesses WHERE dbid = DB_ID('{dbName}')" + Environment.NewLine +
            "SELECT @query AS Active_sessions;";
        var reader = cmd.ExecuteReader();
        if (reader.Read())
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write($">> Execute the '{reader.GetString(0)}' command in SQL Server to unblock the running task.");
            Console.ResetColor();
        }
        reader.Close();
    }
var RetryLogicOption = new SqlRetryLogicOption()
{
    NumberOfTries = 5,
    // Declare the error number 102 as a transient error to apply the retry logic when it occurs.
    TransientErrors = new int[] { 102 },
    // When a SqlCommand executes out of a transaction, 
    // the retry logic will apply if it contains a 'select' keyword.
    AuthorizedSqlCondition = x => string.IsNullOrEmpty(x)
            || Regex.IsMatch(x, @"\b(SELECT)\b", RegexOptions.IgnoreCase),
    DeltaTime = TimeSpan.FromSeconds(1),
    MaxTimeInterval = TimeSpan.FromSeconds(60),
    MinTimeInterval = TimeSpan.FromSeconds(3)
};

Mevcut kodu değiştirmek zorunda kalmadan yapılandırma dosyalarından aynı kaydı yapmak için yeni yapılandırma bölümleri de kullanıma sunulmuştur:

<section name="SqlConfigurableRetryLogicConnection"
            type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>

<section name="SqlConfigurableRetryLogicCommand"
            type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>

Yapılandırma dosyalarındaki yeni yapılandırma bölümlerini kullanmanın basit bir örneği aşağıda verilmiştir:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="SqlConfigurableRetryLogicConnection"
             type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
    <section name="SqlConfigurableRetryLogicCommand"
             type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>

    <section name="AppContextSwitchOverrides"
             type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>
  </configSections>

  <!--Enable safety switch in .NET Core-->
  <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>

  <!--Retry method for SqlConnection-->
  <SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider" numberOfTries ="3" deltaTime ="00:00:10" maxTime ="00:00:30"
                                    transientErrors="40615" />

  <!--Retry method for SqlCommand containing SELECT queries-->
  <SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" numberOfTries ="5" deltaTime ="00:00:10" maxTime ="00:01:10"
                                    authorizedSqlCondition="\b(SELECT)\b" transientErrors="102, 4060, 0"/>
</configuration>

Alternatif olarak, uygulamalar kendi SqlRetryLogicBaseProvider temel sınıfı sağlayıcısını uygulayabilir ve SqlConnection/SqlCommandile kaydedebilir.

Etkinlik sayaçları

Aşağıdaki sayaçlar artık .NET Core 3.1+ ve .NET Standard 2.1+'ı hedefleyen uygulamalar için kullanılabilir:

Ad Görünen ad Açıklama
Etkin-sabit bağlantılar Şu anda sunuculara yapılan gerçek etkin bağlantılar Şu anda veritabanı sunucularında açık olan bağlantı sayısı.
doğrudan bağlar Sunuculara gerçek bağlantı hızı Veritabanı sunucularına açılan saniyede bağlantı sayısı.
bağlantısı kesiliyor Sunuculardan gerçek bağlantı kesme oranı Veritabanı sunucularına saniye başına yapılan bağlantı kesme sayısı.
etkin-yumuşak bağlantılar Bağlantı havuzundan alınan etkin bağlantılar Bağlantı havuzundan hali hazırda açık olan ve kullanılan bağlantı sayısı.
yumuşak bağlantılar Bağlantı havuzundan alınan bağlantı oranı Bağlantı havuzundan saniye başına tüketilen bağlantı sayısı.
yumuşak bağlantı kesmeleri Bağlantı havuzuna döndürülen bağlantı oranı Bağlantı havuzuna saniye başına döndürülen bağlantı sayısı.
havuzlanmamış bağlantı sayısı Bağlantı havuzu kullanmayan bağlantı sayısı Havuzlanmamış etkin bağlantı sayısı.
bağlantı havuzu sayısı Bağlantı havuzu tarafından yönetilen bağlantı sayısı Bağlantı havuzu altyapısını yöneten etkin bağlantı sayısı.
aktif-bağlantı-havuzu-grupları sayısı Etkin benzersiz bağlantı dizelerinin sayısı Etkin, benzersiz bağlantı havuzu gruplarının sayısı. Bu sayaç, AppDomain içinde bulunan benzersiz bağlantı dizelerinin sayısını temel alır.
etkin olmayan bağlantı havuzu gruplarının sayısı Budama için bekleyen benzersiz bağlantı dizelerinin sayısı Budama için işaretlenen benzersiz bağlantı havuzu gruplarının sayısı. Bu sayaç, AppDomain içinde bulunan benzersiz bağlantı dizelerinin sayısını temel alır.
etkin bağlantı havuzlarının sayısı Etkin bağlantı havuzlarının sayısı Toplam bağlantı havuzu sayısı.
etkin olmayan bağlantı havuzu sayısı Etkin olmayan bağlantı havuzlarının sayısı Son zamanlarda etkin olmayan ve kaldırılmayı bekleyen etkin olmayan bağlantı havuzlarının sayısı.
etkin bağlantı sayısı Etkin bağlantı sayısı Şu anda kullanımda olan etkin bağlantı sayısı.
ücretsiz bağlantı sayısı Bağlantı havuzundaki hazır bağlantı sayısı Bağlantı havuzlarında kullanılabilen açık bağlantı sayısı.
sayıda stasis bağlantıları Şu anda hazır olmak için bekleyen bağlantı sayısı Şu anda bir eylemin tamamlanmasını bekleyen ve uygulama tarafından kullanılamayan bağlantı sayısı.
geri kazanılmış bağlantı sayısı GC'den geri alınan bağlantı sayısı Uygulama tarafından Close veya Dispose çağrılmadığı zaman çöp toplama süreciyle yeniden elde edilen bağlantı sayısı. Not Bağlantıların açıkça kapatılmaması veya devre dışı bırakmaması performansa zarar verir.

Bu sayaçlar.NET Core genel CLI araçlarıyla kullanılabilir: dotnet-counters ve dotnet-trace Windows'ta veya Linux'ta ve Windows'da PerfView'da sağlayıcı adı olarak Microsoft.Data.SqlClient.EventSource kullanılır. Daha fazla bilgi için bkz. Olay sayacı değerlerini alma.

dotnet-counters monitor Microsoft.Data.SqlClient.EventSource -p
PerfView /onlyProviders=*Microsoft.Data.SqlClient.EventSource:EventCounterIntervalSec=1 collect

Azure Kimlik bağımlılığına giriş

Microsoft.Data.SqlClient artık "Active Directory Yönetilen Kimliği/MSI" ve "Active Directory Hizmet Sorumlusu" kimlik doğrulama modları için belirteçleri almak için Azure.Identity kitaplığına bağlıdır. Bu değişiklik, genel yüzey alanına aşağıdaki değişiklikleri getirir:

  • Hataya neden olan değişiklik

    "Kullanıcı Kimliği" bağlantı özelliği artık "User-Assigned Yönetilen Kimlik" için "Nesne Kimliği" yerine "İstemci Kimliği" gerektiriyor.

  • Genel Kullanıma Açık API

    Yeni salt okunur ortak özellik: SqlAuthenticationParameters.ConnectionTimeout

  • Bağımlılık

    Azure.Identity v1.3.0

SNI.dll'de olay izleme geliştirmeleri

Microsoft.Data.SqlClient.SNI (.NET Framework bağımlılığı) ve Microsoft.Data.SqlClient.SNI.runtime (.NET Core/Standart bağımlılık) sürümleri v3.0.0-preview1.21104.2olarak güncelleştirildi. SNI.dll'de olay izleme artık bir istemci uygulaması aracılığıyla etkinleştirilmez. veya xperf gibi araçlar aracılığıyla perfview sağlayıcısına oturum abone olmak yeterlidir. Daha fazla bilgi için bkz. Yerel SNI'de Olay izleme desteği.

Satır sürümü null davranışını etkinleştirme

SqlDataReader boş bir DBNullyerine byte[] bir değer döndürür. Eski davranışı etkinleştirmek için, uygulama başlangıcında aşağıdaki AppContext anahtarını etkinleştirmeniz gerekir: "Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior"

Microsoft Entra varsayılan kimlik doğrulama desteği

Not

Microsoft Entra ID, Azure Active Directory (Azure AD) için yeni ad olsa da, mevcut ortamların kesintiye uğramasını önlemek için Azure AD yine dekullanıcı arabirimi alanları, bağlantı sağlayıcıları, hata kodları ve cmdlet'ler gibi sabit kodlanmış bazı öğelerde kullanılmaya devam eder. Bu makalede, iki ad birbirinin yerine kullanılabilir.

Bu çekme isteği, Active Directory Varsayılanadlı yeni bir SQL Kimlik Doğrulama yöntemi tanıtır. Bu kimlik doğrulama modu Microsoft Entra ID ile kullanıcı kimlik doğrulaması olanaklarını genişletir ve oturum açma çözümlerini istemci ortamına, Visual Studio Code'a, Visual Studio'ya, Azure CLI'ya vb. genişletir.

Bu kimlik doğrulama modunda, sürücü Azure Kimlik kitaplığından "DefaultAzureCredential" öğesini geçirerek bir erişim belirteci alır. Bu mod, aşağıdaki sırayla bir erişim belirteci almak için bu kimlik bilgisi türlerini kullanmayı dener:

  • EnvironmentCredential
    • İstemci ve gizli dizi veya kullanıcı adı ve parola kullanarak Microsoft Entra Id ile kimlik doğrulamasını etkinleştirir. Aşağıdaki ortam değişkenlerinde yapılandırılan ayrıntılar: AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_CLIENT_CERTIFICATE_PATH, AZURE_USERNAME, AZURE_PASSWORD (Diğer ayrıntılar)
  • ManagedIdentityCredential
    • Dağıtım ortamına atanmış bir yönetilen kimlik kullanarak Microsoft Entra Kimliği ile kimlik doğrulamayı dener. "Kullanıcı tarafından atanan yönetilen kimlik" "İstemci Kimliği", "Kullanıcı Kimliği" bağlantı özelliğinden okunur.
  • SharedTokenCacheCredential
    • Microsoft uygulamaları arasında paylaşılan yerel önbellekteki belirteçleri kullanarak kimlik doğrulaması yapar.
  • VisualStudioCredential
    • Visual Studio'dan alınan verileri kullanarak Microsoft Entra Id ile kimlik doğrulamasını etkinleştirir
  • VisualStudioCodeCredential
    • Visual Studio Code'dan alınan verileri kullanarak Microsoft Entra Id ile kimlik doğrulamasını etkinleştirir.
  • AzureCliCredential
    • Erişim belirteci almak için Azure CLI kullanarak Microsoft Entra Id ile kimlik doğrulamasını etkinleştirir.

InteractiveBrowserCredential, "Active Directory Varsayılanı" sürücü uygulamasında devre dışı bırakılır ve "Active Directory Etkileşimli" MFA/Etkileşimli kimlik doğrulaması kullanarak belirteç almak için kullanılabilen tek seçenektir.

Şu anda daha fazla özelleştirme seçeneği sağlanmamıştır.

Özel ana anahtar deposu sağlayıcısı kayıt geliştirmeleri

Microsoft.Data.SqlClient artık çok kiracılı uygulamaları ve bunların sütun şifreleme/şifre çözme kullanımını daha iyi desteklemek için ana anahtar deposu sağlayıcılarının bir uygulamada nerede erişilebilir olduğu hakkında daha fazla denetim sunuyor. SqlConnection ve SqlCommandörneklerinde özel ana anahtar deposu sağlayıcılarının kaydedilmesine izin vermek için aşağıdaki API'ler tanıtılır:

public class SqlConnection
{
    public void RegisterColumnEncryptionKeyStoreProvidersOnConnection(IDictionary<string, SqlColumnEncryptionKeyStoreProvider> customProviders)
}
public class SqlCommand
{
    public void RegisterColumnEncryptionKeyStoreProvidersOnCommand(IDictionary<string, SqlColumnEncryptionKeyStoreProvider> customProviders)
}

Özel ana anahtar deposu sağlayıcılarını genel olarak kaydetmek için kullanılan SqlConnection, SqlConnection.RegisterColumnEncryptionKeyStoreProvidersüzerindeki statik API desteklenmeye devam eder. Genel olarak tutulan sütun şifreleme anahtarı önbelleği yalnızca genel olarak kayıtlı sağlayıcılar için geçerlidir.

Sütun ana anahtar deposu sağlayıcısı kayıt önceliği

Windows Sertifika Deposu, CNG Mağazası ve CSP için kullanılabilen yerleşik sütun ana anahtar deposu sağlayıcıları önceden kaydedilir. Yerleşik sütun ana anahtar deposu sağlayıcılarından biri gerekiyorsa, bağlantı veya komut örneklerine hiçbir sağlayıcı kaydedilmemelidir.

Özel ana anahtar deposu sağlayıcıları sürücüye üç farklı katmanda kaydedilebilir. Genel düzey şu anda olduğu gibidir. Yeni bağlantı başına ve komut düzeyi başına kayıtlar başlangıçta boş olur ve birden çok kez ayarlanabilir.

Üç kaydın öncelikleri şunlardır:

  • Her komut için kayıt boş değilse kontrol edilir.
  • Komut başına kayıt boşsa, bağlantı başına kayıt boş değilse kontrol edilir.
  • Bağlantı başına kayıt boşsa, genel kayıt kontrol edilir.

Herhangi bir anahtar deposu sağlayıcısı kayıt düzeyinde bulunduktan sonra, sürücü sağlayıcı aramak için diğer kayıtlara geri dönmez . Sağlayıcılar kayıtlıysa ancak uygun sağlayıcı bir düzeyde bulunamazsa, yalnızca denetlenen kayıttaki kayıtlı sağlayıcıları içeren bir özel durum oluşturulur.

Sütun şifreleme anahtarı önbellek önceliği

Sürücü, yeni örnek düzeyi API'ler kullanılarak kaydedilen özel anahtar deposu sağlayıcıları için sütun şifreleme anahtarlarını (CEK) önbelleğe almaz. Anahtar depo sağlayıcılarının performansı artırmak için kendi önbelleklerini uygulaması gerekir. Sürücü, anahtar deposu sağlayıcı örneği genel düzeyde sürücüye kayıtlıysa özel anahtar deposu sağlayıcıları tarafından uygulanan sütun şifreleme anahtarlarının yerel önbelleğini devre dışı bırakır.

Önbellek süresinin geçerlilik süresini ayarlamak için SqlColumnEncryptionKeyStoreProvider temel sınıfında yeni bir API de kullanıma sunulmuştur.

public abstract class SqlColumnEncryptionKeyStoreProvider
{
    // The default value of Column Encryption Key Cache Time to Live is 0.
    // Provider's local cache is disabled for globally registered providers.
    // Custom key store provider implementation must include column encryption key cache to provide caching support to locally registered providers.
    public virtual TimeSpan? ColumnEncryptionKeyCacheTtl { get; set; } = new TimeSpan(0);
}

IP adresi tercihi

TCP bağlantıları oluşturulurken sürücüye IP adresi ailesi tercihini belirtmek için yeni bir bağlantı özelliği IPAddressPreference tanıtılır. Transparent Network IP Resolution (.NET Framework'te) veya Multi Subnet Failovertrueolarak ayarlandıysa, bu ayarın hiçbir etkisi yoktur. Bu özellik için kabul edilen üç değer vardır:

  • IPv4First

    • Bu değer varsayılan değerdir. Sürücü önce çözümlenmiş IPv4 adreslerini kullanır. Hiçbiri başarıyla bağlanamıyorsa, çözümlenen IPv6 adreslerini dener.
  • IPv6First

    • Sürücü önce çözümlenmiş IPv6 adreslerini kullanır. Hiçbiri başarıyla bağlanamıyorsa, çözümlenen IPv4 adreslerini dener.
  • UsePlatformDefault

    • Sürücü, IP adreslerini DNS çözümleme yanıtından alınan sırayla dener.

3.0 Hedef platform desteği

  • .NET Framework 4.6.1+ (Windows x86, Windows x64)
  • .NET Core 2.1+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Microsoft.Data.SqlClient 2.1 sürüm notları

Bağımlılıklar da dahil olmak üzere tam sürüm notları GitHub Deposu: 2.1 Sürüm Notları.

2.1 sürümündeki yeni özellikler

Always Encrypted için platformlar arası destek

Microsoft.Data.SqlClient v2.1, aşağıdaki platformlarda Always Encrypted desteğini genişletir:

Always Encrypted Desteği Güvenli Kapanım ile Always Encrypted Desteği Hedef çerçeve Microsoft.Data.SqlClient Sürümü İşletim sistemi
Evet Evet .NET Framework 4.6+ 1.1.0+ Windows
Evet Evet .NET Core 2.1+ 2.1.0+1 Windows, Linux, macOS
Evet 2 yok .NET Standard 2.0 2.1.0+ Windows, Linux, macOS
Evet Evet .NET Standard 2.1+ 2.1.0+ Windows, Linux, macOS

1 Microsoft.Data.SqlClient v2.1 sürümünden önce Always Encrypted yalnızca Windows'ta desteklenir.
2 Güvenli kuşatmalarla Always Encrypted, .NET Standard 2.0'da desteklenmez.

Microsoft Entra Cihaz Kodu Akışı ile kimlik doğrulama

Microsoft.Data.SqlClient v2.1, MSAL.NET ile "Cihaz Kodu Akışı" kimlik doğrulaması için destek sağlar. Referans belgeleri: OAuth2.0 Cihaz Yetkilendirme Hibe akışı

Bağlantı dizesi örneği:

Server=<server>.database.windows.net; Authentication=Active Directory Device Code Flow; Database=Northwind;Encrypt=True

Aşağıdaki API, Cihaz Kodu Akışı geri çağırma mekanizmasının özelleştirilmesini sağlar:

public class ActiveDirectoryAuthenticationProvider
{
    // For .NET Framework, .NET Core and .NET Standard targeted applications
    public void SetDeviceCodeFlowCallback(Func<DeviceCodeResult, Task> deviceCodeFlowCallbackMethod)
}

Microsoft Entra yönetilen kimlik doğrulaması

Microsoft.Data.SqlClient v2.1, Microsoft Entra kimlik doğrulamasını yönetilen kimliklerkullanarak destekler.

Aşağıdaki kimlik doğrulama modu anahtar sözcükleri desteklenir:

  • Active Directory Yönetilen Kimlik
  • Active Directory MSI (çapraz MS SQL sürücüleri uyumluluğu için)

Bağlantı dizesi örnekleri:

// For System Assigned Managed Identity
"Server={serverURL}; Authentication=Active Directory MSI; Encrypt=True; Initial Catalog={db};"

// For System Assigned Managed Identity
"Server={serverURL}; Authentication=Active Directory Managed Identity; Initial Catalog={db};"

// For User Assigned Managed Identity
"Server={serverURL}; Authentication=Active Directory MSI; Encrypt=True; User Id={ObjectIdOfManagedIdentity}; Initial Catalog={db};"

// For User Assigned Managed Identity
"Server={serverURL}; Authentication=Active Directory Managed Identity; Encrypt=True; User Id={ObjectIdOfManagedIdentity}; Initial Catalog={db};"

Microsoft Entra Interactive kimlik doğrulama geliştirmeleri

Microsoft.Data.SqlClient v2.1, Microsoft Entra Interactive kimlik doğrulama deneyimini özelleştirmek için aşağıdaki API'leri ekler:

public class ActiveDirectoryAuthenticationProvider
{
    // For .NET Framework targeted applications only
    public void SetIWin32WindowFunc(Func<IWin32Window> iWin32WindowFunc);

    // For .NET Standard targeted applications only
    public void SetParentActivityOrWindowFunc(Func<object> parentActivityOrWindowFunc);

    // For .NET Framework, .NET Core and .NET Standard targeted applications
    public void SetAcquireAuthorizationCodeAsyncCallback(Func<Uri, Uri, CancellationToken, Task<Uri>> acquireAuthorizationCodeAsyncCallback);

    // For .NET Framework, .NET Core and .NET Standard targeted applications
    public void ClearUserTokenCache();
}

SqlClientAuthenticationProviders yapılandırma bölümü

Microsoft.Data.SqlClient v2.1, SqlClientAuthenticationProviders (mevcut SqlAuthenticationProviderskopyası) adlı yeni bir yapılandırma bölümü tanıtır. Mevcut yapılandırma bölümü, SqlAuthenticationProvidersuygun tür tanımlandığında geriye dönük uyumluluk için hala desteklenmektedir.

Yeni bölüm, uygulama yapılandırma dosyalarının System.Data.SqlClient için bir SqlAuthenticationProviders bölümü ve Microsoft.Data.SqlClient için bir SqlClientAuthenticationProviders bölümü içermesine izin verir.

Uygulama istemci kimliğini kullanarak Microsoft Entra kimlik doğrulaması

Microsoft.Data.SqlClient v2.1, kullanıcı tanımlı uygulama istemci kimliğini Microsoft Kimlik Doğrulama Kitaplığı'na geçirme desteği sağlar. Uygulama İstemci Kimliği, Microsoft Entra Id ile kimlik doğrulaması yaparken kullanılır.

Aşağıdaki yeni API'ler kullanıma sunulmuştur:

  1. ActiveDirectoryAuthenticationProvider'da yeni bir oluşturucu kullanıma sunulmuştur:

    Şunlar için geçerlidir: Tüm .NET Platformları (.NET Framework, .NET Core ve .NET Standard)

    public ActiveDirectoryAuthenticationProvider(string applicationClientId)
    

    Kullanım:

    string APP_CLIENT_ID = "<GUID>";
    SqlAuthenticationProvider customAuthProvider = new ActiveDirectoryAuthenticationProvider(APP_CLIENT_ID);
    SqlAuthenticationProvider.SetProvider(SqlAuthenticationMethod.ActiveDirectoryInteractive, customAuthProvider);
    
    using (SqlConnection sqlConnection = new SqlConnection("<connection_string>"))
    {
        sqlConnection.Open();
    }
    
  2. SqlAuthenticationProviderConfigurationSection ve SqlClientAuthenticationProviderConfigurationSectionaltında yeni bir yapılandırma özelliği kullanıma sunulmuştur:

    Şunlar için geçerlidir: .NET Framework ve .NET Core

    internal class SqlAuthenticationProviderConfigurationSection : ConfigurationSection
    {
        ...
        [ConfigurationProperty("applicationClientId", IsRequired = false)]
        public string ApplicationClientId => this["applicationClientId"] as string;
    }
    
    // Inheritance
    internal class SqlClientAuthenticationProviderConfigurationSection : SqlAuthenticationProviderConfigurationSection
    { ... }
    

    Kullanım:

    <configuration>
        <configSections>
            <section name="SqlClientAuthenticationProviders"
                             type="Microsoft.Data.SqlClient.SqlClientAuthenticationProviderConfigurationSection, Microsoft.Data.SqlClient" />
        </configSections>
        <SqlClientAuthenticationProviders applicationClientId ="<GUID>" />
    </configuration>
    
    <!--or-->
    
    <configuration>
        <configSections>
            <section name="SqlAuthenticationProviders"
                             type="Microsoft.Data.SqlClient.SqlAuthenticationProviderConfigurationSection, Microsoft.Data.SqlClient" />
        </configSections>
        <SqlAuthenticationProviders applicationClientId ="<GUID>" />
    </configuration>
    

Veri Sınıflandırma v2 desteği

Microsoft.Data.SqlClient v2.1, Veri Sınıflandırması'nın "Duyarlılık Derecesi" bilgileri için destek sunar. Aşağıdaki yeni API'ler kullanıma sunuldu:

public class SensitivityClassification
{
    public SensitivityRank SensitivityRank;
}

public class SensitivityProperty
{
    public SensitivityRank SensitivityRank;
}

public enum SensitivityRank
{
    NOT_DEFINED = -1,
    NONE = 0,
    LOW = 10,
    MEDIUM = 20,
    HIGH = 30,
    CRITICAL = 40
}

Etkin bir için oturum kimliği SqlConnection

Microsoft.Data.SqlClient v2.1, etkin bir bağlantıda yeni bir SqlConnection özelliği olan ServerProcessId'i tanıtır.

public class SqlConnection
{
    // Returns the session ID (SPID) of the active connection.
    public int ServerProcessId;
}

Yerel SNI'de izleme günlüğü desteği

Microsoft.Data.SqlClient v2.1, SNI.dll'de olay izlemeyi etkinleştirmek için mevcut SqlClientEventSource uygulamasını genişletir. Olaylar Xperf gibi bir araç kullanılarak yakalanmalıdır.

İzleme, SqlClientEventSource'a bir komut gönderilerek, gösterildiği şekilde etkinleştirilebilir.

// Enables trace events:
EventSource.SendCommand(eventSource, (EventCommand)8192, null);

// Enables flow events:
EventSource.SendCommand(eventSource, (EventCommand)16384, null);

// Enables both trace and flow events:
EventSource.SendCommand(eventSource, (EventCommand)(8192 | 16384), null);

"Komut Zaman Aşımı" bağlantı dizesi özelliği

Microsoft.Data.SqlClient v2.1, varsayılan 30 saniyeyi geçersiz kılmak için "Komut Zaman Aşımı" bağlantı dizesi özelliğini tanıtır. SqlCommand üzerindeki özelliği kullanılarak tek tek komutların CommandTimeout zaman aşımı geçersiz kılınabilir.

Bağlantı dizesi örnekleri:

"Server={serverURL}; Initial Catalog={db}; Encrypt=True; Integrated Security=true; Command Timeout=60"

Simgelerin yerel SNI'den kaldırılması

Microsoft.Data.SqlClient v2.1 ile, v2.0.0 ile tanıtılan sembolleri Microsoft.Data.SqlClient.SNI.runtime NuGet'ten v2.1.1itibarıyla kaldırdık. Ortak simgeler artık Ortak simgelere erişim gerektiren BinSkim gibi araçlar için Microsoft Symbols Server'da yayımlanıyor.

Microsoft.Data.SqlClient simgelerinin kaynak bağlaması

Microsoft.Data.SqlClient v2.1'den başlayarak, Microsoft.Data.SqlClient simgeleri kaynak kodu indirmeye gerek kalmadan gelişmiş bir hata ayıklama deneyimi için kaynak bağlantılıdır ve Microsoft Symbols Server'da yayımlanır.

2.1 Hedef platform desteği

  • .NET Framework 4.6+ (Windows x86, Windows x64)
  • .NET Core 2.1+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Microsoft.Data.SqlClient 2.0 sürüm notları

Tam sürüm notları, bağımlılıklar da dahil olmak üzere, GitHub Deposu'nda mevcuttur: 2.0 Sürüm Notları.

2.0'da hataya neden olan değişiklikler

  • Kapanım sağlayıcısı arabirimi SqlColumnEncryptionEnclaveProvider için erişim değiştiricisi public'den internalolarak değiştirilmiştir.
  • SqlClientMetaDataCollectionNames sınıfındaki sabitler SQL Server'daki değişiklikleri yansıtacak şekilde güncelleştirildi.
  • Hedef SQL Server, Azure bağlantıları için varsayılan olan TLS şifrelemesini zorunlu kıldığında sürücü artık Sunucu Sertifikası doğrulaması gerçekleştirir.
  • SqlDataReader.GetSchemaTable() artık DataTableyerine boş bir null döndürür.
  • Sürücü artık SQL Server davranışıyla eşleşecek şekilde ondalık ölçek yuvarlama gerçekleştirir. Geriye dönük uyumluluk için, önceki kesme davranışı AppContext anahtarı kullanılarak etkinleştirilebilir.
  • Microsoft.Data.SqlClient kullanan .NET Framework uygulamaları için, daha önce bin\x64 ve bin\x86 klasörlerine indirilen SNI.dll dosyaları artık Microsoft.Data.SqlClient.SNI.x64.dll ve Microsoft.Data.SqlClient.SNI.x86.dll olarak adlandırılır ve bin dizinine indirilir.
  • Yeni bağlantı dizesi özelliği eş anlamlıları, tutarlılığı sağlamak için bağlantı dizesi SqlConnectionStringBuilder'dan alınırken eski özelliklerin yerini alır. Daha Fazla Bilgi

2.0 sürümündeki yeni özellikler

Aşağıdaki yeni özellikler Microsoft.Data.SqlClient 2.0'da kullanıma sunulmuştur.

DNS hatası dayanıklılığı

Sürücü artık özelliği destekleyen bir SQL Server uç noktasına yapılan her başarılı bağlantıdan IP adreslerini önbelleğe alır. Bağlantı girişimi sırasında BIR DNS çözümleme hatası oluşursa, sürücü varsa o sunucu için önbelleğe alınmış bir IP adresi kullanarak bağlantı kurmayı dener.

EventSource izleme işlemi

Bu sürüm, uygulamalarda hata ayıklamaya yönelik olay izleme günlüklerini yakalama desteği sunar. Bu olayları yakalamak için istemci uygulamalarının SqlClient'ın EventSource uygulamasındaki olayları dinlemesi gerekir:

Microsoft.Data.SqlClient.EventSource

Daha fazla bilgi için bkz. SqlClient 'de olay izlemeyi etkinleştirme.

Windows'da yönetilen ağı etkinleştirme

"Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" yeni bir AppContext anahtarı, test ve hata ayıklama amacıyla Windows üzerinde yönetilen SNI uygulamasının kullanılmasını sağlar. Bu anahtar, windows üzerinde .NET Core 2.1+ ve .NET Standard 2.0+ projelerinde yönetilen SNI kullanmak için sürücünün davranışını değiştirir ve Microsoft.Data.SqlClient kitaplığı için yerel kitaplıklardaki tüm bağımlılıkları ortadan kaldırır.

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);

Sürücüdeki kullanılabilir anahtarların tam listesi için bkz. SqlClient'da AppContext anahtarları.

Ondalık kesme davranışını etkinleştirme

Sürücü, SQL Server tarafından yapıldığı gibi ondalık veri ölçeğini varsayılan olarak yuvarlar. Geriye dönük uyumluluk için "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" AppContext anahtarını true olarak ayarlayabilirsiniz.

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal", true);

Yeni bağlantı dizesi özelliği eş anlamlıları

Birden fazla sözcük içeren özelliklerle ilgili aralık karışıklığını önlemek için aşağıdaki mevcut bağlantı dizesi özellikleri için yeni eş anlamlılar eklenmiştir. Eski özellik adları geriye dönük uyumluluk için desteklenmeye devam eder. Ancak SqlConnectionStringBuilder'dan bağlantı dizesini çağırırken yeni bağlantı dizesi özellikleri eklenmiştir.

Mevcut bağlantı dizesi özelliği Yeni eş anlamlı
Uygulama Niyeti Uygulama Amacı
ConnectRetryCount Bağlantı Yeniden Deneme Sayısı
Bağlantı Yeniden Deneme Aralığı Yeniden Bağlanma Deneme Aralığı
Havuz Engelleme Süresi Havuz Kısıtlama Dönemi
ÇokluAktifSonuçKümeleri Birden Çok Etkin Sonuç Kümesi
MultiSubnetFailover Alt Ağlarda Çoklu Yük Devretme
Şeffaf Ağ IP Çözümlemesi Saydam Ağ IP Çözümlemesi
TrustServerCertificate Sunucu Sertifikasına Güven

SqlBulkCopy RowsCopied özelliği

RowsCopied özelliği, devam eden toplu kopyalama işleminde işlenen satır sayısına salt okunur erişim sağlar. Bu değer, hedef tabloya eklenen son satır sayısına eşit olmayabilir.

Bağlantı açma devre dışı bırakmaları

SqlConnection.Open() varsayılan davranışı, geçici hatalardan kaynaklanan on saniyelik gecikmeyi ve otomatik bağlantı yeniden denemelerini devre dışı bırakmak için geçersiz kılınabilir.

using(SqlConnection sqlConnection = new SqlConnection("Data Source=(local);Integrated Security=true;Initial Catalog=AdventureWorks;"))
{
    sqlConnection.Open(SqlConnectionOverrides.OpenWithoutRetry);
}

Not

Bu geçersiz kılma, Microsoft.Data.SqlClient v6.0.0 sürümünden itibaren SqlConnection.OpenAsync() üzerinde uygulanabilir.

Active Directory Etkileşimli modu için kullanıcı adı desteği

Hem .NET Framework hem de .NET Core için Microsoft Entra Interactive kimlik doğrulama modu kullanılırken bağlantı dizesinde bir kullanıcı adı belirtilebilir

Kullanıcı Kimliği veya UID bağlantı dizesi özelliğini kullanarak bir kullanıcı adı ayarlayın:

"Server=<server name>; Database=<db name>; Authentication=Active Directory Interactive; User Id=<username>;Encrypt=True;"

SqlBulkCopy için sipariş ipuçları

Kümelenmiş dizinlere sahip tablolarda toplu kopyalama işlemlerinin performansını artırmak için sipariş ipuçları sağlanabilir. Daha fazla bilgi için toplu kopyalama işlemleri bölümüne bakın.

SNI bağımlılık değişiklikleri

Artık Windows üzerinde Microsoft.Data.SqlClient (.NET Core ve .NET Standard), önceden bağımlı olduğu runtime.native.System.Data.SqlClient.SNIyerine, Microsoft.Data.SqlClient.SNI.runtimebağımlıdır. Yeni bağımlılık, ARM platformu için desteğin yanı sıra Windows'da zaten desteklenen Arm64, x64 ve x86 platformlarını da ekler.

2.0 Hedef platform desteği

  • .NET Framework 4.6+ (Windows x86, Windows x64)
  • .NET Core 2.1+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)

Microsoft.Data.SqlClient 1.1.0 sürüm notları

Bağımlılıklar da dahil olmak üzere tam sürüm notları, GitHub Deposu'nda bulunmaktadır: 1.1 Sürüm Notları.

1.1 sürümündeki yeni özellikler

Always Encrypted ile güvenli enklavlar

Always Encrypted, Microsoft SQL Server 2016'dan itibaren kullanılabilir. Güvenli kuşatmalar Microsoft SQL Server 2019'dan itibaren kullanılabilir. Kapanım özelliğini kullanmak için bağlantı dizeleri gerekli kanıtlama protokollerini ve kanıtlama URL'sini içermelidir. Örneğin:

"Attestation Protocol=HGS;Enclave Attestation Url=<attestation_url_for_HGS>"

Daha fazla bilgi için bkz:

1.1 Hedef platform desteği

  • .NET Framework 4.6+ (Windows x86, Windows x64)
  • .NET Core 2.1+ (Windows x86, Windows x64, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Linux, macOS)

Microsoft.Data.SqlClient 1.0 sürüm notları

Microsoft.Data.SqlClient ad alanının ilk sürümü, mevcut System.Data.SqlClient ad alanı üzerinde daha fazla işlevsellik sunar.

GitHub Deposu'nda bulunan bağımlılıklar dahil tam sürüm notları: 1.0 Sürüm Notları.

1.0 sürümündeki yeni özellikler

.NET Framework 4.7.2 System.Data.SqlClient üzerinden yeni özellikler

  • Veri Sınıflandırma - Azure SQL Veritabanı ve Microsoft SQL Server 2019'da kullanılabilir.

  • UTF-8 desteği - Microsoft SQL Server 2019'da kullanılabilir.

.NET Core 2.2 System.Data.SqlClient üzerinden yeni özellikler

  • Veri Sınıflandırma - Azure SQL Veritabanı ve Microsoft SQL Server 2019'da kullanılabilir.

  • UTF-8 desteği - Microsoft SQL Server 2019'da kullanılabilir.

  • Kimlik Doğrulaması - Active Directory Parola kimlik doğrulama yöntemi.

Veri Sınıflandırma

Veri Sınıflandırma, temel alınan kaynak bu özelliği desteklediğinde ve veri duyarlılığı ve sınıflandırmahakkında meta veriler içerdiğinde, SqlDataReader aracılığıyla alınan nesneler hakkında salt okunur Veri Duyarlılığı ve Sınıflandırma bilgilerini kullanıma sunan yeni bir API'ler kümesi getirir. SqlClient Veri Bulma ve Sınıflandırma bölümündeki örnek uygulamaya bakın.

public class SqlDataReader
{
    public Microsoft.Data.SqlClient.DataClassification.SensitivityClassification SensitivityClassification
}

namespace Microsoft.Data.SqlClient.DataClassification
{
    public class ColumnSensitivity
    {
        public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.SensitivityProperty> SensitivityProperties
    }
    public class InformationType
    {
        public string Id
        public string Name
    }
    public class Label
    {
        public string Id
        public string Name
    }
    public class SensitivityClassification
    {
        public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.ColumnSensitivity> ColumnSensitivities
        public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.InformationType> InformationTypes
        public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.Label> Labels
    }
    public class SensitivityProperty
    {
        public Microsoft.Data.SqlClient.DataClassification.InformationType InformationType
        public Microsoft.Data.SqlClient.DataClassification.Label Label
    }
}

UTF-8 desteği

UTF-8 desteği herhangi bir uygulama kodu değişikliği gerektirmez. Bu SqlClient değişiklikleri, sunucu UTF-8'i desteklediğinde ve temel sütun harmanlaması UTF-8 olduğunda istemci-sunucu iletişimini iyileştirir. SQL Server 2019'daki yenilikleraltındaki UTF-8 bölümüne bakın.

Always Encrypted ile güvenli enklavlar

Genel olarak, .NET Framework ve yerleşik sütun ana anahtar deposu sağlayıcıları system.Data.SqlClient kullanan mevcut belgeler artık .NET Core ile de çalışmalıdır.

Kimlik doğrulama

Kimlik Doğrulaması bağlantı dizesi seçeneği kullanılarak farklı kimlik doğrulama modları belirtilebilir. Daha fazla bilgi için SqlAuthenticationMethod belgelerine bakın.

Azure Key Vault sağlayıcısı gibi özel anahtar deposu sağlayıcılarının Microsoft.Data.SqlClient'ı destekleyecek şekilde güncelleştirilmiş olması gerekir. Benzer şekilde, kapanım sağlayıcılarının da Microsoft.Data.SqlClient'ı destekleyecek şekilde güncelleştirilmiş olması gerekir.

Always Encrypted yalnızca .NET Framework ve .NET Core hedeflerinde desteklenir. .NET Standard'da belirli şifreleme bağımlılıkları eksik olduğundan .NET Standard'da desteklenmez.

1.0 Hedef platform desteği

  • .NET Framework 4.6+ (Windows x86, Windows x64)
  • .NET Core 2.1+ (Windows x86, Windows x64, Linux, macOS)
  • .NET Standard 2.0+ (Windows x86, Windows x64, Linux, macOS)