This update brings the below changes over the previous preview release:
- 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 along with related classesSqlEnclaveAttestationParameters
andSqlEnclaveSession
#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
All changes in Microsoft.Data.SqlClient v2.0 over v1.1:
- Added support to allow large UDT buffer size (upto
Int.MaxValue
) as supported by SQL Server starting TDS 7.3 #340 - Added support for capturing EventSource traces in .NET Framework, .NET Core, and .NET Standard applications #399 #461 #479 #483 #484 Read More
- 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 Read More
- Added
RowsCopied
property inSqlBulkCopy
to expose count of copied rows #409 Read More - Added "NeutralResourcesLanguage" attribute for .NET Framework assembly #433
- Added caching for invariant culture check result #376
- Added cached
SqlReferenceCollection.FindLiveReaderContext
objects #380 - Allow passing username with Active Directory Interactive Authentication #492 Read More
- 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 Read More - 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 Read More
- 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 Read More
- Improved driver performance by introducing managed packet recycling #389
- 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 - Read more - Added support for
Active Directory Service Principal
authentication mode for .NET Framework #560 - Added support for optional
ORDER
hints inSqlBulkCopy
for improved performance #540 Read More
- 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 - 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 - 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 - 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 - 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
- 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
Receive()
andReceiveAsync()
implementation to receive null packets on failure #350 - Changed
EnclaveProviderBase
caching implementation to support Async Scenarios (Introduces breaking changes) #346 - 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
- 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 - Standardized connection string properties for enhanced user experience #534 Read More
- Improved performance by reducing eventsource tracing related to allocations from TVP write methods #557 #564
- 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 emptyDataTable
instead of returningnull
#419- Updated driver to perform decimal scale rounding to match SQL Server behavior #470 Read More
- 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. - Modified enclave provider interface
SqlColumnEncryptionEnclaveProvider
to be internal along with related classesSqlEnclaveAttestationParameters
andSqlEnclaveSession
#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 - New connection string property synonyms will replace old properties when fetching connection string from
SqlConnectionStringBuilder
for consistency. Read More
This release brings parity of Active Directory authentication modes supported for .NET Framework and .NET Core applications. With the 2.0 stable release, the following authentication modes are supported for Microsoft.Data.SqlClient:
Authentication mechanism | .NET Framework 4.6+ | .NET Core 2.1+ | .NET Standard 2.0+ |
---|---|---|---|
Active Directory Password | Yes | Yes | Yes |
Active Directory Integrated | Yes | Yes1 | Yes1 |
Active Directory Interactive | Yes | Yes1 | Yes1 |
Active Directory Service Principal1 | Yes1 | Yes1 | Yes1 |
1 New authentication mode starting with Microsoft.Data.SqlClient v2.0
This authentication mode uses Active Directory Service Principal to connect to an Azure SQL Database using the client ID and secret of a service principal identity. Service principal authentication involves setting up an App registration with a secret, granting permissions to the App in the Azure SQL Database instance, then connecting with a connection string like the following:
Server=tcp:<servername>.database.windows.net;Database=<dbname>;Authentication=Active Directory Service Principal;User Id=<AppId>;Password=<Secret>;
This release introduces support for capturing EventSource trace logs for debugging applications. In order to capture these traces, client applications must listen to events from SqlClient's EventSource implementation:
"Microsoft.Data.SqlClient.EventSource"
Supported Event Keywords are:
Keyword Name | Value | Description |
---|---|---|
ExecutionTrace | 1 | Turns on capturing Start/Stop events before and after command execution. |
Trace | 2 | Turns on capturing basic application flow trace events. |
Scope | 4 | Turns on capturing enter and exit events |
NotificationTrace | 8 | Turns on capturing SqlNotification trace events |
NotificationScope | 16 | Turns on capturing SqlNotification scope enter and exit events |
PoolerTrace | 32 | Turns on capturing connection pooling flow trace events. |
PoolerScope | 64 | Turns on capturing connection pooling scope trace events. |
AdvancedTrace | 128 | Turns on capturing advanced flow trace events. |
AdvancedTraceBin | 256 | Turns on capturing advanced flow trace events with additional information. |
CorrelationTrace | 512 | Turns on capturing correlation flow trace events. |
StateDump | 1024 | Turns on capturing full state dump of SqlConnection |
SNITrace | 2048 | Turns on capturing flow trace events from Managed Networking implementation (only applicable in .NET Core) |
SNIScope | 4096 | Turns on capturing scope events from Managed Networking implementation (only applicable in .NET Core) |
This release introduces a new AppContext switch, "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", that enables the use of Managed SNI on Windows for testing and debugging purposes. This switch will toggle the driver's behavior to use Managed SNI in .NET Core 2.1+ and .NET Standard 2.0+ projects on Windows. Using the managed SNI implementation eliminates the dependency on the native Microsoft.Data.SqlClient.SNI binaries for a fully managed stack.
To set the switch from app startup, specify:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);
[NOTE] Known differences when compared to Native SNI.dll: Managed SNI does not support non-domain Windows Authentication.
Starting with v2.0.0-preview3, the decimal data scale will be rounded by the driver by default as is done by SQL Server. For backwards compatibility, you can set the AppContext switch "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" to "true".
To set the switch at application startup, specify:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal", true);
The below connection properties can be interchangeably used with the new synonyms to avoid spacing confusion and for an enhanced user experience.
Existing connection string property | New Synonym |
---|---|
ApplicationIntent | Application Intent |
ConnectRetryCount | Connect Retry Count |
ConnectRetryInterval | Connect Retry Interval |
PoolBlockingPeriod | Pool Blocking Period |
MultipleActiveResultSets | Multiple Active Result Sets |
MultiSubnetFailover | Multi Subnet Failover |
TransparentNetworkIPResolution | Transparent Network IP Resolution |
TrustServerCertificate | Trust Server Certificate |
Old properties will continue to be supported for backwards compatibility, but the new connection string properties will now be included when fetching connection string from SqlConnectionStringBuilder.
This property provides read-only access to the number of rows processed in the ongoing bulk copy operation. Note that this value is not necessarily equal to the number of rows added to the destination table.
The default behavior of SqlConnection.Open()
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;");
sqlConnection.Open(SqlConnectionOverrides.OpenWithoutRetry);
A username can now be specified in the connection string when using Azure Active Directory Interactive authentication mode for both .NET Framework and .NET Core targeted applications.
Set a username using the User ID or UID connection string property:
"Server=<server name>; Database=<dbname>; Authentication=Active Directory Interactive; User Id=<username>;"
Bulk copy operations offer significant performance advantages over other methods for loading data into a SQL Server table. Performance can be further enhanced by using order hints. Specifying order hints for your bulk copy operations can lower the insertion time of sorted data into tables with clustered indexes.
By default, the bulk insert operation assumes the incoming data is unordered. SQL Server forces an intermediate sort of this data before bulk loading it. If you know that your incoming data is already sorted, you can use order hints to tell the bulk copy operation about the sort order of any destination columns that are part of a clustered index.
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. The new dependency adds support for the ARM
platform along with the already supported platforms ARM64
, x64
and x86
on Windows.
- .NET Framework 4.6+ (Windows x86, Windows x64)
- .NET Core 2.1+ (Windows x86, Windows x64, Windows ARM64, Windows ARM, Linux, macOS)
- .NET Standard 2.0+ (Windows x86, Windows x64, Windows ARM64, Windows ARM, Linux, macOS)
- Microsoft.Data.SqlClient.SNI 2.0.0
- Microsoft.Identity.Client 4.14.0
- Microsoft.IdentityModel.Protocols.OpenIdConnect 5.6.0
- Microsoft.IdentityModel.JsonWebTokens 5.6.0
- Microsoft.Data.SqlClient.SNI.runtime 2.0.0
- Microsoft.Win32.Registry 4.7.0
- System.Security.Principal.Windows 4.7.0
- System.Text.Encoding.CodePages 4.7.0
- System.Diagnostics.DiagnosticSource 4.7.0
- System.Configuration.ConfigurationManager 4.7.0
- System.Runtime.Caching 4.7.0
- Microsoft.Identity.Client 4.14.0
- Microsoft.IdentityModel.Protocols.OpenIdConnect 5.6.0
- Microsoft.IdentityModel.JsonWebTokens 5.6.0
- Microsoft.Data.SqlClient.SNI.runtime 2.0.0
- Microsoft.Win32.Registry 4.7.0
- System.Security.Principal.Windows 4.7.0
- System.Text.Encoding.CodePages 4.7.0
- System.Diagnostics.DiagnosticSource 4.7.0
- System.Configuration.ConfigurationManager 4.7.0
- System.Runtime.Caching 4.7.0
- Microsoft.Identity.Client 4.14.0
- Microsoft.IdentityModel.Protocols.OpenIdConnect 5.6.0
- Microsoft.IdentityModel.JsonWebTokens 5.6.0
- Microsoft.Data.SqlClient.SNI.runtime 2.0.0
- Microsoft.Win32.Registry 4.7.0
- System.Buffers 4.5.1
- System.Memory 4.5.4
- System.Security.Principal.Windows 4.7.0
- System.Text.Encoding.CodePages 4.7.0
- Microsoft.Identity.Client 4.14.0
- Microsoft.IdentityModel.Protocols.OpenIdConnect 5.6.0
- Microsoft.IdentityModel.JsonWebTokens 5.6.0