Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Undantag vid anslutning till SQL Server
Det finns olika orsaker till varför anslutningen inte kan upprättas. Här följer några felsökningstips som kan användas som en guide för att analysera och lösa många av problemen.
Det går inte att läsa in det interna SNI-biblioteket (Server Network Interface)
Problem i .NET Framework-program
Stacktrace har observerats:
TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
DllNotFoundException: Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x64.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
DllNotFoundException: Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x86.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
SNI är det interna C++-biblioteket som SqlClient är beroende av för olika nätverksåtgärder när de körs i Windows. I .NET Framework-program som har skapats med MSBuild Project SDK hanteras inte interna DLL:er med återställningskommandon. Därför ingår en .targets fil i Microsoft.Data.SqlClient.SNI NuGet-paketet som definierar nödvändiga "Kopiera"-åtgärder.
Den inkluderade .targets filen refereras automatiskt när ett direkt beroende görs till Microsoft.Data.SqlClient biblioteket. I scenarier där en transitiv (indirekt) referens görs bör den här .targets filen refereras manuellt för att säkerställa att "Kopiera"-åtgärder kan köras vid behov.
Rekommenderad lösning: Kontrollera att .targets filen refereras till i programmets projektfil för att säkerställa att "Kopiera"-åtgärder körs. Ett exempel på redigeringar av en projektfil finns i det här relaterade GitHub-problemet.
Dessa mål täcker endast Microsofts välkända och vanliga mål. Om ett externt verktyg eller program definierar anpassade mål för att kopiera binärfiler måste nya mål definieras av verktygsunderhållarna för att säkerställa att interna SNI-DLL:er kopieras tillsammans med Microsoft.Data.SqlClient.dll binärfilerna och är tillgängliga när klientprogram körs.
Problem i .NET Core-program
Stacktrace har observerats:
System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.TdsParser' threw an exception.
---> System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
---> System.DllNotFoundException: Unable to load shared library 'Microsoft.Data.SqlClient.SNI.dll' or one of its dependencies.
Note
Det här felet kan endast inträffa i Windows-program. Om det inträffar i en Unix-miljö måste du se till att ditt program är skapat för att rikta en Unix-körning på rätt sätt och inte för Windows.
SNI är det interna C++-biblioteket som SqlClient är beroende av för olika nätverksåtgärder när de körs i Windows.
Microsoft.Data.SqlClient hanterar inte inläsning/avlastning av det här biblioteket i .NET Core.
Rekommenderad lösning: Se till att "Kör"-behörigheter beviljas i filsystemet där interna körningsbibliotek läses in i .NET Core-processen. Om det inte löser problemet kan du lämna in ett problem på dotnet/runtime-lagringsplatsen för ytterligare support.
Interna SNI-fel (pdb hittades inte)
Stacktrace har observerats:
An assembly specified in the application dependencies manifest (sql2csv.deps.json) was not found:
package: 'Microsoft.Data.SqlClient.SNI.runtime', version: '2.0.0'
path: 'runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.pdb'
Rekommenderad lösning: Se till att klientprogrammet refererar till den lägsta v2.1.0-versionen av Microsoft.Data.SqlClient-paketet. När du använder EF Core lägger du till en referens till den här paketversionen av Microsoft.Data.SqlClient direkt för att åsidosätta beroendet.
Fel vid värdnamnsupplösning
Stacktrace har observerats:
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 0 - No such host is known.)
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 35 - An internal exception was caught)
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 35 - An internal exception was caught)
---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (00000005, 0xFFFDFFFF): Name does not resolve
Möjliga orsaker
TCP/Named Pipes Protocol är inte aktiverat på SQL Server
Rekommenderad lösning: Aktivera TCP/Named Pipes Protocol på SQL Server-instansen från SQL Server Configuration Manager-konsolen.
Värdnamnet är inte känt
Rekommenderad lösning: Kontrollera att värdnamnet matchar serverns IP-adress från klienten där anslutningen initieras.
Fel i inloggningsfas
Stacktraces observerade:
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake.
(provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed)
System.IO.EndOfStreamException: End of stream reached
A connection was successfully established with the server, but then an error occurred during the login process.
(provider: SSL Provider, error: 0 - The target principal name is incorrect.)
Microsoft.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections.
The duration spent while attempting to connect to this server was - [Pre-Login] initialization=837; handshake=394; [Login] initialization=3; authentication=15; [Post-Login] complete=1027;
---> System.ComponentModel.Win32Exception (258): Unknown error 258
at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)
Möjliga orsaker och lösningar
SQL Server stöder inte TLS 1.2
Det här felet uppstår vanligtvis i klientmiljöer som docker-avbildningscontainrar, Unix-klienter eller Windows-klienter där TLS 1.2 är det lägsta TLS-protokoll som stöds.
Rekommenderad lösning: Installera de senaste uppdateringarna på versioner av SQL Server som stöds och se till att TLS 1.2-protokollet är aktiverat på servern.
Note
Visa SqlClient-drivrutinsstödslivscykeln för listan över SQL Server-versioner som stöds med olika versioner av
Microsoft.Data.SqlClient.Osäker lösning: Konfigurera TLS/SSL-inställningar i docker-avbildnings-/klientmiljön för att ansluta till TLS 1.0.
MinProtocol = TLSv1 CipherString = DEFAULT@SECLEVEL=1Note
När du ansluter med
Microsoft.Data.SqlClientv2.0+ från en Windows/Linux-miljö med TLS 1.0 eller TLS 1.1 utlöses ett säkerhetsvarningsmeddelande om SQL Server-målet och klienten inte kan förhandla om minst TLS version 1.2 när anslutningen upprättas:Security Warning: The negotiated <TLS1.0 | TLS1.1> is an insecure protocol and is supported for backward compatibility only. The recommended protocol version is TLS 1.2 and later.SQL Server-upprätthållen kryptering
Om målservern är en Azure SQL-instans eller en lokal SQL Server med egenskapen "Force Encryption" aktiverad, upprättas en krypterad anslutning som klienten måste upprätta förtroende för med servern.
Rekommenderad lösning: Det finns två tillgängliga alternativ för att åtgärda problemet:
- Installera mål-SQL Server-TLS-certifikatet i klientmiljön. Den verifieras om kryptering behövs.
- (Mindre säkert) Ange egenskapen "TrustServerCertificate=true" i anslutningssträngen.
Osäker lösning: Inaktivera inställningen "Tvinga kryptering" på SQL Server.
TLS-certifikat som inte är signerade med SHA-256 eller senare.
Rekommenderad lösning: Generera ett nytt TLS-certifikat för servern vars hash är signerad med minst SHA-256-hashalgoritmen.
Strikt begränsade chiffersviter i Linux med .NET 5+
.NET 5 introducerade en icke-bakåtkompatibel ändring för Linux-klienter, där en strikt begränsad lista över tillåtna chiffersviter används som standard. Du kan behöva expandera listan med standard chifferpaket för att acceptera äldre klienter (eller kontakta äldre servrar) genom att antingen ange ett
CipherSuitePolicyvärde eller ändra OpenSSL-konfigurationsfilen .Läs mer om standard-TLS-chiffersviter för .NET på Linux för rekommenderad åtgärd.
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.) ---> System.ComponentModel.Win32Exception (0x80090325): The certificate chain was issued by an authority that is not trusted.SQL Server-upprätthållen kryptering
Om målservern är en lokal SQL Server med egenskapen "Force Encryption" aktiverad och ett självsignerat certifikat upprättas en krypterad anslutning som klienten måste upprätta förtroende för med servern.
Rekommenderad lösning: Det finns två tillgängliga alternativ för att åtgärda problemet:
- Installera mål-SQL Server-TLS-certifikatet i klientmiljön. Den verifieras om kryptering behövs.
- (Mindre säkert) Ange egenskapen "TrustServerCertificate=true" i anslutningssträngen.
Osäker lösning: Inaktivera inställningen "Tvinga kryptering" på SQL Server.
Fel vid överbelastning i anslutningspoolen
Observerat stackspår:
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.
This may have occurred because all pooled connections were in use and max pool size was reached.
Möjliga orsaker och lösningar
Klientprogrammet öppnar fler anslutningar än vad anslutningspoolen kan hålla aktiv vid en viss tidpunkt.
Rekommenderad lösning: Konfigurera anslutningsegenskapen "Maximal poolstorlek" till ett högre värde och stäng oanvända anslutningar i tid.
Kontakta supporten
Om den här guiden inte löser dina anslutningsproblem kan du se befintliga problem på dotnet/sqlclient-lagringsplatsen och öppna ett nytt problem om det behövs.