Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft. Data.SqlClient ist der unterstützte .NET-Datenanbieter für SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance, Azure Synapse Analytics und SQL Database in Microsoft Fabric. Es wird als NuGet-Paket verteilt, entwickelt sich unabhängig von der .NET-Laufzeit weiter und ersetzt System.Data.SqlClient für neue Entwicklungen. Nutzen Sie es, um Verbindungen zu öffnen, Befehle auszuführen, Ergebnisse zu verarbeiten, Transaktionen zu verwalten, Daten in großen Mengen zu laden und SQL Server-spezifische Funktionen aus .NET-Anwendungen zu nutzen.
Auswählen des Startpunkts
- Um ein Projekt einzurichten und deine erste Abfrage auszuführen, beginne mit "Starten mit dem SqlClient-Treiber".
- Um den Treiber zu einem .NET-Projekt hinzuzufügen, gehe zu Download Microsoft. Data.SqlClient.
- Um sich mit passwortloser Authentifizierung mit Azure SQL zu verbinden, beginnen Sie mit Microsoft Entra-Authentifizierung und Verbindungszeichenfolgen.
- Um eine bestehende Anwendung widerstandsfähig gegen vorübergehende Fehler zu machen, gehen Sie zu Konfigurierbarer Wiederholungs-Logik sowie High Availability und Disaster Recovery.
- Um große Datensätze effizient zu verschieben, gehen Sie zu Massenkopiervorgänge.
- Für die Migration von
System.Data.SqlClientbeginnen Sie mit Einführung in den Microsoft.Data.SqlClient-Namespace. - Um ein Verbindungs- oder Abfrageproblem zu diagnostizieren, gehe zum SqlClient-Fehlerbehebungsleitfaden und aktiviere Ereignisquellen-Tracing.
Produktionsbasisplan für Azure SQL
Nutzen Sie diesen Ausschnitt als Ausgangspunkt für einen produktionsorientierten Azure SQL-Datenzugriffspfad. Es liest die Server- und Datenbanknamen aus IConfiguration, sodass die Werte von den Konfigurationsanbietern stammen, die der Host verkabelt (appsettings.json, Umgebungsvariablen, Azure App Configuration, Key Vault-gestützte Einstellungen usw.). Die Konfiguration kombiniert Transport Layer Security (TLS), die Verwendung einer verwalteten Identität, Resilienz bei Leerlaufverbindungen, Wiederholungen bei der Erstverbindung mithilfe einer konfigurierbaren Wiederholungslogik (CRL) mit strukturiertem Protokollieren, Wiederholungen auf Befehlsebene bei vorübergehenden Fehlern, die während der Abfrage auftreten, sowie die schnelle Wiederherstellung von Failovergruppen.
Für höhere Sicherheit und zur Unterstützung der Konfiguration über verschiedene Umgebungen hinweg sollten Sie die Verbindungsinformationen außerhalb Ihres Codes behalten. In der Produktion speichern Sie Verbindungsinformationen im Konfigurationssystem Ihrer Anwendung und verwenden Sie Azure Key Vault für sensible Werte. Weitere Informationen finden Sie unter Schützen von Verbindungsinformationen.
Der C#-Ausschnitt in diesem Artikel lässt using aus Gründen der Kürze Direktiven und Klassenwrapper weg.
public static void QuerySalesWithResilience(IConfiguration config, ILogger logger)
{
string server = config["Sql:Server"]
?? throw new InvalidOperationException("Missing configuration value 'Sql:Server'.");
string database = config["Sql:Database"]
?? throw new InvalidOperationException("Missing configuration value 'Sql:Database'.");
var builder = new SqlConnectionStringBuilder
{
DataSource = server,
InitialCatalog = database,
Authentication = SqlAuthenticationMethod.ActiveDirectoryManagedIdentity,
Encrypt = SqlConnectionEncryptOption.Strict, // TDS 8.0 encryption (SqlClient 5.0 and later versions; server must support it)
ConnectTimeout = 30, // per-attempt connect timeout in seconds
// Idle connection resiliency: reconnect a dropped idle connection after Open() succeeded.
// This is separate from the initial-connect retry provider defined next.
ConnectRetryCount = 3,
ConnectRetryInterval = 10,
MultiSubnetFailover = true, // recommended for TCP endpoints; enables parallel connect
// ApplicationIntent = ApplicationIntent.ReadOnly, // uncomment to route to a readable secondary
};
// Retry the initial Open() on transient failures with exponential backoff and jitter.
// TransientErrors is null, so the provider uses the driver's built-in transient error list.
var openRetry = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(
new SqlRetryLogicOption
{
NumberOfTries = 5,
DeltaTime = TimeSpan.FromSeconds(3),
MaxTimeInterval = TimeSpan.FromSeconds(60),
});
openRetry.Retrying += (_, args) =>
{
Exception last = args.Exceptions[^1];
logger.LogWarning(
last,
"Retrying SQL connection to {Server}/{Database} (attempt {Attempt}) after {Delay}",
server, database, args.RetryCount, args.Delay);
};
// Retry commands that hit deadlocks, lock timeouts, or common Azure SQL transient errors
// mid-query on an established connection. Only attach this provider to commands whose
// effect is safe to repeat.
var commandRetry = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(
new SqlRetryLogicOption
{
NumberOfTries = 4,
DeltaTime = TimeSpan.FromSeconds(5),
MaxTimeInterval = TimeSpan.FromSeconds(30),
// Deadlock victim, lock-request timeout, and common Azure SQL transient errors.
TransientErrors = new[] { 1205, 1222, 10928, 10929, 40197, 40501, 40613, 49918 },
});
commandRetry.Retrying += (_, args) =>
{
Exception last = args.Exceptions[^1];
logger.LogWarning(
last,
"Retrying SQL command (attempt {Attempt}) after {Delay}",
args.RetryCount, args.Delay);
};
try
{
using var connection = new SqlConnection(builder.ConnectionString)
{
RetryLogicProvider = openRetry,
};
connection.Open();
using var command = new SqlCommand(
"SELECT TOP (100) SalesOrderId, OrderDate, TotalDue FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC",
connection)
{
RetryLogicProvider = commandRetry,
CommandTimeout = 30,
};
using var reader = command.ExecuteReader();
while (reader.Read())
{
logger.LogInformation(
"Order {SalesOrderId} placed {OrderDate:d} total ${TotalDue:N2}",
reader.GetInt32(0), reader.GetDateTime(1), reader.GetDecimal(2));
}
}
catch (SqlException ex)
{
logger.LogError(
ex,
"Query against {Server}/{Database} failed after retries (SQL error {ErrorNumber})",
server, database, ex.Number);
throw;
}
}
Dieser Ausschnitt richtet sich an jeden SQL Datenbank-Engine-Endpunkt, der für Microsoft Entra-Authentifizierung konfiguriert ist: Azure SQL-Datenbank, Azure SQL Managed Instance, SQL Database in Microsoft Fabric und SQL Server 2022 und spätere Versionen auf Azure Virtual Machines oder aktiviert durch Azure Arc.
Encrypt = SqlConnectionEncryptOption.Strict wählt TDS 8.0-Verschlüsselung. Es erfordert Microsoft. Data.SqlClient 5.0 und spätere Versionen sowie einen Server, der TDS 8.0 unterstützt (SQL Server 2022 und spätere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Microsoft Fabric). Greifen Sie auf SqlConnectionEncryptOption.Mandatory zurück, wenn Sie eine Verbindung mit älteren Servern herstellen.
ConnectRetryCount und ConnectRetryInterval aktivieren die Resilienz inaktiver Verbindungen: Nach erfolgreichem Open() stellt der Treiber beim nächsten Befehl eine getrennte inaktive Verbindung transparent wieder her. Sie versuchen den Anfangstest Open()nicht erneut. Anfängliche Verbindungs-Wiederholungen stammen vom Anbieter, der openRetry zugeordnet ist SqlConnection.RetryLogicProvider. Die beiden Merkmale ergänzen sich.
Das Retrying-Ereignis für jeden Provider wird vor jedem Wiederholungsversuch ausgelöst und enthält die Anzahl der Wiederholungsversuche, die Verzögerung vor dem nächsten Versuch und die bisher aufgetretenen Ausnahmen. Leiten Sie es an ILogger oder an Ihre Telemetrie-Pipeline weiter, damit die Retry-Schleife im Produktivbetrieb sichtbar bleibt.
Legen Sie MultiSubnetFailover = true fest, wenn das Ziel eine Azure SQL-Datenbank, eine Azure SQL Managed Instance, eine SQL-Datenbank in Microsoft Fabric, ein Verfügbarkeitsgruppenlistener oder eine Failoverclusterinstanz ist. Es wählt einen parallelen Verbindungscodepfad, der versucht, TCP-Verbindungen zu allen aufgelösten IP-Adressen parallel herzustellen, und nutzt die erste erfolgreiche Verbindung, wodurch der langsame, sequentielle pro-IP-Gang vermieden wird, der diese Verbindungen sonst blockieren könnte. Bei Single-IP-Zielen ist die Einstellung sicher.
MultiSubnetFailover wird nicht unterstützt, wenn man sich mit einer benannten Instanz verbindet, über ein anderes Protokoll als TCP oder mit einer Instanz, die mit mehr als 64 IP-Adressen konfiguriert ist. Du kannst es auch nicht mit Datenbankspiegelung verwenden, das in allen unterstützten Versionen von SQL Server veraltet ist. Verwenden Sie stattdessen Always On-Verfügbarkeitsgruppen. Weitere Informationen finden Sie unter Hohe Verfügbarkeit und Katastrophenwiederherstellung sowie Deaktivierung transparenter Netzwerk-IP-Auflösung.
Wenn das Ziel Azure SQL-Datenbank serverless mit aktivierter automatischer Pause ist, erhöhen Sie ConnectTimeout auf mindestens 60 Sekunden. Eine automatisch pausierte Datenbank wird beim ersten Open() wieder aufgenommen, und der erste Open() kann mit dem Fehler 40613 fehlschlagen, während die Datenbank wieder aufgenommen wird. Der Fehler 40613 befindet sich in der eingebauten Liste der vorübergehenden Fehler, also openRetry versuche es erneut. Clientseitige Timeouts werden als Fehler -2 angezeigt, das nicht in dieser Liste enthalten ist, sodass openRetry ein Open(), bei dem während der Fortsetzung ein Timeout auftritt, nicht retten kann. Der individuelle Kontaktversuch muss lang genug sein, um den Lebenslauf abzudecken. Weitere Informationen finden Sie unter Auto-pause und Auto-resume.
Ob Wiederholungen auf Befehlsebene erfolgen, entscheidet der Aufrufer für jeden Befehl einzeln. Fügen Sie commandRetry nur dann an SqlCommand.RetryLogicProvider an, wenn das Wiederholen des Befehls sicher ist: Lesevorgänge, MERGE geschützt durch einen natürlichen Schlüssel, Upserts über eine gespeicherte Prozedur und andere idempotente Operationen. Der eingebaute Befehlsanbieter überspringt den erneuten Versuch, wenn eine Transaktion aktiv ist, sodass Multi-Statement-Transaktionen mit Anwendungscode erneut versucht werden müssen, der die Transaktion wieder öffnen kann. Die Einstellung TransientErrors ersetzt die integrierte Fehlerliste des Treibers; um stattdessen die integrierte Standardliste zu erweitern, verwenden Sie SqlConfigurableRetryFactory.BaselineTransientErrors (Microsoft.Data.SqlClient ab Version 7.0).
Weitere Informationen zu den einzelnen Teilen dieser Konfiguration finden Sie unter:
- Verbindungszeichenfolgen
- Microsoft Entra-Authentifizierung
- Verschlüsselung und Zertifikatüberprüfung
- Konfigurierbare Wiederholungslogik
- Hohe Verfügbarkeit und Notfallwiederherstellung
Wichtigste Funktionen
- Moderne .NET-Unterstützung: Läuft auf aktuellen .NET- und .NET-Framework-Versionen. Für die Aufschlüsselung pro Version siehe Support-Lebenszyklus.
-
Standardverschlüsselt: TLS-verschlüsselte Verbindungen mit
Encrypt=trueals Standard. Legen SieEncrypt=Strictfür die TDS 8.0-Verschlüsselung in Microsoft.Data.SqlClient 5.0 und höher fest. - Microsoft Entra ID-Authentifizierung: Kennwortlose Verbindungen mit verwalteter Identität, Dienstprinzipal, interaktiven, integrierten, Standard-Anmeldeinformationsketten- und Zugriffstoken-Abläufen.
- Kerberos und NTLM: Integrierte Windows-Authentifizierung für lokales Active Directory und Legacy-Szenarien.
- Always Encrypted: clientseitige Verschlüsselung für vertrauliche Spalten mit optionalen sicheren Enklaven für Vorgänge direkt an Ort und Stelle.
- Massenkopieren: Einfügevorgänge mit hohem Durchsatz mit SqlBulkCopy.
-
Verbindungsresilienz: Integrierte Wiederholungsversuche bei Verbindungen (
ConnectRetryCountundConnectRetryInterval) sowie optional konfigurierbare Wiederholungslogik für Verbindungen und Befehle. -
Reiche SQL Server-Datentypen:
datetimeoffset,sql_variant, JSON, Vektor-, räumlich-, XML- und tabellenwertige Parameter. - Diagnosen: Ereignisquellen-Verfolgung, Diagnosezähler, Anbieterstatistiken und ein spezieller Fehlerbehebungsleitfaden.
Get started
| Artikel | Description |
|---|---|
| Erste Schritte mit dem SqlClient-Treiber | Richte ein Projekt ein, erstelle eine Datenbank, verbinde dich, frage ab und füge Verbindungsresilienz hinzu. |
| Übersicht über den SqlClient-Treiber | Erfahren Sie, wie Microsoft. Data.SqlClient passt in ADO.NET. |
| Lade Microsoft herunter. Data.SqlClient | Installiere das NuGet-Paket und finde Quellcode-Releases. |
| Supportlebenszyklus | Überprüfen Sie unterstützte Treiberversionen und Supportdaten. |
| Microsoft. Data.SqlClient-Namensraum | Migriere von System.Data.SqlClient und überprüfe die Unterschiede in den Namensräumen. |
Konfigurieren und Verbinden
| Artikel | Description |
|---|---|
| Mit einer Datenquelle verbinden | Öffnen und verwalten Sie Verbindungen zu SQL Server und Azure SQL. |
| Verbindungszeichenfolgen | Konfigurieren Sie Server-, Datenbank-, Authentifizierungs-, Verschlüsselungs- und Verbindungsverhalten. |
| Verschlüsselung und Zertifikatüberprüfung | Konfigurieren Sie verschlüsselte Verbindungen und Serverzertifikatsvalidierung. |
| SQL Server-Verbindungspooling | Verwenden Sie physische Verbindungen effizient wieder. |
| Verbindungsereignisse | Antworten Sie auf Nachrichten zum Verbindungszustand und Informationen. |
Authentifizieren und sichern
| Artikel | Description |
|---|---|
| SQL Server-Sicherheit | Überprüfen Sie die Richtlinien zur Authentifizierung, Autorisierung und Anwendungssicherheit. |
| Microsoft Entra-Authentifizierung | Verbinden Sie sich mit verwalteter Identität, Service Principal, Passwort und interaktiven Flows. |
| Verbindungsinformationen schützen | Halten Sie Zugangsdaten und Verbindungseinstellungen aus dem Anwendungscode heraus. |
| Immer verschlüsselt | Schütze sensible Spaltenwerte vor dem Datenbanksystem. |
| Immer verschlüsselt mit sicheren Enklaven | Führen Sie reichhaltige Operationen auf verschlüsselten Daten mit einer sicheren Enklave aus. |
Daten abrufen und aktualisieren
| Artikel | Description |
|---|---|
| Befehle und Parameter | Führe parametrisierte SQL-Anweisungen und gespeicherte Prozeduren aus. |
| "DataAdapters" und "DataReaders" | Ergebnismengen streamen oder getrennte Datenstrukturen füllen. |
| Transaktionen und Parallelität | Nutze lokale und verteilte Transaktionen sowie Nebenläufigkeitskontrollen. |
| Datenbankschema-Informationen abrufen | Entdecken Sie Schema-Sammlungen und Einschränkungen. |
| Massenkopieroperationen | Laden Sie große Datensätze effizient mit SqlBulkCopy. |
| Tabellenwertparameter | Senden Sie mehrere Zeilen an eine parametrisierte Anweisung oder gespeicherte Prozedur. |
| Asynchrone Programmierung | Verwenden Sie asynchrone Verbindungs-, Befehls- und Datenoperationen. |
| Mehrere aktive Ergebnismengen (MARS) | Mehrere Stapel über eine Verbindung verschachteln. |
Datentypen
| Artikel | Description |
|---|---|
| ADONET-Datentyp-Abbildungen | Common Language Runtime-Typen den Provider- und SQL Server-Typen zuordnen. |
| SQL Server-Datentypen | Arbeiten Sie mit SQL Server-spezifischen Werten und System.Data.SqlTypes Typen. |
| JSON-Daten | Senden und holen Sie den SQL Server-Datentyp json ab. |
| Vektordaten | Senden und holen Sie Vektorwerte ab. |
| XML-Daten | Lesen, schreiben und parametrisieren Sie XML-Werte. |
| Binär- und Großwertdaten | Streamen und aktualisieren Sie Binär-, FILESTREAM- und Großwertdaten. |
Zuverlässigkeit und Diagnostik
| Artikel | Description |
|---|---|
| Konfigurierbare Wiederholungslogik | Versuche es erneut mit transienten Verbindungen und Befehlsfehlern mit begrenzten Richtlinien. |
| Hohe Verfügbarkeit und Notfallwiederherstellung | Stellen Sie eine Verbindung mit Verfügbarkeitsgruppen-Listenern und Failoverpartnern her. |
| Diagnosezähler | Überwachen Sie aktive Verbindungen, gepoolte Verbindungen und andere Treibermetriken. |
| Ereignisquellenverfolgung aktivieren | Erfassen Sie detaillierte Fahrerereignisse zur Diagnose. |
| Datenverfolgung | Verfolgen Sie ADO.NET-Operationen und Datenzugriff. |
| Leitfaden zur Problembehandlung bei SqlClient | Diagnostiziere häufige Verbindungs- und Treiberprobleme. |
| Abfragebenachrichtigungen | Erhalten Sie Benachrichtigungen, wenn sich die Anfrageergebnisse ändern. |
SQL Server Funktionen
| Artikel | Description |
|---|---|
| SQL Server-Features und ADO.NET | Durchstöbern Sie SQL Server-spezifische Funktionen, die über SqlClient verfügbar sind. |
| Lokale Datenbank | Verbinden Sie sich mit SQL Server Express LocalDB-Instanzen. |
| Datenermittlung und -klassifizierung | Lesen Sie Metadaten zur Sensitivitätsklassifikation aus Ergebnissätzen. |
Referenz und Ressourcen
| Artikel | Description |
|---|---|
| Microsoft. Data.SqlClient API-Referenz | Durchsuchen Sie die .NET API-Referenz für den Treiber. |
| AppContext-Schalter | Konfigurieren Sie Kompatibilität und Sicherheitsverhalten. |
| Weitere Informationen zu SqlClient finden Sie | Finden Sie Quellcode, Support und Community-Ressourcen. |