Preview Release v7.0.0-preview1
Pre-releaseChanges Since 6.1.0
This update brings the following changes since the 6.1.0 release:
Breaking Changes
- Removed
Constrained Execution Regionerror handling blocks and associatedSqlConnectioncleanup which may affect how potentially-broken connections are expunged from the pool. (#3535)
Bug Fixes
Added
SqlColumnEncryptionCertificateStoreProvidernow works on Windows, Linux, and macOS. (#3014)
Changed
-
Updated
SqlVector.Nullto return a nullableSqlVectorinstance in the reference API to match the implementation. (#3521) -
Performance improvements for all built-in
SqlColumnEncryptionKeyStoreProviderimplementations. (#3554) -
Various test improvements. (#3456, #2968, #3458, #3494, #3559, #3575)
-
Codebase merge project and related cleanup. (#3436, #3434, #3448, #3454, #3462, #3435, #3492, #3473, #3469, #3394, #3493, #3593)
-
Documentation improvements. (#3490)
-
Updated
Azure.Identitydependency to v1.14.2. (#3538)
Changes Since 6.0.2
This update brings the following changes since the 6.0.2 release. Changes already noted above are omitted:
Additions
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 Sourceparameter 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
SqlCachedBufferasync read edge case. (#3329) - Fixed
SqlSequentialTextReaderedge case with single-byte reads. (#3383) - Fixed an incorrect error message when parsing connection string
PoolBlockingPeriod. (#3411) - Added missing
ToString()override toSqlJson. (#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
Sizeproperty 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
SqlBulkCopyto explicitly identify mismatched column names. (#3183) - Optimized outgoing SSPI blob handling using
IBufferWriter<byte>. (#2452) - Replaced
byte[]withstringfor 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.Json8.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
- BradBarnich made their first contribution in #3325
- deusanyjunior made their first contribution in #3310
- emmanuel-ferdman made their first contribution in #3041
- frankbuckley made their first contribution in #3521
- JNjenga made their first contribution in #3183
- MaceWindu made their first contribution in #3134
- Midhunnnk made their first contribution in #3250