2015-09-16 23 views
12

ho ottenuto molto strano ArithmeticOverflowException quando si apre una connessione SQL al database SQL sottostante (stack trace riportato qui di seguito). Non fa differenza quale versione del server viene utilizzata (ho verificato MS SQL 2005/2008/2012/2014), l'errore è sempre lo stesso. Tutti gli aggiornamenti e le patch più recenti da Windows Update installati. Il sistema operativo è Windows 8.1/10 (lo stesso accade su entrambi i sistemi). Il server è installato localmente e la connessione viene effettuata tramite utente e password. Timeout della connessione verificato nell'intervallo da 15 a 1000 sec.eccezione di overflow aritmetico durante l'apertura di connessione SQL

La cosa più sorprendente è l'applicazione funziona bene, e comunica con il server corretto, l'esecuzione di molte varie query, ma improvvisamente si verifica questa eccezione. Ho notato che questa eccezione ha iniziato a comparire dopo un aggiornamento di Windows (non ho idea di quale).

Ho guardato nel codice .NET, ma non hanno alcuna idea di ciò che può causare l'eccezione di overflow aritmetico ci ...

- Analisi dello stack -

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

Non credo che sia possibile riprodurlo in modo coerente? È solo un'applicazione o più? –

+0

c'è un'aggiunta 'checked' in qualsiasi punto del tuo codice? puoi pubblicare l'eccezione completa per favore? – user1666620

+0

@Dan Field - È riproducibile di tanto in tanto e anche abbastanza spesso - non è sicuro in quali condizioni, poiché questa eccezione si è verificata su alcune delle macchine dei miei clienti. Quindi non posso eseguire il debug del codice da solo:/E esattamente lo stesso problema che ho in tre diverse applicazioni (la traccia dello stack è la stessa). –

risposta

10

abbiamo avuto lo stesso problema ed è stato causato da LavasoftTcpService64.dll. Eliminare questo, che non è quello easy, ha risolto il problema. Verificare la presenza delle seguenti cartelle: C:\Windows, C:\Windows\System32 e C:\Windows\SysWOW64.

Il credito va a Nguyen Quy Hy per trovare la causa principale.

+2

Ci sono anche altri casi, come questa [domanda SO] (http://stackoverflow.com/questions/25836198/cant-open-sqlconnection-within-nunit-test) che sono causati da un altro problema. –

2

Ho avuto lo stesso problema che ha impedito l'installazione di Azure Emulator cioè AzureStorageEmulator.exe iniziano a prodotto una simile traccia dello stack ed eccezione. Potrei avviare l'emulatore ma non avviarlo. La rimozione della dll di Lavasoft e la reimpostazione dello stack di winsock hanno funzionato. Così ha funzionato per me e allo stesso modo merito a Nguyen Quy Hy e questo post.

20

Ho avuto lo stesso problema. Anche Lavasoft era un motivo. Ho controllato in Programma e Funzionalità se c'è qualche programma Lavasoft, e sono stato sorpreso di trovare un'applicazione chiamata WebCompanion di Lavasoft. Ho anche trovato un servizio in esecuzione LavasoftTcpService.

  1. ho fermato il LavasoftTcpService di servizio (da services.msc)
  2. ho disinstallato WebCompanion dal Programma e Caratteristiche.
  3. due DLL (: \ Windows \ System32 e C: LavasoftTcpService.dll e LavasoftTcpService64.dll in C \ Windows \ SysWOW64) di cui sopra erano ancora lì. Ho cambiato il loro nome e un problema è scomparso.

Prima di questi passaggi, ho provato a modificare solo i nomi delle DLL e c'era un problema a risolvere localhost: invece di 127.0.0.1 il sistema cercava 0.0.0.0. Ping mi stava dando un messaggio di errore "richiesta Ping non riusciva a trovare localhost ospite. Si prega di verificare il nome e riprovare"

3 passi risolto il problema.

+0

Ho applicato i passaggi e ho controllato per un paio di giorni e sembra che sia stato d'aiuto. Il problema non si è verificato da quel momento. Forse dovrebbe essere lagnato a Lavasoft o qualcosa del genere ... – Bronek

+0

Grazie per questo, non ero davvero in grado di capire cosa stava succedendo al mio collega sql server, qualsiasi chiamata alla connessione Open da un programma C# ha dato questo errore di overflow assurdo su Client SQL. Qualcuno dovrebbe inviare un messaggio a Lavasoft. –

+0

fantastico! grazie mi hai salvato la vita! –

3

Confermo che il colpevole è Lavasoft Ad-Aware o WebCompanion. System.OverflowException viene generato quando si chiama SqlConnection.Open(). Solo con LocalDB.

È interessante notare che l'incidente si verifica sempre se la vostra applicazione è una singola applicazione esempio, altrimenti si verifica in modo casuale.

La soluzione è ciò che ha detto Ursula.

1

Ho appena riscontrato questo errore e l'opzione n. 2 di here mi ha aiutato.

  1. prega, avviare il prompt dei comandi come amministratore facendo clic destro e selezionare Esegui come amministratore.

  2. immettere il comando per reimpostare la scheda di rete (fine con il tasto Invio):
    netsh winsock ripristinare

  3. Riavviare il computer.

  4. prega, eliminare questi due file:
    C: \ WINDOWS \ system32 \ LavasoftTcpService64.dll C: \ WINDOWS \ SysWOW64 \ LavasoftTcpService.dll (solo per Windows a 64 bit)

Ho rinominato i file anziché eliminarli.

2

Ho avuto lo stesso problema durante la creazione utente attraverso EntityFramework e ho trovato la soluzione e risolvere il problema facendo seguenti operazioni

    servizio
  1. arresto LavasoftTcpService64 dai servizi e
  2. Disinstallare il web-compagno di programma e caratteristiche e ha iniziato a funzionare nel caso in cui il problema persiste riavviare la macchina spero che possa essere d'aiuto.