2015-09-16 43 views
12

当打开与底层SQL数据库的SQL连接(下面的堆栈跟踪)时,我非常奇怪ArithmeticOverflowException。使用哪个版本的服务器并没有什么不同(我已经验证了MS SQL 2005/2008/2012/2014),但错误仍然相同。安装了Windows Update中的所有最新更新和修补程序。操作系统是Windows 8.1/10(两个系统都是一样的)。服务器安装在本地,并通过用户和密码进行连接。连接超时在15至1000秒范围内验证。打开SQL连接时出现算术溢出异常

最令人惊讶的是应用程序工作得很好,并正确地与服务器通信,执行许多不同的查询,但突然发生此异常。我注意到这个异常开始显示后,一些Windows更新(不知道哪一个)。

我已经研究过的.NET代码,但不知道什么原因会导致算术溢出异常有...

- 堆栈跟踪 -

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:\WindowsC:\Windows\System32C:\Windows\SysWOW64

为了找到根本原因,信用转到Nguyen Quy Hy

+2

还有其他的情况,像这样[SO问题](http://stackoverflow.com/questions/25836198/cant-open-sqlconnection-within-nunit-test)是由不同的问题引起的。 –

2

我遇到了阻止安装Azure存储模拟器的相同问题,即AzureStorageEmulator.exe开始生成类似的堆栈跟踪和异常。我可以启动模拟器,但不能启动它。去掉Lavasoft dll并重新设置winsock栈确实有效。所以为我工作,并同样信贷Nguyen Quy Hy和这个职位。

20

我有同样的问题。 Lavasoft也是一个原因。 我检查了程序和功能,如果有任何Lavasoft程序,我惊讶地发现应用程序称为Lavasoft的WebCompanion。我还发现了一个正在运行的服务LavasoftTcpService。

  1. 我停下来(从Services.msc)中的服务LavasoftTcpService
  2. 我卸载WebCompanion从程序和功能。
  3. 上面提到的两个dll(C:\ Windows \ System32和C:\ Windows \ SysWOW64中的LavasoftTcpService.dll和LavasoftTcpService64.dll)仍然存在。我改变了他们的名字,并消除了一个问题。

在这些步骤之前,我试图只更改dlls名称,并且解决localhost时出现问题:而不是127.0.0.1系统正在寻找0.0.0.0。 Ping给我一个错误信息“Ping请求找不到主机本地主机,请检查名称并重试”

3步骤解决了问题。

+0

我应用了这些步骤,并且我一直在检查几天,看起来它有帮助。这个问题从那时起并没有发生。也许它应该抱怨Lavasoft或其他... – Bronek

+0

谢谢你,我真的无法理解我的同事sql服务器发生了什么,任何来自C#程序打开连接的调用给了这个荒谬的溢出错误SQL客户端。有人应该向Lavasoft发送消息。 –

+0

太棒了!谢谢你救了我的命! –

3

我确认罪魁祸首是Lavasoft Ad-Aware或WebCompanion。调用SqlConnection.Open()时引发System.OverflowException。只有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. 停止LavasoftTcpService64服务和
  2. 卸载从程序网络伴侣和功能,并开始工作 万一如果问题仍然存在重新启动你的机器希望它会有所帮助。