打开SQL连接时出现算术溢出异常

时间:2015-09-16 12:49:20

标签: c# sql-server windows-8.1 sqlconnection

打开与底层SQL数据库的SQL连接时,我非常奇怪ArithmeticOverflowException(下面包含堆栈跟踪)。使用哪个版本的服务器并没有什么区别(我已经验证了MS SQL 2005/2008/2012/2014),错误仍然是相同的。安装了Windows Update的所有最新更新和修补程序。操作系统是Windows 8.1 / 10(两个系统都相同)。服务器在本地安装,并通过用户和密码建立连接。验证连接超时的范围为15到1000秒。

最令人惊讶的是应用程序工作正常,并与服务器正常通信,执行许多不同的查询,但突然发生此异常。我注意到这个异常在一些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()

6 个答案:

答案 0 :(得分:20)

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

  1. 我停止了服务LavasoftTcpService(来自services.msc)
  2. 我从程序和功能中卸载了WebCompanion。
  3. 上面提到的两个dll(LavasoftTcpService.dll和LavasoftTcpService64.dll在C:\ Windows \ System32和C:\ Windows \ SysWOW64中)仍然存在。我改名了,问题消失了。
  4. 在这些步骤之前,我尝试仅更改dll名称,并且解决localhost存在问题:而不是127.0.0.1系统正在寻找0.0.0.0。 Ping给了我一条错误消息“Ping请求找不到主机localhost。请检查名称并重试”

    3个步骤解决了这个问题。

答案 1 :(得分:11)

我们遇到了同样的问题,它是由LavasoftTcpService64.dll引起的。摆脱这个,而不是easy,解决了这个问题。检查以下文件夹是否存在:C:\WindowsC:\Windows\System32C:\Windows\SysWOW64

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

答案 2 :(得分:3)

我确认罪魁祸首是Lavasoft Ad-Aware或WebCompanion。调用SqlConnection.Open()时抛出System.OverflowException。仅限LocalDB。

有趣的是,如果您的应用是单实例应用,则会发生崩溃,否则会随机发生。

解决方案就是厄秀拉所说的。

答案 3 :(得分:2)

我遇到了阻止安装Azure存储模拟器的相同问题,即AzureStorageEmulator.exe启动时产生了类似的堆栈跟踪和异常。我可以初始化模拟器但不能启动它。删除Lavasoft DLL并重置winsock堆栈就可以了。所以对我有用,同样归功于Nguyen Quy Hy和这篇文章。

答案 4 :(得分:2)

我在通过entityframework创建用户时遇到了同样的问题,我找到了解决方案并通过执行以下步骤解决了问题

  1. 从服务中停止LavasoftTcpService64服务 和
  2. 从程序和功能中卸载web-companion,它开始工作 如果问题仍然存在,重启机器希望它会有所帮助。

答案 5 :(得分:1)

我自己刚遇到这个错误,here的选项#2帮助了我。

  
      
  1. 请通过右键单击命令提示符启动命令提示符,然后选择以管理员身份运行。

  2.   
  3. 输入此命令以重置网络适配器(以Enter键结束):
      netsh winsock重置

  4.   
  5. 重新启动计算机。

  6.   
  7. 请删除这两个文件:
      C:\ WINDOWS \ SYSTEM32 \ LavasoftTcpService64.dll   C:\ WINDOWS \ SysWOW64 \ LavasoftTcpService.dll(仅适用于64位Windows)

  8.   

我重命名了文件而不是删除。