Skip to content

Releases: dotnet/SqlClient

Preview Release 6.1.0-preview2

27 Jun 23:15
df35633
Compare
Choose a tag to compare
Pre-release

Preview Release 6.1.0-preview2.25178.5 - 2025-06-27

This update brings the following changes since the 6.1.0-preview1 release:

Added

Added dedicated SQL Server vector datatype support

What Changed:

  • Optimized vector communications between MDS and SQL Server 2025, employing a custom binary format over the TDS protocol. (#3433, #3443)
  • Reduced processing load compared to existing JSON-based vector support.
  • Initial support for 32-bit single-precision floating point vectors.

Who Benefits:

  • Applications moving large vector data sets will see beneficial improvements to processing times and memory requirements.
  • Vector-specific APIs are ready to support future numeric representations with a consistent look-and-feel.

Impact:

  • Reduced transmission and processing times for vector operations versus JSON using SQL Server 2025 preview:
    • Reads: 50x improvement
    • Writes: 3.3x improvement
    • Bulk Copy: 19x improvement
    • (Observed with vector column of max 1998 size, and 10,000 records for each operation.)
  • Improved memory footprint due to the elimination of JSON serialization/deserialization and string representation bloat.
  • For backwards compatibility with earlier SQL Server Vector implementations, applications may continue to use JSON strings to send/receive vector data, although they will not see any of the performance improvements noted above.

Revived .NET Standard 2.0 target support

What Changed:

  • Support for targeting .NET Standard 2.0 has returned. (#3381)
  • Support had previously been removed in the 6.0 release, with the [community voicing concerns] (#3115).

Who Benefits:

  • Libraries that depend on MDS may seamlessly target any of the following frameworks:
    • .NET Standard 2.0
    • .NET Framework 4.6.2 and above
    • .NET 8.0
    • .NET 9.0
  • Applications should continue to target runtimes.
    • The MDS .NET Standard 2.0 target framework support does not include an actual implementation, and cannot be used with a runtime.
    • An application's build/publish process should always pick the appropriate MDS .NET/.NET Framework runtime implementation.
    • Custom build/publish actions that incorrectly try to deploy the MDS .NET Standard 2.0 reference DLL at runtime are not supported.

Impact:

  • Libraries targeting .NET Standard 2.0 will no longer receive warnings like this:
    • 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.

Fixed

  • Fixed missing <NeutralLanguage> property. (#3325)
  • Fixed injection of UTF-8 BOM during bulk copy. (#3399)
  • Fixed SqlCachedBuffer async read edge case. (#3329)
  • Fixed SqlSequentialTextReader edge case with single-byte reads. (#3383)
  • Fixed an incorrect error message when parsing connection string PoolBlockingPeriod. (#3411)
  • Added missing ToString() override to SqlJson. (#3427)

Changed

Contributors

We thank the following public contributors. Their efforts toward this project
are very much appreciated.

New Contributors

Target Platform Support

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

Dependencies

.NET Standard 2.0

  • Azure.Identity 1.13.2
  • Microsoft.Bcl.Cryptography 9.0.4
  • Microsoft.Data.SqlClient.SNI.runtime 6.0.2
  • Microsoft.Extensions.Caching.Memory 9.0.4
  • Microsoft.IdentityModel.JsonWebTokens 7.7.1
  • Microsoft.IdentityModel.Protocols.OpenIdConnect 7.7.1
  • Microsoft.SqlServer.Server 1.0.0
  • System.Configuration.ConfigurationManager 9.0.4
  • System.Security.Cryptography.Pkcs 9.0.4
  • System.Text.Json 9.0.5

.NET Framework 4.6.2+

  • Azure.Identity 1.13.2
  • Microsoft.Bcl.Cryptography 8.0.0
  • Microsoft.Data.SqlClient.SNI 6.0.2
  • Microsoft.Extensions.Caching.Memory 8.0.1
  • Microsoft.IdentityModel.JsonWebTokens 7.7.1
  • Microsoft.IdentityModel.Protocols.OpenIdConnect 7.7.1
  • System.Buffers 4.5.1
  • System.Data.Common 4.3.0
  • System.Security.Cryptography.Pkcs 8.0.1
  • System.Text.Encodings.Web 8.0.0
  • System.Text.Json 8.0.5

.NET 8.0

  • Azure.Identity 1.13.2
  • Microsoft.Bcl.Cryptography 8.0.0
  • Microsoft.Data.SqlClient.SNI.runtime 6.0.2
  • Microsoft.Extensions.Caching.Memory 8.0.1
  • Microsoft.IdentityModel.JsonWebTokens 7.7.1
  • Microsoft.IdentityModel.Protocols.OpenIdConnect 7.7.1
  • Microsoft.SqlServer.Server 1.0.0
  • System.Configuration.ConfigurationManager 8.0.1
  • System.Security.Cryptography.Pkcs 8.0.1
  • System.Text.Json 8.0.5

.NET 9.0

  • Azure.Identity 1.13.2
  • Microsoft.Bcl.Cryptography 9.0.4
  • Microsoft.Data.SqlClient.SNI.runtime 6.0.2
  • Microsoft.Extensions.Caching.Memory 9.0.4
  • Microsoft.IdentityModel.JsonWebTokens 7.7.1
  • Microsoft.IdentityModel.Protocols.OpenIdCon...
Read more

Preview Release v6.1.0-preview1

30 Apr 23:07
08622e7
Compare
Choose a tag to compare
Pre-release

This update brings the following changes over the previous release:

Added

  • Added packet multiplexing support to improve large data read performance. #2714 #3161 #3202
  • Added support for special casing with Fabric endpoints. #3084

Fixed

  • Fixed distributed transactions to be preserved during pooled connection resets. #3019.
  • Fixed application crash when the Data Source parameter begins with a comma. #3250.
  • Resolved synonym count discrepancies in debug mode. #3098.
  • Addressed warnings for down-level SSL/TLS versions. #3126.

Changed

New Contributors

Stable release v5.2.3

29 Apr 19:38
1c0b2f6
Compare
Choose a tag to compare

This update brings the following changes since the 5.2.2 release:

Fixed

  • Fixed possible NullPointerException during socket receive (PR #3284)
  • Fixed inconsistencies between source and reference projects (PR #3124)
  • Adjusted retry logic to allow errors with negative numbers to be considered transient (PR #3185)

Changed

Stable Release v5.1.7

25 Apr 22:10
0697f41
Compare
Choose a tag to compare

This update brings the following changes since the 5.1.6 release:

Fixed

  • Fixed possible NullPointerException during socket receive (PR #3285)
  • Fixed inconsistencies between source and reference projects (PR #3180)

Changed

Stable Release v6.0.2

25 Apr 21:54
b16dec0
Compare
Choose a tag to compare

This update brings the below changes over the previous release:

Fixed

  • Fixed possible NullPointerException during socket receive #3283
  • Fixed reference assembly definitions for SqlJson APIs #3169
  • Fixed an error reading the output parameter of type JSON while executing stored procedure #3173

Changed

Stable Release v6.0.1

29 Jan 21:17
cfb007d
Compare
Choose a tag to compare

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 TokenCredential object to take advantage of token caching in ActiveDirectoryAuthenticationProvider. #2380
  • Added support for using DateOnly and TimeOnly in DataTable and SqlDataRecord structured 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.Connect timeout issue caused by thread starvation. #2777
  • Fixed pending data with SqlDataReader against an encrypted column. #2618
  • Fixed Entra authentication when using infinite connection timeout in ActiveDirectoryAuthenticationProvider. #2651
  • Fixed GetSchema by excluding unsupported engines due to lack of support for ASSEMBLYPROPERTY function. #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 SqlConnection to include AccessTokenCallback. #2525
  • Fixed issue with DateTimeOffset in table-valued parameters, which was introduced in 5.2. #2453
  • Fixed ArgumentNullException on SqlDataRecord.GetValue when using user-defined data type on .NET. #2448
  • Fixed SqlBuffer and SqlGuid when it's null. #2310
  • Fixed SqlBulkCopy.WriteToServer state in a consecutive calls. #2375
  • Fixed null reference exception with SqlConnection.FireInfoMessageEventOnUserErrors after introducing the batch command. #2399
  • Fixed scale serialization when explicitly set to 0 #2411
  • Fixed issue blocking GetSchema commands 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 OutOfMemory exceptions #2797
  • Increased routing attempts to 10 in netcore for LoginNoFailover and added routing support to LoginWithFailover to 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 UseMinimumLoginTimeout context switch to 'true' #2419
  • Added missing DynamicallyAccessedMembers attributes in .NET Runtime reference assemblies. #2946
  • Synchronized dependencies of reference assemblies with runtime assemblies #2878
  • Fixed lazy initialization of the _SqlMetaData hidden 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.0 to address SYSLIB0057#2946
    • Added dependency on System.Text.Json 8.0.5 for .NET 8+ and 6.0.10 for other versions #2921
    • Removed dependency on Microsoft.Extensions.Caching.Memory and System.Security.Cryptography.Cng, which were unnecessary after removing .NET Standard. #2577
    • Removed dependency on System.Text.Json from .NET 8+ #2930
      ...
Read more

Preview Release 6.0.0-preview3.24332.3

28 Nov 01:20
c0bc846
Compare
Choose a tag to compare
Pre-release

Breaking Changes

  • Dropped support for .NET 6 #2927
  • Removed SQL 2000 client-side debugging support for .NET Framework #2981, #2940

Added

  • Enabled NuGet package auditing via NuGet.org audit source #3024
  • Added support for .NET 9 #2946
  • Added dependency on System.Security.Cryptography.Pkcs:9.0.0 to address SYSLIB0057#2946
  • Added dependency on Microsoft.Bcl.Cryptography:9.0.0 #2946
  • Added missing SqlCommand_BeginExecuteReader code sample #3009
  • Added support for SqlConnectionOverrides in OpenAsync() API #2433
  • Added localization in Czech, Polish, and Turkish #2987

Fixed

  • Reverted default value of UseMinimumLoginTimeout context switch to 'true' #2419
  • Added missing DynamicallyAccessedMembers attributes in .NET Runtime reference assemblies. #2946
  • Synchronized dependencies of Reference Assemblies with Runtime assemblies #2878
  • Fixed lazy initialization of the _SqlMetaData hidden column map for .NET Framework #2964

Changed

  • Updated Microsoft.Extensions.Caching.Memory to 9.0.0 for all frameworks #2946
  • Updated System.Configuration.ConfigurationManager to 9.0.0 #2946
  • Updated docs to use absolute links #2949
  • Removed System.Text.Json dependency from .NET 8 #2930

Contributors

Thanks to the following public contributors. Their efforts toward this project are very much appreciated.

For detailed release notes, refer to 6.0.0-preview3.md

Preview Release v6.0.0-preview2.24304.8

30 Oct 20:17
Compare
Choose a tag to compare
Pre-release

Added

Fixed

  • Fixed scale serialization when explicitly set to 0 #2411
  • Fixed issue blocking GetSchema commands 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 OutOfMemory exceptions #2797
  • Increased routing attempts to 10 in netcore for LoginNoFailover and added routing support to LoginWithFailover to 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

Changed

New Contributors

For detailed release notes, refer to 6.0.0-preview2.md

Preview Release v6.0.0-preview1.24240.8

28 Aug 17:51
9573da2
Compare
Choose a tag to compare
Pre-release

[Preview Release 6.0.0-preview1.24240.8] - 2024-08-27

This update brings the below changes over the 5.2 release:

Breaking Changes

  • Removed support for .NET Standard. #2386
  • Removed UWP (uap) references. #2483

Added

  • Added TokenCredential object to take advantage of token caching in ActiveDirectoryAuthenticationProvider. #2380
  • Added DateOnly and TimeOnly support to DataTable as a structured parameter. #2258
  • Added Microsoft.Data.SqlClient.Diagnostics.SqlClientDiagnostic type in .NET. #2226
  • Added scope trace for GenerateSspiClientContext. #2497, #2725

Fixed

  • Fixed Socket.Connect timeout issue caused by thread starvation. #2777
  • Fixed pending data with SqlDataReader against an encrypted column. #2618
  • Fixed Entra authentication when using infinite connection timeout in ActiveDirectoryAuthenticationProvider. #2651
  • Fixed GetSchema by excluding unsupported engines due to lack of support for ASSEMBLYPROPERTY function. #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 SqlConnection to include AccessTokenCallback. #2525
  • Fixed issue with DateTimeOffset in table-valued parameters, which was introduced in 5.2. #2453
  • Fixed ArgumentNullException on SqlDataRecord.GetValue when using user-defined data type on .NET. #2448
  • Fixed SqlBuffer and SqlGuild when it's null. #2310
  • Fixed SqlBulkCopy.WriteToServer state in a consecutive calls. #2375
  • Fixed null reference exception with SqlConnection.FireInfoMessageEventOnUserErrors after introducing the batch command. #2399

Changed

  • Updated Microsoft.Data.SqlClient.SNI version to 6.0.0-preview1.24226.4. #2772
  • Improved access to SqlAuthenticationProviderManager.Instance and avoid early object initiation. #2636
  • Removed undocumented properties of Azure.Identity in ActiveDirectoryAuthenticationProvider. #2562
  • Replaced System.Runtime.Caching with Microsoft.Extensions.Caching.Memory. #2493
  • Updated EnableOptimizedParameterBinding to only accept text mode commands. #2417
  • Updated Azure.Identity version from 1.10.3 to 1.11.4. #2577
  • Updated Azure.Core version from 1.35.0 to 1.38.0. #2462
  • Updated Azure.Security.KeyVault.Keys version from 4.4.0 to 4.5.0. #2462
  • Updated Microsoft.IdentityModel.JsonWebTokens and Microsoft.IdentityModel.Protocols.OpenIdConnect from 6.35.0 to 7.5.0. #2429
  • Removed direct dependency to Microsoft.Identity.Client to take the transient dependecy through Azure.Identity. #2577
  • Removed unnecessary references Microsoft.Extensions.Caching.Memory and System.Security.Cryptography.Cng after removing .NET Standard. #2577
  • Improved memory allocation when reader opened by CommandBehavior.SequentialAccess over 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
  • Code health improvements: #2366, #2369, #2381, #2390, #2392, #2403, #2410, #2413, #2425, #2428, #2440, #2443, #2450, #2466, #2486, #2521, #2522, #2533, #2552, #2560, #2726, #2751, #2811

For detailed release notes, refer to 6.0.0-preview1.md

Stable release v5.1.6

28 Aug 16:37
cec5dd8
Compare
Choose a tag to compare

[Stable release 5.1.6] - 2024-08-27

Fixed

  • Fixed Transient fault handling issue with OpenAsync. #1983 #2508
  • Fixed AcquireTokenAsync timeout handling for edge cases in ActiveDirectoryAuthenticationProvider. #2706
  • Fixed pending data with SqlDataReader against an encrypted column. #2618 #2818

Changed