2015-09-16 3 views
12

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

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

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

- СТЕК 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() 
+0

Я полагаю, что вы не можете последовательно воспроизводить это? Это всего лишь одно приложение или несколько? –

+0

есть ли «проверенное» целочисленное добавление в любом месте вашего кода? можете ли вы опубликовать полное исключение? – user1666620

+0

@ Dan Field - это время от времени воспроизводится и даже довольно часто - не уверен, при каких условиях, поскольку это исключение произошло на некоторых машинах моего клиента. Таким образом, я не могу сам отлаживать код:/И точно такая же проблема у меня в трех разных приложениях (трассировка стека такая же). –

ответ

10

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

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

+2

Есть и другие случаи, например [SO question] (http://stackoverflow.com/questions/25836198/cant-open-sqlconnection-within-nunit-test), вызванные другой проблемой. –

2

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

20

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

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

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

3 шага решили проблему.

+0

Я применил шаги, и я проверял пару дней, и, похоже, это помогло. С этого момента проблема не возникла. Может быть, он должен пожаловаться на Lavasoft или что-то в этом роде ... – Bronek

+0

Спасибо за это, я действительно не смог понять, что происходит с моим сервером sql-сервера, любой вызов Open connection из программы C# дал эту абсурдную ошибку переполнения SQL-клиент. Кто-то должен отправить сообщение в Lavasoft. –

+0

отлично! спасибо, что спасли мою жизнь! –

3

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

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

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

1

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

  1. Пожалуйста, запустите командную строку с правами администратора, щелкнув правой кнопкой мыши и выберите Запуск от имени администратора.

  2. Введите эту команду, чтобы установить сетевой адаптер (конец с Введите ключ):
    Netsh Winsock сбросить

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

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

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

2

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

    сервис
  1. Stop LavasoftTcpService64 от услуг и
  2. Удаление веб-компаньоном из программы и функции, и он начал работать в случае, если проблема все еще существует. Перезагрузите машину, надеюсь, это поможет.
Смежные вопросы