打开与底层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()
答案 0 :(得分:20)
我遇到了同样的问题。 Lavasoft也是一个原因。 如果有任何Lavasoft程序,我检查了程序和功能,我很惊讶地找到了名为Lavasoft的WebCompanion的应用程序。我还找到了一个正在运行的服务LavasoftTcpService。
在这些步骤之前,我尝试仅更改dll名称,并且解决localhost存在问题:而不是127.0.0.1系统正在寻找0.0.0.0。 Ping给了我一条错误消息“Ping请求找不到主机localhost。请检查名称并重试”
3个步骤解决了这个问题。
答案 1 :(得分:11)
我们遇到了同样的问题,它是由LavasoftTcpService64.dll
引起的。摆脱这个,而不是easy,解决了这个问题。检查以下文件夹是否存在:C:\Windows
,C:\Windows\System32
和C:\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创建用户时遇到了同样的问题,我找到了解决方案并通过执行以下步骤解决了问题
答案 5 :(得分:1)
我自己刚遇到这个错误,here的选项#2帮助了我。
请通过右键单击命令提示符启动命令提示符,然后选择以管理员身份运行。
输入此命令以重置网络适配器(以Enter键结束):
netsh winsock重置重新启动计算机。
- 醇>
请删除这两个文件:
C:\ WINDOWS \ SYSTEM32 \ LavasoftTcpService64.dll C:\ WINDOWS \ SysWOW64 \ LavasoftTcpService.dll(仅适用于64位Windows)
我重命名了文件而不是删除。