Inleiding tot Microsoft.Data.SqlClient-naamruimte
ADO.NET downloaden
De naamruimte Microsoft.Data.SqlClient is in feite een nieuwe versie van de naamruimte System.Data.SqlClient. Microsoft.Data.SqlClient onderhoudt over het algemeen dezelfde API en achterwaartse compatibiliteit met System.Data.SqlClient. Voor de meeste toepassingen is het eenvoudig om te migreren van System.Data.SqlClient naar Microsoft.Data.SqlClient. Voeg een NuGet-afhankelijkheid toe aan Microsoft.Data.SqlClient en werk verwijzingen en using
-verklaringen bij naar Microsoft.Data.SqlClient.
Er zijn enkele verschillen in minder gebruikte API's vergeleken met System.Data.SqlClient die van invloed kunnen zijn op sommige toepassingen. Raadpleeg voor deze verschillen het nuttige cheatsheet voor porting.
API-verwijzing
De details van de Microsoft.Data.SqlClient-API vindt u in de .NET API Browser.
Releaseopmerkingen voor Microsoft.Data.SqlClient 6.0
Belangrijke wijzigingen in 6.0
- Verwijderde ondersteuning voor .NET Standard. #2386
- Verwijderde ondersteuning voor .NET 6 #2927
- Verwijderde UWP-verwijzingen (UAP). #2483
- Vervallen ondersteuning voor foutopsporing aan de clientzijde van SQL 2000 voor .NET Framework #2981, #2940
Nieuwe functies in 6.0
- Er is ondersteuning toegevoegd voor het JSON-gegevenstype #2916, #2892, #2891, #2880, #2882, #2829, #2830
- Er is ondersteuning toegevoegd voor .NET 9 #2946
- De type
Microsoft.Data.SqlClient.Diagnostics.SqlClientDiagnostic
is toegevoegd aan .NET. #2226 - Ondersteuning voor
DateOnly
enTimeOnly
toegevoegd aanDataTable
als een gestructureerde parameter. #2258 - Er is ondersteuning toegevoegd voor
SqlConnectionOverrides
inOpenAsync()
API-#2433 - Lokalisatie toegevoegd in Tsjechisch, Pools en Turks #2987
- Een
TokenCredential
-object toegevoegd om te profiteren van token-caching inActiveDirectoryAuthenticationProvider
. #2380 - Leesmij toegevoegd aan NuGet-pakket #2826
- NuGet-pakketcontrole ingeschakeld via NuGet.org controlebron #3024
- Ontbrekend codevoorbeeld SqlCommand_BeginExecuteReader #3009 toegevoegd
- Bereiktracering toegevoegd voor
GenerateSspiClientContext
. #2497, #2725
Ondersteuning voor JSON-gegevenstypen
Ondersteuning voor JSON-gegevenstypen is nu beschikbaar in Microsoft.Data.SqlClient v6.0. In deze release wordt het SqlJson
type geïntroduceerd dat beschikbaar is als uitbreiding voor 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 ; }
}
}
Het JSON-gegevenstype ondersteunt lees-, schrijf-, streaming- en bulkkopiebewerkingen.
Inleiding tot SqlClientDiagnostics
Er zijn nieuwe typen beschikbaar in de Microsoft.Data.SqlClient.Diagnostics
naamruimte die een sterk getypte verzameling sleutel-waardeparen bieden. Deze typen kunnen worden vastgelegd door toepassingen te gebruiken voor het verzamelen van diagnostische gebeurtenissen die door het stuurprogramma worden verzonden. In deze release worden de volgende typen geïntroduceerd:
SqlClientCommandBefore
SqlClientCommandAfter
SqlClientCommandError
SqlClientConnectionOpenBefore
SqlClientConnectionOpenAfter
SqlClientConnectionOpenError
SqlClientConnectionCloseBefore
SqlClientConnectionCloseAfter
SqlClientConnectionCloseError
SqlClientTransactionCommitBefore
SqlClientTransactionCommitAfter
SqlClientTransactionCommitError
SqlClientTransactionRollbackBefore
SqlClientTransactionRollbackAfter
SqlClientTransactionRollbackError
Ondersteuning toegevoegd voor verbindingsoverschrijvingen in OpenAsync() API
Het standaardgedrag van SqlConnection.OpenAsync()
kan worden overschreven om de vertraging van tien seconden en de automatische herhaalde verbindingspogingen door tijdelijke fouten uit te schakelen.
using(SqlConnection sqlConnection = new SqlConnection("Data Source=(local);Integrated Security=true;Initial Catalog=AdventureWorks;"))
{
await sqlConnection.OpenAsync(SqlConnectionOverrides.OpenWithoutRetry, cancellationToken);
}
6.0 Doelplatform ondersteuning
- .NET Framework 4.6.2+ (Windows x86, Windows x64)
- .NET 8.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 6.0 Releaseopmerkingen.
Releaseopmerkingen voor Microsoft.Data.SqlClient 5.2
Nieuwe functies in 5.2
- Er is ondersteuning toegevoegd voor
SqlDiagnosticListener
op .NET Standard-. #1931 - Nieuwe eigenschap
RowsCopied64
toegevoegd aanSqlBulkCopy
. #2004Lees meer - Er is een nieuwe
AccessTokenCallBack
-API toegevoegd aanSqlConnection
. #1260Lees meer - Er is ondersteuning toegevoegd voor de
SuperSocketNetLib
registeroptie voor Versleutelen op .NET in Windows. #2047 - Er is
SqlBatch
ondersteuning toegevoegd op .NET 6+ #1825, #2223Lees meer - Ondersteuning voor workloadidentiteitsverificatie toegevoegd #2159, #2264
- Lokalisatieondersteuning toegevoegd op .NET #2210
- Ondersteuning toegevoegd voor Georgische sortering #2194
- Ondersteuning toegevoegd voor Big Endian-systemen #2170
- .NET 8-ondersteuning toegevoegd #2230
- Expliciete versie toegevoegd voor primaire .NET-versieafhankelijkheden op System.Runtime.Caching 8.0.0, System.Configuration.ConfigurationManager 8.0.0 en System.Diagnostics.DiagnosticSource 8.0.0 #2303
- De mogelijkheid toegevoegd om foutopsporingssymbolen te genereren in een afzonderlijk pakketbestand #2137
Nieuwe eigenschap RowsCopied64
toegevoegd aan SqlBulkCopy
SqlBulkCopy heeft een nieuwe eigenschap RowsCopied64
die ondersteuning biedt voor long
waardetypen.
Houd er rekening mee dat het bestaande SqlBulkCopy.RowsCopied
gedrag ongewijzigd is. Wanneer de waarde groter is dan int.MaxValue
, kan RowsCopied
een negatief getal retourneren.
Voorbeeldgebruik:
using (SqlConnection srcConn = new SqlConnection(srcConstr))
using (SqlCommand srcCmd = new SqlCommand("select top 5 * from employees", srcConn))
{
srcConn.Open();
using (DbDataReader reader = srcCmd.ExecuteReader())
{
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(dstConn))
{
bulkcopy.DestinationTableName = dstTable;
SqlBulkCopyColumnMappingCollection ColumnMappings = bulkcopy.ColumnMappings;
ColumnMappings.Add("EmployeeID", "col1");
ColumnMappings.Add("LastName", "col2");
ColumnMappings.Add("FirstName", "col3");
bulkcopy.WriteToServer(reader);
long rowsCopied = bulkcopy.RowsCopied64;
}
}
}
Nieuwe eigenschap AccessTokenCallBack
toegevoegd aan SqlConnection
SqlConnection biedt ondersteuning voor TokenCredential
-verificatie door een nieuwe AccessTokenCallBack
-eigenschap te introduceren als Func<SqlAuthenticationParameters, CancellationToken,Task<SqlAuthenticationToken>>
-gemachtigde om een federatieve-autorisatie toegangstoken te retourneren.
Voorbeeldgebruik:
using Microsoft.Data.SqlClient;
using Azure.Identity;
const string defaultScopeSuffix = "/.default";
string connectionString = GetConnectionString();
DefaultAzureCredential credential = new();
using SqlConnection connection = new(connectionString);
connection.AccessTokenCallback = async (authParams, cancellationToken) =>
{
string scope = authParams.Resource.EndsWith(defaultScopeSuffix)
? authParams.Resource
: $"{authParams.Resource}{defaultScopeSuffix}";
AccessToken token = await credential.GetTokenAsync(
new TokenRequestContext([scope]),
cancellationToken);
return new SqlAuthenticationToken(token.Token, token.ExpiresOn);
}
connection.Open();
Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
Console.WriteLine("State: {0}", connection.State);
SqlBatch-API
Voorbeeldgebruik:
using Microsoft.Data.SqlClient;
class Program
{
static void Main()
{
string str = "Data Source=(local);Initial Catalog=Northwind;"
+ "Integrated Security=SSPI;Encrypt=False";
RunBatch(str);
}
static void RunBatch(string connString)
{
using var connection = new SqlConnection(connString);
connection.Open();
var batch = new SqlBatch(connection);
const int count = 10;
const string parameterName = "parameter";
for (int i = 0; i < count; i++)
{
var batchCommand = new SqlBatchCommand($"SELECT @{parameterName} as value");
batchCommand.Parameters.Add(new SqlParameter(parameterName, i));
batch.BatchCommands.Add(batchCommand);
}
// Optionally Prepare
batch.Prepare();
var results = new List<int>(count);
using (SqlDataReader reader = batch.ExecuteReader())
{
do
{
while (reader.Read())
{
results.Add(reader.GetFieldValue<int>(0));
}
} while (reader.NextResult());
}
Console.WriteLine(string.Join(", ", results));
}
}
5.2 Ondersteuning voor doelplatform
- .NET Framework 4.6.2+ (Windows x86, Windows x64)
- .NET 6.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
- .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 5.2 Releaseopmerkingen.
Belangrijke wijzigingen in 5.1
Nieuwe functies in 5.1
- Er is ondersteuning toegevoegd voor
DateOnly
enTimeOnly
voor deSqlParameter
-waarde, enGetFieldValue
. #1813 - Ondersteuning toegevoegd voor TLS 1.3 voor .NET Core en SNI Native. #1821
-
ServerCertificate
-instelling toegevoegd voorEncrypt=Mandatory
ofEncrypt=Strict
. #1822Lees meer - Windows Arm64-ondersteuning toegevoegd bij gebruik van .NET Framework. #1828
Servercertificaat
De standaardwaarde van de ServerCertificate
-verbindingsinstelling is een lege tekenreeks. Wanneer Encrypt
is ingesteld op Mandatory
of Strict
, kan ServerCertificate
worden gebruikt om een pad op te geven in het bestandssysteem naar een certificaatbestand dat overeenkomt met het TLS/SSL-certificaat van de server. Het opgegeven certificaat moet exact overeenkomen om geldig te zijn. De geaccepteerde certificaatindelingen zijn PEM
, DER
en CER
. Hier volgt een gebruiksvoorbeeld:
"Data Source=...;Encrypt=Strict;ServerCertificate=C:\\certificates\\server.cer"
5.1 Ondersteuning voor doelplatform
- .NET Framework 4.6.2+ (Windows x86, Windows x64)
- .NET 6.0+ (Windows x86, Windows x64, Windows Arm64, Windows Azure Resource Manager, Linux, macOS)
- .NET Standard 2.0+ (Windows x86, Windows x64, Windows Arm64, Windows ARM, Linux, macOS)
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 5.1 Releaseopmerkingen.
Releaseopmerkingen voor Microsoft.Data.SqlClient 5.0
Belangrijke wijzigingen in 5.0
- Verwijderde ondersteuning voor .NET Framework 4.6.1 #1574
- Er is een afhankelijkheid toegevoegd voor het pakket Microsoft.SqlServer.Server. Deze nieuwe afhankelijkheid kan conflicten veroorzaken in de naamruimte als uw toepassing verwijst naar die naamruimte en nog steeds pakketverwijzingen (direct of indirect) heeft naar System.Data.SqlClient van .NET Core.
- Verwijderde klassen uit de
Microsoft.Data.SqlClient.Server
naamruimte en vervangen door ondersteunde typen uit het Microsoft.SqlServer.Server-pakket.#1585. De betrokken klassen en opsommingen zijn:- Microsoft.Data.SqlClient.Server.IBinarySerialize -> Microsoft.SqlServer.Server.IBinarySerialize
- Microsoft.Data.SqlClient.Server.InvalidUdtException -> Microsoft.SqlServer.Server.InvalidUdtException
- Microsoft.Data.SqlClient.Server.SqlFacetAttribute -> Microsoft.SqlServer.Server.SqlFacetAttribute
- Microsoft.Data.SqlClient.Server.SqlFunctionAttribute -> Microsoft.SqlServer.Server.SqlFunctionAttribute
- Microsoft.Data.SqlClient.Server.SqlMethodAttribute -> Microsoft.SqlServer.Server.SqlMethodAttribute
- Microsoft.Data.SqlClient.Server.SqlUserDefinedAggregateAttribute -> Microsoft.SqlServer.Server.SqlUserDefinedAggregateAttribute
- Microsoft.Data.SqlClient.Server.SqlUserDefinedTypeAttribute -> Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute
- (enum) Microsoft.Data.SqlClient.Server.DataAccessKind -> Microsoft.SqlServer.Server.DataAccessKind
- (enum) Microsoft.Data.SqlClient.Server.Format -> Microsoft.SqlServer.Server.Format
- (enum) Microsoft.Data.SqlClient.Server.SystemDataAccessKind -> Microsoft.SqlServer.Server.SystemDataAccessKind
Nieuwe functies in 5.0
- Er is ondersteuning toegevoegd voor
TDS8
. Als u TDS 8 wilt gebruiken, moeten gebruikers Encrypt=Strict opgeven in de verbindingsreeks. #1608Lees meer - Er is ondersteuning toegevoegd voor het opgeven van Server SPN en Failover Server SPN op de verbinding. #1607Lees meer
- Er is ondersteuning toegevoegd voor aliassen bij het gebruik van .NET Core op Windows. #1588Lees meer
- SqlDataSourceEnumerator toegevoegd. #1430Lees meer
- Er is een nieuwe AppContext-switch toegevoegd om onveilige TLS-waarschuwingen te onderdrukken. #1457Lees meer
Verbeterde beveiliging van TDS 8
Als u TDS 8 wilt gebruiken, geeft u Encrypt=Strict op in de verbindingsreeks. In de strikte modus wordt TrustServerCertificate uitgeschakeld (altijd behandeld als Onwaar in de strikte modus). HostNameInCertificate is toegevoegd om enkele strikte modusscenario's te helpen. TDS 8 begint en vervolgt alle servercommunicatie binnen een beveiligde, versleutelde TLS-verbinding.
Er zijn nieuwe versleutelingswaarden toegevoegd om het gedrag van verbindingsversleuteling te verduidelijken.
Encrypt=Mandatory
is gelijk aan Encrypt=True
en versleutelt verbindingen tijdens de TDS-verbindingsonderhandeling.
Encrypt=Optional
gelijk is aan Encrypt=False
en versleutelt alleen de verbinding als de server de client vertelt dat versleuteling is vereist tijdens de TDS-verbindingsonderhandeling.
Zie Versleuteling en certificaatvalidatievoor meer informatie over het versleutelen van verbindingen met de server.
HostNameInCertificate
kan worden opgegeven in de verbindingsreeks wanneer u aliassen gebruikt om verbinding te maken met versleuteling met een server met een servercertificaat met een andere naam of alternatieve onderwerpnaam dan de naam die door de client wordt gebruikt om de server te identificeren (bijvoorbeeld DNS-aliassen). Voorbeeld van gebruik: HostNameInCertificate=MyDnsAliasName
Server SPN
Wanneer u verbinding maakt in een omgeving met unieke domein-/foresttopografie, hebt u mogelijk specifieke vereisten voor Server-SPN's. De instellingen voor de ServerSPN/Server SPN- en FailoverServerSPN/Failover Server SPN-verbindingstekenreeks kunnen worden gebruikt om de automatisch gegenereerde server-SPN's te overschrijven die tijdens geïntegreerde verificatie in een domeinomgeving worden gebruikt.
Ondersteuning voor SQL-aliassen
Gebruikers kunnen aliassen configureren met behulp van SQL Server Configuration Manager. Deze aliassen worden opgeslagen in het Windows-register en worden al ondersteund wanneer gericht op het .NET Framework. Deze release biedt ondersteuning voor aliassen wanneer u zich richt op .NET of .NET Core in Windows.
Ondersteuning voor SQL Data Source Enumerator
Biedt een mechanisme voor het inventariseren van alle beschikbare exemplaren van SQL Server in het lokale netwerk.
using Microsoft.Data.Sql;
static void Main()
{
// Retrieve the enumerator instance and then the data.
SqlDataSourceEnumerator instance =
SqlDataSourceEnumerator.Instance;
System.Data.DataTable table = instance.GetDataSources();
// Display the contents of the table.
DisplayData(table);
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}
private static void DisplayData(System.Data.DataTable table)
{
foreach (System.Data.DataRow row in table.Rows)
{
foreach (System.Data.DataColumn col in table.Columns)
{
Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
}
Console.WriteLine("============================");
}
}
Onveilige TLS-waarschuwingen onderdrukken
Er wordt een beveiligingswaarschuwing uitgevoerd op de console als de TLS-versie kleiner dan 1.2 wordt gebruikt om met de server te onderhandelen. Deze waarschuwing kan worden onderdrukt bij de SQL-verbinding van Encrypt = false
door de AppContext-switch in te schakelen bij het opstarten van de applicatie.
Switch.Microsoft.Data.SqlClient.SuppressInsecureTLSWarning
5.0-doelplatformondersteuning
- .NET Framework 4.6.2+ (Windows x86, Windows x64)
- .NET Core 3.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)
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: releaseopmerkingen voor 5.0.
Releaseopmerkingen voor Microsoft.Data.SqlClient 4.1
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 4.1 Releaseopmerkingen.
Nieuwe functies in 4.1
Geen attestation-protocol introduceren
Een nieuw attestation-protocol met de naam None
is toegestaan in de verbindingsreeks. Met dit protocol kunnen gebruikers afzien van enclave-attestatie voor VBS
enclaves. Wanneer dit protocol is ingesteld, is de eigenschap enclave-attestation-URL optioneel.
Voorbeeld van verbindingsreeks:
//Attestation protocol NONE with no URL
"Data Source = {server}; Initial Catalog = {db}; Column Encryption Setting = Enabled; Attestation Protocol = None;"
4.1 Ondersteuning voor doelplatform
- .NET Framework 4.6.1+ (Windows x86, Windows x64)
- .NET Core 3.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)
Releaseopmerkingen voor Microsoft.Data.SqlClient 4.0
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 4.0 Releaseopmerkingen.
Belangrijke wijzigingen in 4.0
- De eigenschap van de verbindingsreeks
Encrypt
is veranderd naar standaardtrue
. #1210Lees meer - Het stuurprogramma vervangt nu
AggregateException
doorSqlException
voor Active Directory-verificatiemodi. #1213 - Verouderde
Asynchronous Processing
verbindingseigenschap van .NET Framework verwijderd. #1148 -
Configurable Retry Logic
veiligheidsschakelaar verwijderd. #1254Lees meer - Verwijderde ondersteuning voor .NET Core 2.1 #1272
- [.NET Framework] Er wordt geen uitzondering gegenereerd als er een gebruikers-id wordt opgegeven in de verbindingsreeks bij het gebruik van
Active Directory Integrated
verificatie #1359
Nieuwe functies in 4.0
Standaardwaarde versleutelen die is ingesteld op true
De standaardwaarde van de Encrypt
-verbindingsinstelling is gewijzigd van false
in true
. Met het groeiende gebruik van clouddatabases en de noodzaak om ervoor te zorgen dat deze verbindingen veilig zijn, is het tijd voor deze achterwaartse compatibiliteitsonderbrekingswijziging.
Controleren of verbindingen mislukken wanneer versleuteling is vereist
In scenario's waarin clientversleutelingsbibliotheken uitgeschakeld of niet beschikbaar waren, was het mogelijk dat niet-versleutelde verbindingen konden worden gemaakt wanneer Encrypt is ingesteld op 'true' of de server versleuteling vereiste.
App Context Switch voor het gebruik van standaardprotocollen van het systeem
TLS 1.3 wordt niet ondersteund door het stuurprogramma; Daarom is deze standaard verwijderd uit de lijst met ondersteunde protocollen. Gebruikers kunnen terugkeren naar het afdwingen van het gebruik van clientprotocollen van het besturingssysteem door de volgende app-contextswitch in te schakelen:
Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols
Geoptimaliseerde parameterbinding inschakelen
Microsoft.Data.SqlClient introduceert een nieuwe SqlCommand
-API, EnableOptimizedParameterBinding
om de prestaties van query's met een groot aantal parameters te verbeteren. Deze eigenschap is standaard uitgeschakeld. Als deze instelling is ingesteld op true
, worden parameternamen niet naar het SQL Server-exemplaar verzonden wanneer de opdracht wordt uitgevoerd.
public class SqlCommand
{
public bool EnableOptimizedParameterBinding { get; set; }
}
Configureerbare logische veiligheidsswitch voor opnieuw proberen verwijderen
De app-contextswitch Switch.Microsoft.Data.SqlClient.EnableRetryLogic is niet meer vereist voor het gebruik van de configureerbare logische functie voor opnieuw proberen. De functie is nu beschikbaar in de productieomgeving. Het standaardgedrag van de functionaliteit blijft een beleid zonder herhaalpogingen, dat clients moeten aanpassen om herhalingen in te schakelen.
Ondersteuning voor gedeelde SqlLocalDb-exemplaren
Gedeelde SqlLocalDb-exemplaren worden nu ondersteund bij het gebruik van beheerde SNI.
- Mogelijke scenario's:
-
(localdb)\.
(maakt verbinding met het standaardexemplaren van SqlLocalDb) (localdb)\<named instance>
-
(localdb)\.\<shared instance name>
(*nieuw toegevoegde ondersteuning)
-
GetFieldValueAsync<T>
en GetFieldValue<T>
ondersteuning voor XmlReader
, TextReader
, Stream
typen
XmlReader
, TextReader
, Stream
typen worden nu ondersteund bij het gebruik van GetFieldValueAsync<T>
en GetFieldValue<T>
.
Voorbeeldgebruik:
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = await command.ExecuteReaderAsync())
{
if (await reader.ReadAsync())
{
using (Stream stream = await reader.GetFieldValueAsync<Stream>(1))
{
// Continue to read from stream
}
}
}
}
}
4.0-doelplatformondersteuning
- .NET Framework 4.6.1+ (Windows x86, Windows x64)
- .NET Core 3.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)
Releaseopmerkingen voor Microsoft.Data.SqlClient 3.0
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 3.0 Releaseopmerkingen.
Belangrijke wijzigingen in 3.0
- De minimaal ondersteunde .NET Framework-versie is verhoogd naar v4.6.1. .NET Framework v4.6.0 wordt niet meer ondersteund. #899
-
User Id
verbindingseigenschap vereist nuClient Id
in plaats vanObject Id
voor User-Assigned Managed Identity#1010Meer -
SqlDataReader
retourneert nu eenDBNull
waarde in plaats van een legebyte[]
. Verouderd gedrag kan worden ingeschakeld doorAppContext
switch in te stellen Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior#998Lees meer
Nieuwe functies in 3.0
Configureerbare logica voor opnieuw proberen
Deze nieuwe functie introduceert configureerbare ondersteuning voor clienttoepassingen voor het opnieuw proberen op 'tijdelijke' of 'ophaalbare' fouten. Configuratie kan worden uitgevoerd via code- of app-configuratiebestanden en bewerkingen voor opnieuw proberen kunnen worden toegepast om een verbinding te openen of een opdracht uit te voeren. Deze functie is standaard uitgeschakeld en is momenteel in preview. Om deze ondersteuning in te schakelen, moeten clienttoepassingen de volgende veiligheidsschakelaar inschakelen:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.EnableRetryLogic", true);
Zodra de .NET AppContext-switch is ingeschakeld, kan een logicabeleid voor opnieuw proberen worden gedefinieerd voor SqlConnection
en SqlCommand
onafhankelijk of samen met behulp van verschillende aanpassingsopties.
Er worden nieuwe openbare API's geïntroduceerd in SqlConnection
en SqlCommand
voor het registreren van een aangepaste SqlRetryLogicBaseProvider
-implementatie:
public SqlConnection
{
public SqlRetryLogicBaseProvider RetryLogicProvider;
}
public SqlCommand
{
public SqlRetryLogicBaseProvider RetryLogicProvider;
}
Voorbeelden van API-gebruik vindt u hier:
using Microsoft.Data.SqlClient;
/// Detecting retriable exceptions is a vital part of the retry pattern.
/// Before applying retry logic it is important to investigate exceptions and choose a retry provider that best fits your scenario.
/// First, log your exceptions and find transient faults.
/// The purpose of this sample is to illustrate how to use this feature and the condition might not be realistic.
class RetryLogicSample
{
private const string DefaultDB = "Northwind";
private const string CnnStringFormat = "Server=localhost; Initial Catalog={0}; Integrated Security=true; pooling=false;";
private const string DropDatabaseFormat = "DROP DATABASE {0}";
// For general use
private static SqlConnection s_generalConnection = new SqlConnection(string.Format(CnnStringFormat, DefaultDB));
static void Main(string[] args)
{
// 1. Define the retry logic parameters
var options = new SqlRetryLogicOption()
{
NumberOfTries = 5,
MaxTimeInterval = TimeSpan.FromSeconds(20),
DeltaTime = TimeSpan.FromSeconds(1)
};
// 2. Create a retry provider
var provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
// define the retrying event to report the execution attempts
provider.Retrying += (object s, SqlRetryingEventArgs e) =>
{
int attempts = e.RetryCount + 1;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"attempt {attempts} - current delay time:{e.Delay} \n");
Console.ForegroundColor = ConsoleColor.DarkGray;
if (e.Exceptions[e.Exceptions.Count - 1] is SqlException ex)
{
Console.WriteLine($"{ex.Number}-{ex.Message}\n");
}
else
{
Console.WriteLine($"{e.Exceptions[e.Exceptions.Count - 1].Message}\n");
}
// It is not a good practice to do time-consuming tasks inside the retrying event which blocks the running task.
// Use parallel programming patterns to mitigate it.
if (e.RetryCount == provider.RetryLogic.NumberOfTries - 1)
{
Console.WriteLine("This is the last chance to execute the command before throwing the exception.");
Console.WriteLine("Press Enter when you're ready:");
Console.ReadLine();
Console.WriteLine("continue ...");
}
};
// Open the general connection.
s_generalConnection.Open();
try
{
// Assume the database is being created and other services are going to connect to it.
RetryConnection(provider);
}
catch
{
// exception is thrown if connecting to the database isn't successful.
throw;
}
}
private static void ExecuteCommand(SqlConnection cn, string command)
{
using var cmd = cn.CreateCommand();
cmd.CommandText = command;
cmd.ExecuteNonQuery();
}
private static void RetryConnection(SqlRetryLogicBaseProvider provider)
{
// Change this if you already have a database with the same name in your database.
string dbName = "Invalid_DB_Open";
// Create a connection to an invalid database.
using var cnn = new SqlConnection(string.Format(CnnStringFormat, dbName));
// 3. Assign the `provider` to the connection
cnn.RetryLogicProvider = provider;
Console.WriteLine($"Connecting to the [{dbName}] ...");
// Manually execute the following command in SSMS to create the invalid database while the SqlConnection is attempting to connect to it.
// >> CREATE DATABASE Invalid_DB_Open;
Console.WriteLine($"Manually, run the 'CREATE DATABASE {dbName};' in the SQL Server before exceeding the {provider.RetryLogic.NumberOfTries} attempts.");
// the connection tries to connect to the database 5 times
Console.WriteLine("The first attempt, before getting into the retry logic.");
cnn.Open();
Console.WriteLine($"Connected to the [{dbName}] successfully.");
cnn.Close();
// Drop it after test
ExecuteCommand(s_generalConnection, string.Format(DropDatabaseFormat, dbName));
Console.WriteLine($"The [{dbName}] is removed.");
}
}
/// Detecting retriable exceptions is a vital part of the retry pattern.
/// Before applying retry logic it is important to investigate exceptions and choose a retry provider that best fits your scenario.
/// First, log your exceptions and find transient faults.
/// The purpose of this sample is to illustrate how to use this feature and the condition might not be realistic.
private const string DefaultDB = "Northwind";
private const string CnnStringFormat = "Server=localhost; Initial Catalog={0}; Integrated Security=true; pooling=false;";
private const string DropDatabaseFormat = "DROP DATABASE {0}";
private const string CreateDatabaseFormat = "CREATE DATABASE {0}";
// For general use
private static SqlConnection s_generalConnection = new SqlConnection(string.Format(CnnStringFormat, DefaultDB));
static void Main(string[] args)
{
// 1. Define the retry logic parameters
var options = new SqlRetryLogicOption()
{
NumberOfTries = 5,
MaxTimeInterval = TimeSpan.FromSeconds(20),
DeltaTime = TimeSpan.FromSeconds(1),
AuthorizedSqlCondition = null,
// error number 3702 : Cannot drop database "xxx" because it is currently in use.
TransientErrors = new int[] {3702}
};
// 2. Create a retry provider
var provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
// define the retrying event to report execution attempts
provider.Retrying += (object s, SqlRetryingEventArgs e) =>
{
int attempts = e.RetryCount + 1;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"attempt {attempts} - current delay time:{e.Delay} \n");
Console.ForegroundColor = ConsoleColor.DarkGray;
if (e.Exceptions[e.Exceptions.Count - 1] is SqlException ex)
{
Console.WriteLine($"{ex.Number}-{ex.Message}\n");
}
else
{
Console.WriteLine($"{e.Exceptions[e.Exceptions.Count - 1].Message}\n");
}
// It is not good practice to do time-consuming tasks inside the retrying event which blocks the running task.
// Use parallel programming patterns to mitigate it.
if (e.RetryCount == provider.RetryLogic.NumberOfTries - 1)
{
Console.WriteLine("This is the last chance to execute the command before throwing the exception.");
Console.WriteLine("Press Enter when you're ready:");
Console.ReadLine();
Console.WriteLine("continue ...");
}
};
// Open a general connection.
s_generalConnection.Open();
try
{
// Assume the database is creating and other services are going to connect to it.
RetryCommand(provider);
}
catch
{
s_generalConnection.Close();
// exception is thrown if connecting to the database isn't successful.
throw;
}
s_generalConnection.Close();
}
private static void ExecuteCommand(SqlConnection cn, string command)
{
using var cmd = cn.CreateCommand();
cmd.CommandText = command;
cmd.ExecuteNonQuery();
}
private static void FindActiveSessions(SqlConnection cnn, string dbName)
{
using var cmd = cnn.CreateCommand();
cmd.CommandText = "DECLARE @query NVARCHAR(max) = '';" + Environment.NewLine +
$"SELECT @query = @query + 'KILL ' + CAST(spid as varchar(50)) + ';' FROM sys.sysprocesses WHERE dbid = DB_ID('{dbName}')" + Environment.NewLine +
"SELECT @query AS Active_sessions;";
var reader = cmd.ExecuteReader();
if (reader.Read())
{
Console.ForegroundColor = ConsoleColor.Green;
Console.Write($">> Execute the '{reader.GetString(0)}' command in SQL Server to unblock the running task.");
Console.ResetColor();
}
reader.Close();
}
var RetryLogicOption = new SqlRetryLogicOption()
{
NumberOfTries = 5,
// Declare the error number 102 as a transient error to apply the retry logic when it occurs.
TransientErrors = new int[] { 102 },
// When a SqlCommand executes out of a transaction,
// the retry logic will apply if it contains a 'select' keyword.
AuthorizedSqlCondition = x => string.IsNullOrEmpty(x)
|| Regex.IsMatch(x, @"\b(SELECT)\b", RegexOptions.IgnoreCase),
DeltaTime = TimeSpan.FromSeconds(1),
MaxTimeInterval = TimeSpan.FromSeconds(60),
MinTimeInterval = TimeSpan.FromSeconds(3)
};
Er zijn ook nieuwe configuratiesecties geïntroduceerd om dezelfde registratie uit configuratiebestanden uit te voeren, zonder dat u bestaande code hoeft te wijzigen:
<section name="SqlConfigurableRetryLogicConnection"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
<section name="SqlConfigurableRetryLogicCommand"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
Hier volgt een eenvoudig voorbeeld van het gebruik van de nieuwe configuratiesecties in configuratiebestanden:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="SqlConfigurableRetryLogicConnection"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
<section name="SqlConfigurableRetryLogicCommand"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
<section name="AppContextSwitchOverrides"
type="Microsoft.Data.SqlClient.AppContextSwitchOverridesSection, Microsoft.Data.SqlClient"/>
</configSections>
<!--Enable safety switch in .NET Core-->
<AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableRetryLogic=true"/>
<!--Retry method for SqlConnection-->
<SqlConfigurableRetryLogicConnection retryMethod ="CreateFixedRetryProvider" numberOfTries ="3" deltaTime ="00:00:10" maxTime ="00:00:30"
transientErrors="40615" />
<!--Retry method for SqlCommand containing SELECT queries-->
<SqlConfigurableRetryLogicCommand retryMethod ="CreateIncrementalRetryProvider" numberOfTries ="5" deltaTime ="00:00:10" maxTime ="00:01:10"
authorizedSqlCondition="\b(SELECT)\b" transientErrors="102, 4060, 0"/>
</configuration>
Toepassingen kunnen ook hun eigen provider van de SqlRetryLogicBaseProvider
basisklasse implementeren en deze registreren bij SqlConnection
/SqlCommand
.
Gebeurtenistellers
De volgende tellers zijn nu beschikbaar voor toepassingen die gericht zijn op .NET Core 3.1+ en .NET Standard 2.1+:
Naam | Weergavenaam | Beschrijving |
---|---|---|
actieve harde verbindingen | Werkelijke actieve verbindingen die momenteel zijn gemaakt met servers | Het aantal verbindingen dat momenteel is geopend voor databaseservers. |
vaste verbinding maken | Werkelijke verbindingssnelheid met servers | Het aantal verbindingen per seconde dat wordt geopend voor databaseservers. |
harde onderbrekingen | Werkelijke ontkoppelingsfrequentie van servers | Het aantal verbroken verbindingen per seconde dat wordt gemaakt op databaseservers. |
actieve zachte verbindingen | Actieve verbindingen opgehaald uit de verbindingsgroep | Het aantal al geopende verbindingen dat wordt gebruikt vanuit de verbindingspool. |
soft-verbindingen | Snelheid van verbindingen die zijn opgehaald uit de verbindingsgroep | Het aantal verbindingen dat per seconde wordt verbruikt vanuit de connectiepool. |
zachte ontkoppelingen | Snelheid van verbindingen die zijn geretourneerd naar de verbindingsgroep | Het aantal verbindingen per seconde dat wordt geretourneerd aan de verbindingsgroep. |
aantal niet-gepoolde verbindingen | Aantal verbindingen dat geen gebruikmaakt van groepsgewijze verbindingen | Het aantal actieve verbindingen dat niet is gepoold. |
aantal gepoolde verbindingen | Aantal verbindingen dat wordt beheerd door de verbindingsgroep | Het aantal actieve verbindingen dat de infrastructuur voor groepsgewijze verbindingen beheert. |
aantal groepen met actieve verbindingen | Aantal actieve unieke verbindingsreeksen | Het aantal actieve, unieke verbindingsgroepgroepen. Deze teller is gebaseerd op het aantal unieke verbindingsreeksen in het AppDomain. |
aantal-inactieve-verbindingspoolgroepen | Aantal unieke verbindingsreeksen die wachten om bijgesneden te worden | Het aantal unieke verbindingsgroepen dat is gemarkeerd voor terugsnoeien. Deze teller is gebaseerd op het aantal unieke verbindingsreeksen in het AppDomain. |
aantal verbindingsgroepen | Aantal actieve verbindingsgroepen | Het totale aantal verbindingsgroepen. |
aantal inactieve verbindingsgroepen | Aantal inactieve verbindingsgroepen | Het aantal inactieve connectiepoelen zonder recente activiteit en in afwachting van verwijdering. |
aantal actieve verbindingen | Aantal actieve verbindingen | Het aantal actieve verbindingen dat momenteel wordt gebruikt. |
aantal gratis verbindingen | Aantal kant-en-klare verbindingen in de verbindingsgroep | Het aantal geopende verbindingen dat beschikbaar is voor gebruik in de verbindingsgroepen. |
aantal stasis-verbindingen | Aantal verbindingen dat momenteel wacht om gereed te zijn | Het aantal verbindingen dat momenteel wacht op voltooiing van een actie en die niet beschikbaar zijn voor gebruik door de toepassing. |
aantal vrijgemaakte verbindingen | Aantal vrijgemaakte verbindingen van GC | Het aantal verbindingen dat wordt opgehaald via de vuilnisophaaldienst waarbij Close of Dispose niet door de applicatie is aangeroepen.
Opmerking Verbindingen niet expliciet sluiten of verwijderen, gaat ten koste van de prestaties. |
Deze tellers kunnen worden gebruikt met globale CLI-hulpprogramma's van .NET Core: dotnet-counters
en dotnet-trace
in Windows of Linux en PerfView in Windows, met behulp van Microsoft.Data.SqlClient.EventSource
als providernaam. Zie Waarden voor gebeurtenistellers ophalenvoor meer informatie.
dotnet-counters monitor Microsoft.Data.SqlClient.EventSource -p
PerfView /onlyProviders=*Microsoft.Data.SqlClient.EventSource:EventCounterIntervalSec=1 collect
Inleiding tot Azure Identity-afhankelijkheid
Microsoft.Data.SqlClient- is nu afhankelijk van de Azure.Identity-bibliotheek voor het verkrijgen van tokens voor de verificatiemodi Active Directory Managed Identity/MSI en Active Directory Service Principal. Deze wijziging brengt de volgende wijzigingen aan het openbare oppervlak met zich mee:
-
Incompatibele wijziging
De verbindingseigenschap 'Gebruikers-id' vereist nu 'Client-id' in plaats van 'Object-id' voor 'User-Assigned Beheerde identiteit'. -
openbare API
Nieuwe openbare eigenschap met het kenmerk Alleen-lezen:SqlAuthenticationParameters.ConnectionTimeout
-
afhankelijkheid
Azure.Identity v1.3.0
Verbeteringen in het traceren van gebeurtenissen in SNI.dll
Microsoft.Data.SqlClient.SNI
(.NET Framework-afhankelijkheid) en Microsoft.Data.SqlClient.SNI.runtime
(.NET Core/Standard-afhankelijkheid) zijn bijgewerkt naar v3.0.0-preview1.21104.2
. Gebeurtenistracering in SNI.dll wordt niet meer ingeschakeld via een clienttoepassing. Het abonneren van een sessie op de Microsoft.Data.SqlClient.EventSource provider via hulpprogramma's zoals xperf
of perfview
is voldoende. Zie Ondersteuning voor gebeurtenistracering in systeemeigen SNI-voor meer informatie.
Null-gedrag voor rijversie inschakelen
SqlDataReader
retourneert een DBNull
waarde in plaats van een lege byte[]
. Als u het verouderde gedrag wilt inschakelen, moet u de volgende AppContext-switch inschakelen bij het opstarten van de toepassing: 'Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior'
Standaardverificatieondersteuning voor Microsoft Entra
Notitie
Hoewel Microsoft Entra ID de nieuwe naam is voor Azure Active Directory (Azure AD), blijft Azure AD aanwezig in sommige hardcoded elementen, zoals UI-velden, verbindingsproviders, foutcodes en cmdlets, om te voorkomen dat bestaande omgevingen worden verstoord. In dit artikel zijn de twee namen uitwisselbaar.
In deze pull-aanvraag wordt een nieuwe SQL-verificatiemethode geïntroduceerd, Active Directory Default. Deze verificatiemodus verbreedt de mogelijkheden van gebruikersverificatie met Microsoft Entra ID, het uitbreiden van aanmeldingsoplossingen naar de clientomgeving, Visual Studio Code, Visual Studio, Azure CLI, enzovoort.
Met deze verificatiemodus verkrijgt het stuurprogramma een token door 'DefaultAzureCredential' door te geven uit de Azure Identity-bibliotheek om een toegangstoken te verkrijgen. Deze modus probeert deze referentietypen te gebruiken om een toegangstoken in de volgende volgorde te verkrijgen:
-
EnvironmentCredential
- Hiermee kunt u authenticatie met Microsoft Entra ID inschakelen met behulp van client en sleutel, of gebruikersnaam en wachtwoord, waarbij de details zijn geconfigureerd in de volgende omgevingsvariabelen: AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_CLIENT_CERTIFICATE_PATH, AZURE_USERNAME, AZURE_PASSWORD (Meer informatie)
-
ManagedIdentityCredential-
- Probeert verificatie met Microsoft Entra-id met behulp van een beheerde identiteit die is toegewezen aan de implementatieomgeving. De 'client-id' van een door de gebruiker toegewezen beheerde identiteit wordt gelezen uit de verbindingseigenschap 'Gebruikers-id'.
-
SharedTokenCacheCredential-
- Verifieert het gebruik van tokens in de lokale cache die wordt gedeeld tussen Microsoft-toepassingen.
-
VisualStudioCredential
- Hiermee schakelt u verificatie met Microsoft Entra-id in met behulp van gegevens uit Visual Studio
-
VisualStudioCodeCredential
- Hiermee schakelt u verificatie met Microsoft Entra-id in met behulp van gegevens uit Visual Studio Code.
-
AzureCliCredential
- Hiermee schakelt u verificatie met Microsoft Entra ID met behulp van Azure CLI in om een toegangstoken te verkrijgen.
InteractiveBrowserCredential is uitgeschakeld in de stuurprogrammaimplementatie van 'Active Directory Default' en 'Active Directory Interactive' is de enige optie die beschikbaar is om een token te verkrijgen met behulp van MFA/Interactive-verificatie.
Verdere aanpassingsopties zijn momenteel niet beschikbaar.
Verbeteringen in de registratie van aangepaste providers voor hoofdsleutelopslag
Microsoft.Data.SqlClient biedt nu meer controle over waar hoofdsleutelarchiefproviders toegankelijk zijn in een toepassing om multitenant-toepassingen en het gebruik van kolomversleuteling/-ontsleuteling beter te ondersteunen. De volgende API's worden geïntroduceerd om registratie van aangepaste hoofdsleutelarchiefproviders toe te staan op exemplaren van SqlConnection
en SqlCommand
:
public class SqlConnection
{
public void RegisterColumnEncryptionKeyStoreProvidersOnConnection(IDictionary<string, SqlColumnEncryptionKeyStoreProvider> customProviders)
}
public class SqlCommand
{
public void RegisterColumnEncryptionKeyStoreProvidersOnCommand(IDictionary<string, SqlColumnEncryptionKeyStoreProvider> customProviders)
}
De statische API op SqlConnection
, SqlConnection.RegisterColumnEncryptionKeyStoreProviders
, die wordt gebruikt voor het wereldwijd registreren van aangepaste hoofdsleutelopslagproviders, wordt nog steeds ondersteund. De cache voor kolomversleutelingssleutels blijft wereldwijd alleen van toepassing op wereldwijd geregistreerde providers.
Registratieprioriteit van de provider van het hoofdsleutelarchief
De ingebouwde hoofdsleutelarchiefproviders in de kolom die beschikbaar zijn voor het Windows-certificaatarchief, het CNG-archief en de CSP, worden vooraf geregistreerd. Er mogen geen providers worden geregistreerd op de verbinding of de opdrachtinstanties als een van de ingebouwde kolomhoofdsleutelarchiefproviders nodig is.
Aangepaste hoofdsleutelopslagproviders kunnen worden geregistreerd bij het stuurprogramma op drie verschillende lagen. Het globale niveau is zoals het momenteel is. De nieuwe registraties per verbinding en per opdrachtniveau zijn in eerste instantie leeg en kunnen meer dan één keer worden ingesteld.
De prioriteit van de drie registraties is als volgt:
- De registratie per opdracht wordt gecontroleerd als deze niet leeg is.
- Als de registratie per opdracht leeg is, wordt de registratie per verbinding gecontroleerd als deze niet leeg is.
- Als de registratie per verbinding leeg is, wordt de globale registratie gecontroleerd.
Zodra een sleutelarchiefprovider op registratieniveau is gevonden, het stuurprogramma NIET terugvallen op de andere registraties om naar een provider te zoeken. Als providers zijn geregistreerd maar de juiste provider op een bepaald niveau niet wordt gevonden, wordt er een uitzondering opgeworpen die alleen de geregistreerde providers bevat.
Prioriteit van cache voor kolomversleutelingssleutel
Het stuurprogramma slaat de kolomversleutelingssleutels (CEK's) niet op in de cache voor aangepaste sleutelarchiefproviders die zijn geregistreerd met behulp van de nieuwe API's op exemplaarniveau. De sleutelarchiefproviders moeten hun eigen cache implementeren om de prestaties te verbeteren. Het stuurprogramma schakelt de lokale cache van kolomversleutelingssleutels, geïmplementeerd door aangepaste sleutelarchiefproviders, uit als het exemplaar van de sleutelarchiefprovider op globaal niveau in het stuurprogramma is geregistreerd.
Er is ook een nieuwe API geïntroduceerd op de SqlColumnEncryptionKeyStoreProvider
basisklasse om de cachetijd in te stellen op live:
public abstract class SqlColumnEncryptionKeyStoreProvider
{
// The default value of Column Encryption Key Cache Time to Live is 0.
// Provider's local cache is disabled for globally registered providers.
// Custom key store provider implementation must include column encryption key cache to provide caching support to locally registered providers.
public virtual TimeSpan? ColumnEncryptionKeyCacheTtl { get; set; } = new TimeSpan(0);
}
IP-adresvoorkeur
Er wordt een nieuwe verbindingseigenschap IPAddressPreference
geïntroduceerd om de voorkeur voor de IP-adresfamilie voor het stuurprogramma op te geven bij het tot stand brengen van TCP-verbindingen. Als Transparent Network IP Resolution
(in .NET Framework) of Multi Subnet Failover
is ingesteld op true
, heeft deze instelling geen effect. Er zijn de drie geaccepteerde waarden voor deze eigenschap:
IPv4First-
- Deze waarde is de standaardwaarde. Het stuurprogramma maakt eerst gebruik van opgeloste IPv4-adressen. Als geen van deze met succes kan worden verbonden, wordt geprobeerd IPv6-adressen op te lossen.
IPv6First-
- Het stuurprogramma maakt eerst gebruik van opgeloste IPv6-adressen. Als geen van deze met succes kan worden verbonden, probeert het verbinding te maken met eerder opgeloste IPv4-adressen.
UsePlatformDefault
- De driver probeert IP-adressen in de volgorde die ontvangen is van het antwoord voor DNS-omzetting.
3.0-doelplatformondersteuning
- .NET Framework 4.6.1+ (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)
Releaseopmerkingen voor Microsoft.Data.SqlClient 2.1
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 2.1 Releaseopmerkingen.
Nieuwe functies in 2.1
Platformoverschrijdende ondersteuning voor Always Encrypted
Microsoft.Data.SqlClient v2.1 breidt de ondersteuning voor Always Encrypted uit op de volgende platforms:
Ondersteuning voor Always Encrypted | Ondersteuning voor Always Encrypted met Secure Enclave | Doelraamwerk | Microsoft.Data.SqlClient-versie | Besturingssysteem |
---|---|---|---|---|
Ja | Ja | .NET Framework 4.6+ | 1.1.0+ | Ramen |
Ja | Ja | .NET Core 2.1+ | 2.1.0+1 | Windows, Linux, macOS |
Ja | Geen2 | .NET Standard 2.0 | 2.1.0+ | Windows, Linux, macOS |
Ja | Ja | .NET Standard 2.1+ | 2.1.0+ | Windows, Linux, macOS |
Notitie
1 Vóór Microsoft.Data.SqlClient versie v2.1 wordt Always Encrypted alleen ondersteund in Windows.
2 Always Encrypted met beveiligde enclaves wordt niet ondersteund op .NET Standard 2.0.
Microsoft Entra Device Code Flow-verificatie
Microsoft.Data.SqlClient v2.1 biedt ondersteuning voor verificatie van apparaatcodestroom met MSAL.NET. Referentiedocumentatie: OAuth2.0 apparaatautorisatieproces
Voorbeeld van verbindingsreeks:
Server=<server>.database.windows.net; Authentication=Active Directory Device Code Flow; Database=Northwind;Encrypt=True
De volgende API maakt aanpassing van het Device Code Flow callbackmechanisme mogelijk:
public class ActiveDirectoryAuthenticationProvider
{
// For .NET Framework, .NET Core and .NET Standard targeted applications
public void SetDeviceCodeFlowCallback(Func<DeviceCodeResult, Task> deviceCodeFlowCallbackMethod)
}
Door Microsoft Entra beheerde identiteitsverificatie
Microsoft.Data.SqlClient v2.1 introduceert ondersteuning voor Microsoft Entra-verificatie met behulp van beheerde identiteiten.
De volgende trefwoorden voor de verificatiemodus worden ondersteund:
- Beheerde identiteit van Active Directory
- Active Directory MSI (voor compatibiliteit tussen MS SQL-stuurprogramma's)
Voorbeelden van verbindingsreeksen:
// For System Assigned Managed Identity
"Server={serverURL}; Authentication=Active Directory MSI; Encrypt=True; Initial Catalog={db};"
// For System Assigned Managed Identity
"Server={serverURL}; Authentication=Active Directory Managed Identity; Initial Catalog={db};"
// For User Assigned Managed Identity
"Server={serverURL}; Authentication=Active Directory MSI; Encrypt=True; User Id={ObjectIdOfManagedIdentity}; Initial Catalog={db};"
// For User Assigned Managed Identity
"Server={serverURL}; Authentication=Active Directory Managed Identity; Encrypt=True; User Id={ObjectIdOfManagedIdentity}; Initial Catalog={db};"
Verbeteringen in interactieve authenticatie van Microsoft Entra
Microsoft.Data.SqlClient v2.1 voegt de volgende API's toe om de Microsoft Entra Interactive-verificatie-ervaring aan te passen:
public class ActiveDirectoryAuthenticationProvider
{
// For .NET Framework targeted applications only
public void SetIWin32WindowFunc(Func<IWin32Window> iWin32WindowFunc);
// For .NET Standard targeted applications only
public void SetParentActivityOrWindowFunc(Func<object> parentActivityOrWindowFunc);
// For .NET Framework, .NET Core and .NET Standard targeted applications
public void SetAcquireAuthorizationCodeAsyncCallback(Func<Uri, Uri, CancellationToken, Task<Uri>> acquireAuthorizationCodeAsyncCallback);
// For .NET Framework, .NET Core and .NET Standard targeted applications
public void ClearUserTokenCache();
}
SqlClientAuthenticationProviders
configuratiesectie
Microsoft.Data.SqlClient v2.1 introduceert een nieuwe configuratiesectie, SqlClientAuthenticationProviders
(een kloon van de bestaande SqlAuthenticationProviders
). De bestaande configuratiesectie, SqlAuthenticationProviders
, wordt nog steeds ondersteund voor compatibiliteit met eerdere versies wanneer het juiste type is gedefinieerd.
In de nieuwe sectie kunnen toepassingsconfiguratiebestanden zowel een sectie SqlAuthenticationProviders bevatten voor System.Data.SqlClient als een sectie SqlClientAuthenticationProviders voor Microsoft.Data.SqlClient.
Microsoft Entra-verificatie met behulp van een client-id van een toepassing
Microsoft.Data.SqlClient v2.1 introduceert ondersteuning voor het doorgeven van een door de gebruiker gedefinieerde toepassingsclient-id aan de Microsoft Authentication Library. De client-id van de toepassing wordt gebruikt bij het verifiëren met Microsoft Entra-id.
De volgende nieuwe API's worden geïntroduceerd:
Er is een nieuwe constructor geïntroduceerd in ActiveDirectoryAuthenticationProvider:
[Van toepassing op alle .NET-platforms (.NET Framework, .NET Core en .NET Standard)]public ActiveDirectoryAuthenticationProvider(string applicationClientId)
Gebruik:
string APP_CLIENT_ID = "<GUID>"; SqlAuthenticationProvider customAuthProvider = new ActiveDirectoryAuthenticationProvider(APP_CLIENT_ID); SqlAuthenticationProvider.SetProvider(SqlAuthenticationMethod.ActiveDirectoryInteractive, customAuthProvider); using (SqlConnection sqlConnection = new SqlConnection("<connection_string>")) { sqlConnection.Open(); }
Er is een nieuwe configuratie-eigenschap geïntroduceerd onder
SqlAuthenticationProviderConfigurationSection
enSqlClientAuthenticationProviderConfigurationSection
:
[Van toepassing op .NET Framework en .NET Core]internal class SqlAuthenticationProviderConfigurationSection : ConfigurationSection { ... [ConfigurationProperty("applicationClientId", IsRequired = false)] public string ApplicationClientId => this["applicationClientId"] as string; } // Inheritance internal class SqlClientAuthenticationProviderConfigurationSection : SqlAuthenticationProviderConfigurationSection { ... }
Gebruik:
<configuration> <configSections> <section name="SqlClientAuthenticationProviders" type="Microsoft.Data.SqlClient.SqlClientAuthenticationProviderConfigurationSection, Microsoft.Data.SqlClient" /> </configSections> <SqlClientAuthenticationProviders applicationClientId ="<GUID>" /> </configuration> <!--or--> <configuration> <configSections> <section name="SqlAuthenticationProviders" type="Microsoft.Data.SqlClient.SqlAuthenticationProviderConfigurationSection, Microsoft.Data.SqlClient" /> </configSections> <SqlAuthenticationProviders applicationClientId ="<GUID>" /> </configuration>
Ondersteuning voor gegevensclassificatie v2
Microsoft.Data.SqlClient v2.1 introduceert ondersteuning voor informatie over vertrouwelijkheidsclassificatie. De volgende nieuwe API's zijn nu beschikbaar:
public class SensitivityClassification
{
public SensitivityRank SensitivityRank;
}
public class SensitivityProperty
{
public SensitivityRank SensitivityRank;
}
public enum SensitivityRank
{
NOT_DEFINED = -1,
NONE = 0,
LOW = 10,
MEDIUM = 20,
HIGH = 30,
CRITICAL = 40
}
Serverproces-ID voor een actieve SqlConnection
Microsoft.Data.SqlClient v2.1 introduceert een nieuwe eigenschap SqlConnection
, ServerProcessId
, op een actieve verbinding.
public class SqlConnection
{
// Returns the server process Id (SPID) of the active connection.
public int ServerProcessId;
}
Ondersteuning voor trace-logging in natuurlijke SNI
Microsoft.Data.SqlClient v2.1 breidt de bestaande SqlClientEventSource
-implementatie uit om gebeurtenistracering in te schakelen in SNI.dll. Gebeurtenissen moeten worden vastgelegd met behulp van een hulpprogramma zoals Xperf.
Tracering kan worden ingeschakeld door een opdracht te verzenden naar SqlClientEventSource
zoals geïllustreerd:
// Enables trace events:
EventSource.SendCommand(eventSource, (EventCommand)8192, null);
// Enables flow events:
EventSource.SendCommand(eventSource, (EventCommand)16384, null);
// Enables both trace and flow events:
EventSource.SendCommand(eventSource, (EventCommand)(8192 | 16384), null);
De Verbindingsreeks-eigenschap Commando-time-out
Microsoft.Data.SqlClient v2.1 introduceert de verbindingsreekseigenschap Opdrachttime-out om de standaardwaarde van 30 seconden te overschrijven. De time-out voor afzonderlijke opdrachten kan worden overschreven met de eigenschap CommandTimeout
in SqlCommand.
Voorbeelden van verbindingsreeksen:
"Server={serverURL}; Initial Catalog={db}; Encrypt=True; Integrated Security=true; Command Timeout=60"
Het verwijderen van symbolen uit systeemeigen SNI
Met Microsoft.Data.SqlClient v2.1 hebben we de symbolen verwijderd die zijn geïntroduceerd in v2.0.0 uit Microsoft.Data.SqlClient.SNI.runtime NuGet vanaf v2.1.1. De openbare symbolen worden nu gepubliceerd naar Microsoft Symbols Server voor hulpprogramma's zoals BinSkim waarvoor toegang tot openbare symbolen is vereist.
Source-Linking van Microsoft.Data.SqlClient-symbolen
Vanaf Microsoft.Data.SqlClient v2.1 zijn microsoft.Data.SqlClient-symbolen gekoppeld aan de bron en gepubliceerd naar de Microsoft Symbols Server voor een verbeterde foutopsporing zonder broncode te hoeven downloaden.
2.1 Ondersteuning voor doelplatform
- .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)
Releaseopmerkingen voor Microsoft.Data.SqlClient 2.0
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 2.0 Releaseopmerkingen.
Belangrijke wijzigingen in 2.0
- De toegangsaanpassing voor de interface van de enclaveprovider
SqlColumnEncryptionEnclaveProvider
is gewijzigd vanpublic
ininternal
. - Constanten in de
SqlClientMetaDataCollectionNames
-klasse zijn bijgewerkt om wijzigingen in SQL Server weer te geven. - Het stuurprogramma voert nu servercertificaatvalidatie uit wanneer de doel-SQL Server TLS-versleuteling afdwingt. Dit is de standaardinstelling voor Azure-verbindingen.
-
SqlDataReader.GetSchemaTable()
retourneert nu een legeDataTable
in plaatsnull
. - Het stuurprogramma voert nu afronding van de decimale schaal uit om overeen te komen met sql Server-gedrag. Voor compatibiliteit met eerdere versies kan het vorige gedrag van afkapping worden ingeschakeld met behulp van een AppContext-switch.
- Voor .NET Framework-toepassingen die Microsoft.Data.SqlClient-gebruiken, worden de SNI.dll bestanden die eerder zijn gedownload naar de
bin\x64
enbin\x86
mappen nuMicrosoft.Data.SqlClient.SNI.x64.dll
enMicrosoft.Data.SqlClient.SNI.x86.dll
genoemd en worden ze gedownload naar de mapbin
. - Nieuwe synoniemen voor verbindingsreekseigenschappen vervangen oude eigenschappen bij het ophalen van de verbindingsreeks uit
SqlConnectionStringBuilder
voor consistentie. Lees meer
Nieuwe functies in 2.0
De volgende nieuwe functies zijn geïntroduceerd in Microsoft.Data.SqlClient 2.0.
Veerkracht tegen DNS-fouten
Het stuurprogramma slaat nu IP-adressen op van elke geslaagde verbinding met een SQL Server-eindpunt dat ondersteuning biedt voor de functie. Als er een DNS-omzettingsfout optreedt tijdens een verbindingspoging, probeert het stuurprogramma een verbinding tot stand te brengen met behulp van een IP-adres in de cache voor die server, indien aanwezig.
EventSource-tracering
Deze release introduceert ondersteuning voor het vastleggen van gebeurtenistraceringslogboeken voor foutopsporingstoepassingen. Om deze gebeurtenissen vast te leggen, moeten clienttoepassingen luisteren naar gebeurtenissen uit de EventSource-implementatie van SqlClient:
Microsoft.Data.SqlClient.EventSource
Zie voor meer informatie hoe u gebeurtenistracering kunt inschakelen in SqlClient.
Beheerde netwerken inschakelen in Windows
Een nieuwe AppContext-switch, 'Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows', maakt het gebruik van een beheerde SNI-implementatie in Windows mogelijk voor test- en foutopsporingsdoeleinden. Met deze schakeloptie schakelt u het gedrag van het stuurprogramma in om een beheerde SNI te gebruiken in .NET Core 2.1+ en .NET Standard 2.0+-projecten in Windows, waardoor alle afhankelijkheden van systeemeigen bibliotheken voor de Microsoft.Data.SqlClient-bibliotheek worden geëlimineerd.
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);
Zie AppContext-switches in SqlClient voor een volledige lijst met beschikbare switches in het stuurprogramma.
Het inschakelen van het gedrag om decimalen af te kappen
Het stuurprogramma rondt standaard de decimale gegevensschaal af, zoals wordt gedaan door SQL Server. Voor compatibiliteit met eerdere versies kunt u de AppContext-switch Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal instellen op waar.
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal", true);
Nieuwe synoniemen van verbindingsreekseigenschap
Er zijn nieuwe synoniemen toegevoegd voor de volgende bestaande eigenschappen van de verbindingsreeks om verwarring rond eigenschappen met meer dan één woord te voorkomen. Oude eigenschapsnamen blijven ondersteund voor compatibiliteit met eerdere versies. Maar de nieuwe eigenschappen van de verbindingsreeks worden nu opgenomen bij het ophalen van de verbindingsreeks uit SqlConnectionStringBuilder.
Bestaande eigenschap van verbindingsreeks | Nieuw synoniem |
---|---|
ApplicationIntent | Toepassingsintentie |
ConnectRetryCount | Aantal herhalingen verbinden |
ConnectRetryInterval | Interval voor opnieuw proberen verbinden |
PoolBlokkeerperiode | Blokkeringsperiode van Pool |
MultipleActiveResultSets | Meerdere actieve resultaatsets |
MultiSubnetFailover | Failover van meerdere subnetten |
TransparanteNetwerkIPResolutie | Transparante NETWERK-IP-resolutie |
TrustServerCertificate | Vertrouwensservercertificaat |
SqlBulkCopy-eigenschap RowsCopied
De eigenschap RowsCopied biedt alleen-lezentoegang tot het aantal rijen dat is verwerkt in de lopende bulkkopiebewerking. Deze waarde is mogelijk niet noodzakelijkerwijs gelijk aan het laatste aantal rijen dat aan de doeltabel is toegevoegd.
Openen van verbinding-overrides
Het standaardgedrag van SqlConnection.Open() kan worden overschreven om de vertraging van tien seconden en het automatisch opnieuw proberen van verbindingen uit te schakelen die worden geactiveerd door tijdelijke fouten.
using(SqlConnection sqlConnection = new SqlConnection("Data Source=(local);Integrated Security=true;Initial Catalog=AdventureWorks;"))
{
sqlConnection.Open(SqlConnectionOverrides.OpenWithoutRetry);
}
Notitie
Deze override kan worden toegepast op SqlConnection.OpenAsync()
vanaf Microsoft.Data.SqlClient v6.0.0.
Ondersteuning voor gebruikersnaam voor de interactieve modus van Active Directory
Een gebruikersnaam kan worden opgegeven in de verbindingsreeks wanneer u de interactieve verificatiemodus van Microsoft Entra gebruikt voor zowel .NET Framework als .NET Core
Stel een gebruikersnaam in met behulp van de gebruikers-id of UID verbindingsreekseigenschap:
"Server=<server name>; Database=<db name>; Authentication=Active Directory Interactive; User Id=<username>;Encrypt=True;"
Orderhints voor SqlBulkCopy
Orderhints kunnen worden verstrekt om de prestaties voor bulkkopiebewerkingen op tabellen met geclusterde indexen te verbeteren. Zie de sectie bulksgewijs kopiëren voor meer informatie.
Wijzigingen in SNI-afhankelijkheid
Microsoft.Data.SqlClient (.NET Core en .NET Standard) in Windows is nu afhankelijk van Microsoft.Data.SqlClient.SNI.runtime, waarbij de vorige afhankelijkheid wordt vervangen door runtime.native.System.Data.SqlClient.SNI-. Met de nieuwe afhankelijkheid wordt ondersteuning toegevoegd voor het ARM-platform, samen met de al ondersteunde platforms Arm64, x64 en x86 in Windows.
2.0-doelplatformondersteuning
- .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)
Releaseopmerkingen voor Microsoft.Data.SqlClient 1.1.0
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 1.1 Releaseopmerkingen.
Nieuwe functies in 1.1
Always Encrypted met beveiligde enclaves
Always Encrypted is beschikbaar vanaf Microsoft SQL Server 2016. Beveiligde enclaves zijn beschikbaar vanaf Microsoft SQL Server 2019. Als u de enclavefunctie wilt gebruiken, moeten verbindingsreeksen het vereiste attestation-protocol en de attestation-URL bevatten. Bijvoorbeeld:
"Attestation Protocol=HGS;Enclave Attestation Url=<attestation_url_for_HGS>"
Zie voor meer informatie:
- SqlClient-ondersteuning voor Always Encrypted-
- Zelfstudie: Een .NET-toepassing ontwikkelen met Always Encrypted met beveiligde enclaves
1.1 Ondersteuning voor het doelplatform
- .NET Framework 4.6+ (Windows x86, Windows x64)
- .NET Core 2.1+ (Windows x86, Windows x64, Linux, macOS)
- .NET Standard 2.0+ (Windows x86, Windows x64, Linux, macOS)
Releaseopmerkingen voor Microsoft.Data.SqlClient 1.0
De eerste release voor de Microsoft.Data.SqlClient-naamruimte biedt meer functionaliteit dan de bestaande System.Data.SqlClient-naamruimte.
Volledige releaseopmerkingen, inclusief afhankelijkheden, zijn beschikbaar in de GitHub-opslagplaats: 1.0 Releaseopmerkingen.
Nieuwe functies in 1.0
Nieuwe functies via .NET Framework 4.7.2 System.Data.SqlClient
gegevensclassificatie - beschikbaar in Azure SQL Database en Microsoft SQL Server 2019.
UTF-8-ondersteuning - beschikbaar in Microsoft SQL Server 2019.
Nieuwe functies via .NET Core 2.2 System.Data.SqlClient
gegevensclassificatie - beschikbaar in Azure SQL Database en Microsoft SQL Server 2019.
UTF-8-ondersteuning - beschikbaar in Microsoft SQL Server 2019.
Authenticatie - Active Directory-wachtwoordauthenticatiemodus.
Gegevensclassificatie
Gegevensclassificatie brengt een nieuwe set API's met alleen-lezen gegevensgevoeligheid en -classificatiegegevens beschikbaar over objecten die zijn opgehaald via SqlDataReader wanneer de onderliggende bron de functie ondersteunt en metagegevens bevat over vertrouwelijkheid en classificatie van gegevens. Bekijk de voorbeeldtoepassing op Gegevensdetectie en -classificatie in SqlClient.
public class SqlDataReader
{
public Microsoft.Data.SqlClient.DataClassification.SensitivityClassification SensitivityClassification
}
namespace Microsoft.Data.SqlClient.DataClassification
{
public class ColumnSensitivity
{
public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.SensitivityProperty> SensitivityProperties
}
public class InformationType
{
public string Id
public string Name
}
public class Label
{
public string Id
public string Name
}
public class SensitivityClassification
{
public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.ColumnSensitivity> ColumnSensitivities
public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.InformationType> InformationTypes
public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.Label> Labels
}
public class SensitivityProperty
{
public Microsoft.Data.SqlClient.DataClassification.InformationType InformationType
public Microsoft.Data.SqlClient.DataClassification.Label Label
}
}
UTF-8-ondersteuning
UTF-8-ondersteuning vereist geen wijzigingen in de toepassingscode. Deze SqlClient-wijzigingen optimaliseren client-servercommunicatie wanneer de server UTF-8 ondersteunt en de onderliggende kolomsortering UTF-8 is. Zie de sectie UTF-8 onder Wat is er nieuw in SQL Server 2019.
Altijd versleuteld met veilige enclaves
In het algemeen moet de bestaande documentatie die gebruikmaakt van System.Data.SqlClient op .NET Framework en ingebouwde providers van hoofdsleutels voor kolommen nu ook met .NET Core werken.
Ontwikkelen met de Always Encrypted-functie van de .NET Framework-gegevensprovider
Authenticatie
Verschillende verificatiemodi kunnen worden opgegeven met behulp van de optie Verificatie verbindingsreeks. Zie de -documentatie voor SqlAuthenticationMethodvoor meer informatie.
Notitie
Aangepaste sleutelarchiefproviders, zoals de Azure Key Vault-provider, moeten worden bijgewerkt ter ondersteuning van Microsoft.Data.SqlClient. Op dezelfde manier moeten enclaveproviders ook worden bijgewerkt ter ondersteuning van Microsoft.Data.SqlClient. Always Encrypted wordt alleen ondersteund voor .NET Framework- en .NET Core-doelen. Het wordt niet ondersteund voor .NET Standard omdat .NET Standard bepaalde versleutelingsafhankelijkheden mist.
1.0-doelplatformondersteuning
- .NET Framework 4.6+ (Windows x86, Windows x64)
- .NET Core 2.1+ (Windows x86, Windows x64, Linux, macOS)
- .NET Standard 2.0+ (Windows x86, Windows x64, Linux, macOS)