Ошибка подключения SQL: System.Data.SqlClient.SqlException(0x80131904)

Я вижу это в нескольких ситуациях, и это прерывисто в нашем веб-приложении, подключающемся к SQL 2008 R2. Пользователи сталкиваются с точкой в ​​точке с двумя точками и видят, что это включено и выключено. Думал, что это проблемы с пропускной способностью, пока я не начал видеть его на терминальных серверах, которые находятся на том же базовом коммутаторе, что и этот SQL-сервер. Я проверил, что удаленное подключение включено, порт 1433 правильно настроен в конфигурации для TCP/IP, и единственное, что я вижу, может быть причиной того, что параметр тайм-аута установлен на 100000 в удаленных подключениях, а не неограничен.

Ошибка

System.Data.SqlClient.SqlException (0x80131904): связанный с сетью или произошла ошибка конкретного экземпляра при установлении соединения с SQL Server. Сервер не найден или не был доступен. проверить что имя экземпляра верное и что SQL Server настроен на разрешить удаленные подключения. (поставщик: поставщик именованных труб, ошибка: 40 - Не удалось открыть соединение с SQL Server) --->

System.ComponentModel.Win32Exception (0x80004005): сетевой путь не найден at

System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection, Action`1 wrapCloseInAction) at
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at
System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo,
SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout,
Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean
integratedSecurity, Boolean withFailover) at
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo
serverInfo, String newPassword, SecureString newSecurePassword,
Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean
withFailover) at
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo
serverInfo, String newPassword, SecureString newSecurePassword,
Boolean redirectedUserInstance, SqlConnectionString connectionOptions,
SqlCredential credential, TimeoutTimer timeout) at
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer
timeout, SqlConnectionString connectionOptions, SqlCredential
credential, String newPassword, SecureString newSecurePassword,
Boolean redirectedUserInstance) at
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity
identity, SqlConnectionString connectionOptions, SqlCredential
credential, Object providerInfo, String newPassword, SecureString
newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString
userConnectionOptions, SessionData reconnectSessionData) at
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions
options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo,
DbConnectionPool pool, DbConnection owningConnection,
DbConnectionOptions userOptions) at
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool
pool, DbConnection owningObject, DbConnectionOptions options,
DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) at
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection
owningObject, DbConnectionOptions userOptions, DbConnectionInternal
oldConnection) at
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection
owningObject, DbConnectionOptions userOptions, DbConnectionInternal
oldConnection) at
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection
owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean
allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions
userOptions, DbConnectionInternal& connection) at
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection
owningObject, TaskCompletionSource`1 retry, DbConnectionOptions
userOptions, DbConnectionInternal& connection) at
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection
owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions
userOptions, DbConnectionInternal oldConnection, DbConnectionInternal&
connection) at
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection
outerConnection, DbConnectionFactory connectionFactory,
TaskCompletionSource`1 retry, DbConnectionOptions userOptions) at
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection
outerConnection, DbConnectionFactory connectionFactory,
TaskCompletionSource`1 retry, DbConnectionOptions userOptions) at
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1
retry) at
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1
retry) at System.Data.SqlClient.SqlConnection.Open() at
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.b__0()
at
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1
operation) at
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action
operation) at
System.Data.Entity.Core.EntityClient.EntityConnection.Open()
ClientConnectionId:00000000-0000-0000-0000-000000000000

Ответ 1

У меня была такая же проблема. перейдите в Sql Server Configuration management → Конфигурация сетевых конфигураций SQL Server для 'servername' и проверьте именованные каналы.

Ответ 2

У меня была такая же проблема.

Убедитесь, что в конфигурации SQL Server → Службы SQL Server → Агент SQL Server включен

Это решило мою проблему

Ответ 3

Проверьте эти шаги.

  • перейти к Sql Server Configuration management- > Сетевые конфигурации сервера SQL Server для 'servername' и проверить TCP/IP.
  • Откройте SSMS в запуске и убедитесь, что вы можете войти на сервер с использованием имени пользователя/пароля и/или с помощью проверки подлинности Windows.
  • повторите шаг 1 для конфигурации клиентского интерфейса SQL также

Ответ 5

Смотрите мой пост здесь

Как дела? У меня была такая же проблема, пока я пытался подключиться к MSSQL Server удаленно с помощью jdbc (dbeaver on debian).

Через некоторое время я узнал, что моя конфигурация брандмауэра не была правильно. Возможно, это может помочь вам!

Настроить брандмауэр, чтобы разрешить сетевой трафик, связанный с SQL   Сервера и службы SQL Server Browser.

     

В брандмауэре Windows необходимо настроить четыре исключения, чтобы разрешить доступ   на SQL Server:

     

Исключение порта для TCP-порта 1433. В мастере создания новых входящих сообщений   для создания исключения порта используйте следующую информацию:   Выберите Port Select TCP и укажите порт 1433 Разрешить подключение   Выберите все три профиля (Домен, Частный и Общественный) Назовите правило    "SQL-TCP 1433" Исключение порта для UDP-порта 1434. Нажмите "Новое правило"   снова и используйте следующую информацию для создания другого порта   Исключение: выберите "Порт" Выберите "UDP" и укажите порт 1434 "Разрешить   соединение Выберите все три профиля (Домен, Частный и Общественный) Имя   правило" SQL - UDP 1434 Исключение программы для sqlservr.exe.   Новое правило снова и используйте следующую информацию для создания программы   Исключение: выберите "Программа". Нажмите "Обзор", чтобы выбрать "sqlservr.exe".   это место: [C:\Program Files\Microsoft SQL   Сервер \MSSQL11.\MSSQL\Binn\sqlservr.exe], где    это имя вашего экземпляра SQL. Разрешить   соединение Выберите все три профиля (Домен, Частный и Общественный) Имя   правило SQL - sqlservr.exe Исключение программы для sqlbrowser.exe   Нажмите "Новое правило" еще раз и используйте следующую информацию для создания   другое исключение программы: выберите "Программа" Нажмите "Обзор", чтобы выбрать   sqlbrowser.exe в этом месте: [C:\Program Files\Microsoft SQL   Server\90\Shared\sqlbrowser.exe]. Разрешить подключение Выберите все   три профиля (домен, частный и открытый). Имя правила SQL -   sqlbrowser.exe

Источник: http://blog.citrix24.com/configure-sql-express-to-accept-remote-connections/

Ответ 6

Любой, у кого есть эта ошибка, особенно на Azure, попробуйте добавить "tcp:" к имени db-сервера в строке подключения вашего приложения. Это заставляет клиент sql связываться с db с помощью tcp. Я предполагаю, что соединение по умолчанию является UDP, и могут возникать проблемы с прерывистым подключением.