Исключение арифметического переполнения при открытии SQL-соединения

У меня получилось очень странно ArithmeticOverflowException при открытии SQL-соединения с базой данных SQL (трассировка стека включена ниже). Не имеет значения, какая версия сервера используется (я проверил MS SQL 2005/2008/2012/2014), ошибка все тот же. Все новейшие обновления и исправления от Windows Update установлены. ОС - Windows 8.1/10 (то же самое происходит в обеих системах). Сервер устанавливается локально, а соединение выполняется через пользователя и пароль. Время ожидания подключения проверяется в диапазоне от 15 до 1000 секунд.

Самое удивительное, что приложение работает очень хорошо, и правильно связывается с сервером, выполняя множество различных запросов, но внезапно это исключение происходит. Я заметил, что это исключение появилось после некоторого обновления Windows (не знаю, какой из них).

Я просмотрел код .NET, но понятия не имею, что может вызвать исключение арифметического переполнения...

- STACK TRACE -

in SNIOpenSyncExWrapper(SNI_CLIENT_CONSUMER_INFO* , SNI_ConnWrapper** )
in SNINativeMethodWrapper.SNIOpenSyncEx(ConsumerInfo consumerInfo, String constring, IntPtr& pConn, Byte[] spnBuffer, Byte[] instanceName, Boolean fOverrideCache, Boolean fSync, Int32 timeout, Boolean fParallel)
in System.Data.SqlClient.SNIHandle..ctor(ConsumerInfo myInfo, String serverName, Byte[] spnBuffer, Boolean ignoreSniOpenTimeout, Int32 timeout, Byte[]& instanceName, Boolean flushCache, Boolean fSync, Boolean fParallel)
in System.Data.SqlClient.TdsParserStateObject.CreatePhysicalSNIHandle(String serverName, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Byte[]& instanceName, Byte[] spnBuffer, Boolean flushCache, Boolean async, Boolean fParallel)
in System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover)
in System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover)
in System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
in System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
in System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData)
in System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
in System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
in System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
in System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
in System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
in System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
in System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
in System.Data.SqlClient.SqlConnection.Open()

Ответ 1

У меня была та же проблема. Lavasoft также была причиной. Я проверил программу и функции, если есть какая-либо программа Lavasoft, и я с удивлением обнаружил приложение под названием WebCompanion от Lavasoft. Я также нашел запущенную службу LavasoftTcpService.

  • Я остановил службу LavasoftTcpService (из services.msc)
  • Я удалил WebCompanion из программы и функций.
  • Две вышеупомянутые dll (LavasoftTcpService.dll и LavasoftTcpService64.dll в C:\Windows\System32 и C:\Windows\SysWOW64) все еще были там. Я изменил их имя, и проблема исчезла.

До этих шагов я попытался изменить имена dlls и возникла проблема для решения localhost: вместо 127.0.0.1 система искала 0.0.0.0. Ping давал мне сообщение об ошибке "Запрос Ping не смог найти хост-адрес localhost. Пожалуйста, проверьте имя и повторите попытку"

3 этапа разрешили проблему.

Ответ 2

У нас была та же проблема, и она была вызвана LavasoftTcpService64.dll. Избавьтесь от этого, а это не то, что легко, исправлена ​​проблема. Проверьте наличие следующих папок: C:\Windows, C:\Windows\System32 и C:\Windows\SysWOW64.

Кредит отправляется Nguyen Quy Hy для поиска основной причины.

Ответ 3

Я подтверждаю, что виновником является Lavasoft Ad-Aware или WebCompanion. Исключение System.OverflowException вызывается при вызове SqlConnection.Open(). Только с LocalDB.

Интересно, что авария происходит всегда, если ваше приложение является единственным экземпляром приложения, иначе оно происходит случайным образом.

Решение - это то, что сказал Урсула.

Ответ 4

У меня была та же проблема, которая помешала установке Azure Storage Emulator, т.е. AzureStorageEmulator.exe запускает аналогичную трассировку и исключение стека. Я мог бы запустить эмулятор, но не запускать его. Снятие Lavasoft dll и сброс стека winsock сделали трюк. Так работал на меня, а также кредит Нгуен Куй Hy и этот пост.

Ответ 5

У меня была такая же проблема при создании пользователя через сущность, и я нашел решение и устранил проблему, выполнив следующие шаги.

  • Остановить службу LavasoftTcpService64 от служб и
  • Удалите веб-спутника из программы и функций, и он начал работать в случае, если проблема все еще существует, перезагрузите компьютер, надеюсь, что это поможет.

Ответ 6

Я только что столкнулся с этой ошибкой, и мне помог вариант № 2 из здесь.

  • Пожалуйста, запустите Command Prompt в качестве администратора, щелкнув его правой кнопкой мыши и выберите "Запуск от имени администратора".

  • Введите эту команду в reset сетевой адаптер (в конце с помощью клавиши Enter):
    netsh winsock reset

  • Перезагрузите компьютер.

  • Пожалуйста, удалите эти два файла:
    C:\WINDOWS\system32\LavasoftTcpService64.dll C:\WINDOWS\SysWOW64\LavasoftTcpService.dll(только для 64-разрядной Windows)

Я переименовал файлы вместо удаления.