All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
- Added support for column encryption key caching when the server supports retrying queries that require enclave computations #1062
- Added support for configurable retry logic configuration file in .NET Standard #1090
- Updated
Microsoft.Data.SqlClient.SNI
(.NET Framework dependency) andMicrosoft.Data.SqlClient.SNI.runtime
(.NET Core/Standard dependency) version tov3.0.0
#1102 - Improved event counter display information #1091
- Modified column encryption key store provider registrations to give built-in system providers precedence over providers registered on connection and command instances. #1101
- Fixed wrong data blended with transactions in .NET Core by marking a connection as doomed if the transaction completes or aborts while there is an open result set #1051
- Fixed race condition issues between SinglePhaseCommit and TransactionEnded events #1049
- Added support for "Active Directory Default" authentication mode #1043
- Added support for connection-level and command-level registration of custom key store providers to enable multi-tenant applications to control key store access #1045 #1056 #1078
- Added IP address preference support for TCP connections #1015
- Fixed corrupted connection issue when an exception occurs during RPC execution with TVP types #1068
- Fixed race condition issues between SinglePhaseCommit and TransactionEnded events #1042
- Updated error messages for enclave exceptions to include a link to a troubleshooting guide. #994
- Changes to share common files between projects #1022 #1038 #1040 #1033 #1028 #1039
User Id
connection property now requiresClient Id
instead ofObject Id
for User-Assigned Managed Identity #1010SqlDataReader
now returns aDBNull
value instead of an emptybyte[]
. Legacy behavior can be enabled by settingAppContext
switch Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior #998
- Microsoft.Data.SqlClient now depends on Azure.Identity library to acquire a token for "Active Directory Managed Identity/MSI" and "Active Directory Service Principal" authentication modes. #1010
- Upgraded Native SNI dependency to v3.0.0-preview1 along with enhanced event tracing support #1006
- Fixed wrong data blended with transactions in .NET Core by marking a connection as doomed if the transaction completes or aborts while there is an open result set#1023
- Fixed derived parameters containing incorrect typename #1020
- Fixed server connection leak possibilities when an exception occurs in pooling layer #890
- Fixed IP connection resolving logic in .NET Core #1016 #1031
- Performance improvements in
SqlDateTime
toDateTime
internal conversion method #912 - Improved memory allocation by avoiding unnecessary context switching 1008
- Updated
Microsoft.Identity.Client
version from 4.21.1 to 4.22.0 #1036 - Various performance improvements #963 #996 #1004 #1012 #1017
- Event source tracing improvements #1018
- Changes to share common files between NetFx and NetCore source code #871 #887
- The minimum supported .NET Framework version has been increased to v4.6.1. .NET Framework v4.6.0 is no longer supported. #899
- Added support for Configurable Retry Logic #693 #966
- Added support for Event counters in .NET Core 3.1+ and .NET Standard 2.1+ #719
- Added support for Assembly Context Unloading in .NET Core #913
- Added missing
System.Runtime.Caching
dependency for .NET Standard assemblies #877
- Fixed wrong results issues by changing the timeout timer to ensure a correct execution state #906
- Fixed Kerberos authentication issues when configured Server Principal Name (SPN) didn't contain default port #930
- Fixed MARS header errors when
MakeReadAsyncBlocking
App Context switch is set tofalse
#910 #922 - Fixed unwanted exceptions being thrown from
SqlDataReader.Dispose
#920 - Fixed issues connecting to SQL Server instance with instance name specified from Unix environment #870
- Fixed TCP Keep Alive issues in .NET Core #854
- Fixed Kerberos Authentication issues caused due to regression #845
- Fixed issues with System-Assigned Managed Identity in Azure Functions #829
- Fixed missing error messages in Managed SNI #882
- Fixed event source trace string issue #940
- Changed App Context switch
MakeReadAsyncBlocking
default tofalse
#937 - Replaced usage of
BinaryFormatter
withDataContractSerializer
#869 - Prohibited
DtdProcessing
onXmlTextReader
instance in .NET Core #884 - Improved performance by reducing memory allocations in
SerializeEncodingChar
/WriteEncodingChar
and some options boxing #785 - Improved performance by preventing orphaned active packets being GC'ed without clear #888
- Various performance improvements #889 #900
- Partial event source tracing improvements in .NET Core #867 #897
- Changes to share common files between NetFx and NetCore source code #827 #835 #838 #881
- Fixed wrong results issues by changing the timeout timer to ensure a correct execution state #950
- Fixed MARS header contains errors issue against .NET Framework 4.8+ #959
- Fixed issue connecting with instance name from a Linux/macOS environment #874
- Fixed wrong results issues by changing the timeout timer to ensure a correct execution state #929
- Fixed a vulnerability by prohibiting
DtdProcessing
onXmlTextReader
instances in .NET Core #885 - Fixed Kerberos authentication when an SPN does not contain the port #935
- Fixed missing error messages in Managed SNI #883
- Fixed missing
System.Runtime.Caching
dependency for .NET Standard assemblies #878 - Fixed event source tracing issues #941
- Fixed MARS header contains errors issue against .NET Framework 4.8.1 #928
- Fixed issue with System-Assigned Managed Identity in Azure Functions #841
- Fixed issue with Kerberos Authentication for .NET Core in Unix environments #848
- Fixed issue with TCP Keep Alive for .NET Core in Unix environments #855
- Microsoft.Data.SqlClient symbols are now source-linked #789
- Added an API to clear cached access tokens from the token provider #800
- Added
SqlFacetAttribute
implementation #757
- Fixed
InvalidOperationException
andNotSupportedException
errors due toWriteAsync
collisions #796 - Fixed incorrect Settings.Async flag in
ExecuteXmlReaderAsync
#782 - Fixed a regression in Windows Integrated authentication when using managed networking #777
- Fixed Bulk Copy Async deadlock issues with custom
IDataReader
when usingSqlDataReader
internally #779 - Fixed a serialization issue with
SqlException
in .NET Core #780
- Updated versions of
Microsoft.IdentityModel
package dependencies #794
- Added support for Azure Active Directory Managed Identity authentication #730
- Added support to provide a user-defined application client ID when using Active Directory authentication #740
- Added the "Command Timeout" connection string property to set a default timeout for all commands executed with the connection #722
- Added support for Always Encrypted on all supported platforms for .NET Standard 2.0 #756
- Fixed unobserved exception issue when a timeout occurs before a faulted task completes with an exception #688 #773
- Fixed an issue where driver continues to prompt for credentials when using Azure Active Directory authentication #770
- Updated
Microsoft.Data.SqlClient.SNI
(.NET Framework dependency) andMicrosoft.Data.SqlClient.SNI.runtime
(.NET Core/Standard dependency) version tov2.1.1
and removed symbols fromMicrosoft.Data.SqlClient.SNI.runtime
, which are now published to Microsoft Symbols Server #764 - Updated
Microsoft.Identity.Client
dependency version tov4.21.1
#765 - Performance improvements when establishing an encrypted channel by removing sync over async method calls #541
- Performance improvements by replacing heap-allocated arrays with Spans #667
- Moved common files to shared folder between .NET Framework and .NET Core implementation #734 #753
- Added support for a new Configuration Section,
SqlClientAuthenticationProviders
(duplicate of existingSqlAuthenticationProviders
), to allow co-existence of configurations for both drivers, "System.Data.SqlClient" and "Microsoft.Data.SqlClient" #701
- Fixed pooled connection re-use on access token expiry issue when using Active Directory authentication modes #639
- Fixed transient fault handling for Pooled connections #638
- Fixed Enclave session cache issue with Azure Database #628
- Reverted changes to return empty DataTable from GetSchemaTable to return null as before. #697
- Fixed configuration section collision issue with System.Data.SqlClient type #701
- Fixed blank error message [HTTP Provider] issues due to unexpected pre-login failures when using Native SNI. Fixed with Microsoft.Data.SqlClient.SNI v2.0.1 and Microsoft.Data.SqlClient.SNI.runtime v2.0.1 release versions.
- Added support for Always Encrypted with secure enclaves on Unix for .NET Core 2.1+ and on all supported platforms for .NET Standard 2.1+ #676
- Added support for Azure Active Directory Device Code Flow authentication #597
- Added Sensitivity Rank support in Sensitivity Classification information #626
- Added support to obtain
ServerProcessId
(SPID) information on an activeSqlConnection
instance #660 - Added support for a new Configuration Section,
SqlClientAuthenticationProviders
(duplicate of existingSqlAuthenticationProviders
), to allow co-existence of configurations for both drivers, "System.Data.SqlClient" and "Microsoft.Data.SqlClient" #702 - Added TraceLogging in Native SNI to extend
SqlClientEventSource
support #650 - Updated Microsoft.Data.SqlClient.SNI (.NET Framework dependency) and Microsoft.Data.SqlClient.SNI.runtime (.NET Core/Standard dependency) version to v2.1.0 with trace logging implementation #705
- Fixed Enclave session cache issue with Azure Database #686
- Fixed pooled connection re-use on access token expiry issue when using Active Directory authentication modes #635
- Fixed transient fault handling for Pooled connections #637
- Fixed SPN generation issue when no port is provided #629
- Fixed missing null checks for
SqlErrors
inSqlException
for .NET Framework implementation #698
- Performance improvements by fixing unnecessary allocations with EventSource implementation #684
- Reverted changes to return empty DataTable from GetSchemaTable to return null as before. #696
- Removed multiple
CacheConnectionStringProperties
calls when settingConnectionString
properties #683 - Code Improvements by only checking inexact match when no exact match is found for an embedded resource #668
- Changed
_SqlMetaData
to lazy initialize hidden column map #521 - Renamed internal string resource file and helpers for .NET Core implementation #671
- Performance improvements by reworking
ExecuteReaderAsync
to minimize allocations #528 - Performance improvements by moving
DataReader
caches to internal connection #499 - Moved common files to shared folder between .NET Framework and .NET Core implementation #618 #625
- Added internal driver support to provide resiliency to DNS failures #594
- Added support for
Active Directory Integrated
,Active Directory Interactive
andActive Directory Service Principal
authentication mode for .NET Core and .NET Standard #560 - Added support for
Active Directory Service Principal
authentication mode for .NET Framework #560 - Added support for optional
ORDER
hints inSqlBulkCopy
for improved performance #540
- Fixed
SqlSequentialStream
multipacket read stalling issue in .NET Core #603 - Fixed code page issue for Kazakh collation in SQL Server #584
- Fixed stalled application issues when end of stream is reached #577
- Fixed driver behavior to not throw exception for invalid configuration file #573
- Fixed Object null reference issue when failover partner is set #588
- Fixed
applicationintent
connection string property issue #585
- Raise warning message when insecure TLS protocols are in use #591
- Modified enclave provider interface
SqlColumnEncryptionEnclaveProvider
to be internal #602 - This change is not likely to impact customer applications since secure enclaves is a relatively new feature and they would have had to implement their own enclave provider, which is not a trivial task. - Updated
SqlClientMetaDataCollectionNames
exposed constants by removing non-existing constants and adding new to the metadata collection #580
- Microsoft.Data.SqlClient (.NET Core and .NET Standard) on Windows is now dependent on Microsoft.Data.SqlClient.SNI.runtime, replacing the previous dependency on runtime.native.System.Data.SqlClient.SNI #570
- The new Microsoft.Data.SqlClient.SNI.runtime dependency adds support for the ARM platform along with the already supported platforms ARM64, x64 and x86 on Windows #570
- Improved driver performance by introducing managed packet recycling #389
- Fixed
SqlBulkCopy
to work with database columns containing metadata about data classification #568 - Fixed unsafe cast in
SqlException
forSerializationEntry.Value
- Fixed null reference exceptions in
SqlDelegatedTransaction
methods #563
- Standardized connection string properties for enhanced user experience #534
- Improved performance by reducing eventsource tracing related to allocations from TVP write methods #557 #564
- For .NET Framework applications consuming Microsoft.Data.SqlClient, the
SNI.dll
files previously downloaded to thebin\x64
andbin\x86
folders are now namedMicrosoft.Data.SqlClient.SNI.x64.dll
andMicrosoft.Data.SqlClient.SNI.x86.dll
and will be downloaded to thebin
directory, to support auto-loading in the application process #570. This change is not going to impact client applications unless a direct reference has been made toSNI.dll
or the x86 and x64 folders.
- Fixed driver behavior to not perform enlistment of pooled connection on aborted transaction #551
- Fixed issues introduced with MARS TDS Header fix in last release by reverting original change that caused issues. #550
- Allow passing username with Active Directory Interactive Authentication in .NET Framework #492
- Allow large UDT buffers for .NET Framework #456
- Added "Transaction Id" and "Client Version" in Diagnostic Source traces #515
- Added new
SqlConnectionOverrides
APIs to performSqlConnection.Open()
with fail fast option #463
- Addressed MARS TDS Header errors by reverting changes to make
SqlDataReader.ReadAsync()
non-blocking #547 - Fixed driver behavior to not perform enlistment of pooled connection in aborted transaction #543
- Fixed wrong application domain selected when starting
SqlDependencyListener
#410 - Added missing refs for
RowCopied
property inSqlBulkCopy
#508
- Improved performance by removing unwanted method calls in Event Source tracing #506
- Removed Diagnostic Source and Configuration Manager dependencies from .NET Standard implementation #535
- Removed redundant calls to
DbConnectionPoolKey.GetType()
#512
- Updated driver to perform decimal scale rounding to match SQL Server behavior #470
- Standardized App Context switch name that enables Managed SNI on Windows for .NET Core and .NET Standard (break only applies to 2.0 preview releases that introduced the switch) #548
- Fixed the ConnectionString's password persistence in .NET Core. #489
- Addressed MARS TDS header containing errors #510
- Updated driver libraries to be CLS Compliant #522
- Added support for capturing EventSource traces in .NET Framework, .NET Core, and .NET Standard applications #399 #461 #479 #483 #484
- Added support for Cross-platform TCP Keep Alive applicable to .NET Core 3.1+ applications #395
- Added support for enabling Managed networking implementation on Windows applicable to .NET Core and .NET Standard applications #477
- Added
RowsCopied
property inSqlBulkCopy
to expose count of copied rows #409 - Added "NeutralResourcesLanguage" attribute for .NET Framework assembly #433
- Added caching for invariant culture check result #376
- Added cached
SqlReferenceCollection.FindLiveReaderContext
objects #380
- Fixed Access Token behavior in connection pool to perform string comparison #443
- Fixed concurrent connection speed issues when connecting with Azure Active Directory Authentication modes in .NET Core #466
- Fixed issues with
Password
persistence in Connection String #453
- Updated all driver assemblies to be CLS Compliant #396
- Updated Bulk Copy error messages to also include Column, Row and non-encrypted Data information #437
- Updated error messages for "Always Encrypted - Secure Enclaves" to handle 'Attestation Protocol' and fixed typos #421 #397
- Removed sync over async in
SNINpHandle.EnableSsl
#474 - Changed non-generic
ArrayList
toList<T>
inSqlBulkCopy
#457 - Multiple performance improvements #377 #378 #379
- The driver will now perform Server Certificate validation when TLS encryption is enforced by the target Server, which is the default for Azure connections #391
SqlDataReader.GetSchemaTable()
now returns an emptyDataTable
instead of returningnull
#419
- Fixed deadlock issues by reverting async changes to
SNIPacket
#425
- Updated SNI package reference to include version range #425
- Added support to allow large UDT buffer size (upto
Int.MaxValue
) as supported by SQL Server starting TDS 7.3 #340
- Fixed issues with
SqlCommandSet
not working with Byte Array parameters #360 - Fixed Statement command cancellation in Managed SNI #248 - Ported dotnet/corefx#38271
- Fixed zero connection timeout issue in Managed SNI #332
- Fixed "DataType" metadata information for TinyInt datatype to be
System.Byte
#338 - Fixed driver behavior to use
CancellationTokenResource
only for non-infinite timeout and cleanup after usage #339 - Fixed
ConnectionTime
andClientConnectionId
reported bySqlStatistics
when connection is closed #341 - Fixed deadlock issues by reverting async changes to
SNIPacket
#349
- Improved performance of Managed SNI by removing double fetch of domain name #366
- Improved performance of Async Method Allocations in Managed SNI #328
- Improved performance of Managed SNI by enhancing utilization of resources #173 - Ported dotnet/corefx#35363 and dotnet/corefx#40732
- Improved performance of Managed SNI RPC Parameter Usage #209 - Ported dotnet/corefx#34049
- Changed enclave key map to be lazy initialized #372
- Changed
Recieve()
andReceiveAsync()
implementation to receive null packets on failure #350 - Changed
EnclaveProviderBase
caching implementation to support Async Scenarios (Introduces breaking changes) #346
- Added support for |DataDirectory| macro in
AttachDBFilename
for .NET Core client #284
- Fixed connection resiliency check #310
- Fixed
SNIPacket.ReadFromStreamAsync
to not consume sameValueTask
twice #295 - Fixed driver behavior to not send Attention signal for successful Bulk Copy operation #308
- Fixed driver behavior to abort connection when encountering
SqlException
onSqlTransaction.Commit
#299 - Fixed driver behavior to not throw exception on invalid app.config files #319
- Improved async read performance by adding multi-packet target buffer caching #285
- Improved performance of
TdsParserStateObject
andSqlDataReader
snapshot mechanisms #198 - Updated
SqlDataReader.Close
documentation #314
- Add support for secure enclaves with Always Encrypted #293
- Setting the value
DbParameter.DbType
toDbType.Time
property fails after setting the Value property #5 SQLDataAdapter.FillSchema
doesn't mark computed columns as readonly #275SqlDependency.Start
throwsFileNotFoundException
#260- Misleading
ADP_OpenReaderExists
exception message on MARS-disabled Sql Connection when incorrectly doing parallel requests #82 - SqlClient ManualTest
MARSSyncTimeoutTest
fails in managed mode #108 System.Data.SqlClient.SqlInternalConnectionTds
constructor purges original call stack when re-throwing an exception #100InvalidOperationException(SqlException)
onSqlBulkCopy
#221- Exception message grammar: "An SqlParameter [...] is not contained by this
SqlParameterCollection
" #159 - Fixing incorrect event id and opcode for the
SqlEventSource
#241
- Update dependency to Microsoft.Data.SqlClient.SNI v1.1.0 #276
- Correct timeout remarks for async command methods #264
- Improve
SqlBulkCopy
truncation error message #256 - Intellisense tooltip for
SqlCommand
'sCommandTimeout
doesn't describe units #33 - Enable SQL Command text for non-stored procs in EventSource events for .NET Framework 242
- Many test changes to support a public CI
- Added
SqlFileStream
support for .NET Framework withMicrosoft.Data.SqlTypes.SqlFileStream
class introduced. #210 - Added support for Visual Studio Intellisense with XML Documentation. #210
- Synchronized ref definitions with driver classes. #180
- Updated
SNINativeMethodWrapper
to provide the underlying error in the inner exception when we fail to load SNI.dll. #225 - Added .editorconfig file and set formatting rules. #193
- Changes done to handle statistics well and to cleanup
AutoResetEvent
on disconnect. #232
SqlCommand.StatementCompleted
event never being fired #212- Added missing
Authentication
property toSqlConnectionStringBuilder
reference assembly - Reverted API changes in
SqlAuthenticationParameters
which had changed thepublic string Resource
property topublic string[] Scopes
- Fixed issues with large data reading in Unix applications when data is spanned over multiple packets. #171
Initial release. Release Notes uploaded in 1.0.md