Skip to content

Stable Release v6.1.0

Latest
Compare
Choose a tag to compare
@paulmedynski paulmedynski released this 25 Jul 21:55
· 34 commits to main since this release
1af7327

Release Notes

Stable Release 6.1.0 - 2025-07-25

This update brings the following changes since the
6.0.2 stable 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.

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.

Other Additions

  • 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)
  • 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)
  • Fixed missing socket error codes on non-Windows platforms.
    (#3475)
  • Fixed primary/secondary server SPN handling during SSPI negotiation.
    (#3478)
  • Fixed AzureKeyVaultProvider package key caching to serialize Azure key fetch
    operations.
    (#3477)
  • Fixed a rare error related to multi-packet async text reads.
    (#3474)
  • Fixed some spelling errors in the API docs.
    (#3500)
  • Fixed a rare multi-packet string corruption bug.
    (#3513)

Changed

SqlDecimal type workarounds conversions

What Changed:

  • Changed how SqlDecimal type workarounds perform conversions to meet
    compliance policies.
    (#3467)

Who Benefits:

  • Microsoft products must not use undocumented APIs on other Microsoft products.
    This change removes calls to undocumented APIs and replaces them with
    compliant API use.

Impact:

  • These changes impose an observed 5% decrease in performance on .NET Framework.

SqlVector API improvements (since 6.1.0-preview2)

What Changed:

  • Several changes were made to the SqlVector API published in the
    6.1.0-preview2 release
    (#3472):
    • The SqlVector class was changed to a readonly struct.
    • The null value constructor was changed to a static CreateNull() method.
    • The Size property was removed.

Who Benefits:

  • SqlVector instances gain the efficiencies of struct handling.

Impact:

  • Early-adopter applications may require updates if they rely on the old APIs
    and any class-specific behaviour.

Other Changes

  • Reduced allocations when opening a connection.
    (#3364)
  • Various performance improvements related to TDS parsing.
    (#3337,
    #3377,
    #3422)
  • Improved native AOT support.
    (#3364,
    #3369,
    #3401)
  • Progress towards SSPI extensibility.
    (#2454)
  • Progress towards connection pooling improvements.
    (#3352,
    #3396)
  • Expanded/clarified SqlConnection's
    AccessToken and
    AccessTokenCallback
    documentation.
    (#3339)
  • Fixed some poorly formatted tables in the API docs.
    (#3391)
  • Optimized binary size for AOT.
    (#3091)
  • Refined bulk copy operations to handle unmatched column names more effectively.
    (#3205)
  • Enhanced SqlBulkCopy to explicitly identify mismatched column names.
    (#3183)
  • Optimized outgoing SSPI blob handling using IBufferWriter<byte>.
    (#2452)
  • Replaced byte[] with string for SNI to improve efficiency.
    (#2790)
  • Code cleanup to remove SQL 2000 support.
    (#2839,
    #3206,
    #3217)
  • Connection pool design refactor for a modular connection pool design.
    (#3199)
  • Added dependency on System.Text.Json
    8.0.5 (.NET 8.0) and
    9.0.5 (.NET Standard 2.0, .NET 9.0)
    to avoid transitive vulnerabilities (CVE-2024-43485).
    (#3403)
  • Updated various dependencies #3229, primarily:
    • System.Text.Encodings.Web to v8.0.0
    • System.Text.Json to v8.0.5
    • Azure.Identity to v1.13.2
    • Microsoft.Identity.Model.Json.Web.Tokens to v7.7.1
    • Microsoft.Identity.Model.Protocols.OpenIdConnect to v7.7.1
  • Code merge towards a unified SqlClient project, aligning .NET Framework and .NET Core implementations.
    (Many PRs - see 6.1.0-preview1 and 6.1.0-preview2 for details.)
  • Test improvements include a new unit test project, updates to test
    dependencies, removal of hardcoded credentials, and improved robustness.
    (Many PRs - see 6.1.0-preview1 and 6.1.0-preview2 for details.)

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.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