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 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:
- .NET Standard 2.0'ı hedefleme desteği döndürüldü (#3381)
- Destek daha önce 6.0 sürümünde kaldırılmıştı ve topluluk endişelerini dile getiren bir uygulamadır.
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.SqlClientDiagnostictürü eklendi. #2226 - yapılandırılmış parametre olarak
DateOnlyiçinTimeOnlyveDataTabledesteği eklendi. #2258 -
SqlConnectionOverridesAPIOpenAsync()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çinActiveDirectoryAuthenticationProvidernesnesi 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:
SqlClientCommandBeforeSqlClientCommandAfterSqlClientCommandErrorSqlClientConnectionOpenBeforeSqlClientConnectionOpenAfterSqlClientConnectionOpenErrorSqlClientConnectionCloseBeforeSqlClientConnectionCloseAfterSqlClientConnectionCloseErrorSqlClientTransactionCommitBeforeSqlClientTransactionCommitAfterSqlClientTransactionCommitErrorSqlClientTransactionRollbackBeforeSqlClientTransactionRollbackAfterSqlClientTransactionRollbackError
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 özellikSqlBulkCopyeklendi. #2004Daha fazla bilgi -
AccessTokenCallBackiçin yeni birSqlConnectionAPI'si eklendi. #1260Daha fazla bilgi - Windows üzerinde .NET'te şifreleme için
SuperSocketNetLibkayı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
-
DateOnlyveTimeOnlyiçinSqlParameterdeğeri veGetFieldValuedesteği eklendi. #1813 - .NET Core ve SNI Native için TLS 1.3 desteği eklendi. #1821
-
ServerCertificateveyaEncrypt=MandatoryiçinEncrypt=Strictayarı 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.Serverad 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
-
TDS8desteği eklendi. TDS 8'i kullanmak için kullanıcıların bağlantı dizesinde Encrypt=Strict belirtmesi gerekir. #1608Daha fazla bilgi - Bağlantıda Sunucu SPN'sini ve Yük Devretme Sunucusu SPN'sini belirtme desteği eklendi. #1607Daha fazla bilgi
- Windows üzerinde .NET Core hedeflenirken takma adlar için destek eklendi. #1588Daha fazla bilgi
- SqlDataSourceEnumerator eklendi. #1430Daha fazla bilgi
- Güvenli olmayan TLS uyarılarını engellemek için yeni bir AppContext anahtarı eklendi. #1457Daha fazla bilgi
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
-
Encryptbağlantı dizesi özelliği varsayılan olaraktrueolarak değiştirildi. #1210Daha fazla bilgi - Sürücü artık Active Directory kimlik doğrulama modları için
SqlException'nin yerineAggregateExceptionatıyor. #1213 - .NET Framework'ten eski
Asynchronous Processingbağlantı özelliği kaldırıldı. #1148 - Güvenlik anahtarı
Configurable Retry Logickaldı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 Integratedkimlik 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
- Desteklenen en düşük .NET Framework sürümü v4.6.1 sürümüne yükseltildi. .NET Framework v4.6.0 artık desteklenmiyor. #899
-
User Idbağlantı özelliği, artıkClient Id#1010 içinObject Idyerine gerektirmektedir. Daha fazla bilgi için. -
SqlDataReaderartık boşDBNullyerinebyte[]bir değer döndürür.AppContext#998Daha fazla bilgi edinin ayarıyla eski davranış etkinleştirilebilir.
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.ConnectionTimeoutBağı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:
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(); }SqlAuthenticationProviderConfigurationSectionveSqlClientAuthenticationProviderConfigurationSectionaltı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
SqlColumnEncryptionEnclaveProvideriçin erişim değiştiricisipublic'deninternalolarak değiştirilmiştir. -
SqlClientMetaDataCollectionNamessı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ıkDataTableyerine boş birnulldö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\x64vebin\x86klasörlerine indirilen SNI.dll dosyaları artıkMicrosoft.Data.SqlClient.SNI.x64.dllveMicrosoft.Data.SqlClient.SNI.x86.dllolarak adlandırılır vebindizinine 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:
- SQL Server için Microsoft .NET Veri Sağlayıcısı ile Always Encrypted kullanma
- Eğitici: Güvenli bölmelerle Always Encrypted'i kullanarak .NET uygulaması geliştirme
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.
- SQL Server için .NET Framework Veri Sağlayıcısı ile Always Encrypted Kullanma
- Always Encrypted : Hassas verileri koruma ve şifreleme anahtarlarını Windows sertifika deposunda depolama
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)