Stable Release v6.0.1
Released to NuGet.org on 2025-01-23
Breaking Changes
- Removed support for .NET Standard. #2386
- Removed support for .NET 6 #2927
- Removed UWP (UAP) references. #2483
- Removed SQL 2000 client-side debugging support for .NET Framework #2981, #2940
Added
JSON Support
JSON data type support is now available in Microsoft.Data.SqlClient v6.0. This release introduces SqlJson type available as an extension to System.Data.SqlDbTypes:
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 ; }
}
}The JSON data type supports reading, writing, streaming, and performing bulk copy operations.
Introducing SqlClientDiagnostics
SqlClientDiagnostic is now available as a strongly-typed collection of key-value pairs that can be captured by consuming applications.
// Class that provides strongly-typed collection of key-value pairs for SqlClient diagnostic objects.
public abstract class SqlClientDiagnostic : System.Collections.Generic.IReadOnlyList<System.Collections.Generic.KeyValuePair<string, object>>
{
// A guid value used to correlate before, after and error events.
public System.Guid OperationId;
// The name of the operation.
public string Operation;
// The timestamp of the event.
public long Timestamp;
// The number of elements in the collection.
public int Count;
// The element at the specified index in the read-only list.
public System.Collections.Generic.KeyValuePair<string, object> this[int index];
// An enumerator that can be used to iterate through the collection.
public System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<string, object>> GetEnumerator();
}Added Support for Connection Overrides in OpenAsync() API
The default behavior of SqlConnection.OpenAsync() can be overridden to disable the ten-second delay and automatic connection retries triggered by transient errors.
using(SqlConnection sqlConnection = new SqlConnection("Data Source=(local);Integrated Security=true;Initial Catalog=AdventureWorks;"))
{
await sqlConnection.OpenAsync(SqlConnectionOverrides.OpenWithoutRetry, cancellationToken);
}Other Additions
- Added support for .NET 9 #2946
- Added localization in Czech, Polish, and Turkish #2987
- Added
TokenCredentialobject to take advantage of token caching inActiveDirectoryAuthenticationProvider. #2380 - Added support for using
DateOnlyandTimeOnlyinDataTableandSqlDataRecordstructured parameters. #2258 - Added scope trace for
GenerateSspiClientContext. #2497, #2725 - Added readme to NuGet package #2826
- Enabled NuGet package auditing via NuGet.org audit source #3024
- Added missing SqlCommand_BeginExecuteReader code sample #3009
Fixed
- Fixed
Socket.Connecttimeout issue caused by thread starvation. #2777 - Fixed pending data with
SqlDataReaderagainst an encrypted column. #2618 - Fixed Entra authentication when using infinite connection timeout in
ActiveDirectoryAuthenticationProvider. #2651 - Fixed
GetSchemaby excluding unsupported engines due to lack of support forASSEMBLYPROPERTYfunction. #2593 - Fixed SSPI retry negotiation with default port in .NET. #2559
- Fixed assembly path in .NET 8.0 and
.AssemblyAttributes. #2550 - Fixed certificate chain validation. #2487
- Fixed clone of
SqlConnectionto includeAccessTokenCallback. #2525 - Fixed issue with
DateTimeOffsetin table-valued parameters, which was introduced in 5.2. #2453 - Fixed
ArgumentNullExceptiononSqlDataRecord.GetValuewhen using user-defined data type on .NET. #2448 - Fixed
SqlBufferandSqlGuidwhen it's null. #2310 - Fixed
SqlBulkCopy.WriteToServerstate in a consecutive calls. #2375 - Fixed null reference exception with
SqlConnection.FireInfoMessageEventOnUserErrorsafter introducing the batch command. #2399 - Fixed scale serialization when explicitly set to 0 #2411
- Fixed issue blocking
GetSchemacommands from being enrolled into the current transaction #2876 - Adjusted retry logic to allow errors with negative numbers to be considered transient #2896
- Fixed string formatting in
OutOfMemoryexceptions #2797 - Increased routing attempts to 10 in netcore for
LoginNoFailoverand added routing support toLoginWithFailoverto standardize routing behavior between netcore and netfx #2873 - Restructured documentation into XML format so that it displays correctly in Visual Studio #2836, #2822, #2834, #2851, #2863, #2864, #2865, #2869, #2871, #2837, #2821
- Fixed cleanup behavior when column decryption fails. Prevents leaving stale data on the wire for pooled connections #2843, #2825
- Reverted default value of
UseMinimumLoginTimeoutcontext switch to 'true' #2419 - Added missing
DynamicallyAccessedMembersattributes in .NET Runtime reference assemblies. #2946 - Synchronized dependencies of reference assemblies with runtime assemblies #2878
- Fixed lazy initialization of the
_SqlMetaDatahidden column map for .NET Framework #2964 - Fixed reference assembly definitions for SqlClientDiagnostic APIs #3097
- Fixed issue with down-level SSL/TLS version warnings #3126
Changed
- Dependency changes
- Added dependency on
Microsoft.Bcl.Cryptography:9.0.0#2946 - Added dependency on
System.Security.Cryptography.Pkcs:9.0.0to address SYSLIB0057#2946 - Added dependency on
System.Text.Json8.0.5for .NET 8+ and6.0.10for other versions #2921 - Removed dependency on
Microsoft.Extensions.Caching.MemoryandSystem.Security.Cryptography.Cng, which were unnecessary after removing .NET Standard. #2577 - Removed dependency on
System.Text.Jsonfrom .NET 8+ #2930 - Removed direct dependency to
Microsoft.Identity.Clientto take the transient dependecy throughAzure.Identity. #2577 - Replaced
System.Runtime.CachingwithMicrosoft.Extensions.Caching.Memory. #2493 - Updated
Azure.Coreversion from1.35.0to1.38.0. #2462 - Updated
Azure.Identityversion from1.10.3to1.11.4. #2577 - Updated
Azure.Security.KeyVault.Keysversion from4.4.0to4.5.0. #2462 - Updated SNI dependency
Microsoft.Data.SqlClient.SNIandMicrosoft.Data.SqlClient.SNI.runtimeto6.0.2#3116 #3117 - Updated
Microsoft.IdentityModel.JsonWebTokensandMicrosoft.IdentityModel.Protocols.OpenIdConnectfrom6.35.0to7.5.0. #2429 - Updated
Microsoft.Extensions.Caching.Memoryfrom8.0.0to9.0.0#2921 - Updated
System.Configuration.ConfigurationManagerfrom8.0.0to9.0.10for .NET 8 #2921
- Added dependency on
- Improved access to
SqlAuthenticationProviderManager.Instanceand avoid early object initiation. #2636 - Removed undocumented properties of
Azure.IdentityinActiveDirectoryAuthenticationProvider. #2562 - Updated
EnableOptimizedParameterBindingto only accept text mode commands. #2417 - Improved memory allocation when reader opened by
CommandBehavior.SequentialAccessover the big string columns. #2356 - Improved SSPI by consolidating the context generation to single abstraction and using memory/span for SSPI generation. #2255, #2447
- Reverted the #2281 code changes on ManagedSNI. #2395
- Updated assembly version to 6.0.0.0. #2382, since Preview 1
- Updated docs to use absolute links #2949, since Preview 3
- Code health improvements: #2366, #2369, #2376, #2381, #2390, #2392, #2403, #2410, #2413, #2425, #2428, #2440, #2442, #2443, #2450, #2466, #2486, #2521, #2522, #2533, #2552, #2560, #2726, #2751, #2805, #2811, #2812, #2814, #2820, #2831, #2835, #2844, #2854, #2885, #2889, #2897, #2898, #2907, #2910, #2915, #2928, #2929, #2936, #2939