关于VS2013,sql连接与EF访问远程sql数据库,内存访问非法。

在使用Visual Studio 2013和.NET Framework 4.5.1进行SQL数据库访问时,遇到'AccessViolationException'异常。问题源于某些非IFS Bsp或Lsp干扰Winsock通信,导致内存访问非法。解决方案包括执行'netsh winsock reset catalog'命令或卸载引起冲突的非IFS Bsp/Lsp。若问题由.NET Framework 4.5.1引起,可考虑卸载该框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



问题描述:

应用程序崩溃,或安装 Visual Studio 2013年或.NET Framework 4.5.1 后,使用 System.Data.SqlClient,则会出现"AccessViolationException"异常

EF使用System.Data.SqlClient也会报内存访问非法异常。

异常堆栈4种,仅列一种:

<Module>.SNIAddProvider(SNI_Conn*, ProviderNum, Void*)

SNINativeMethodWrapper.SNIAddProvider(System.Runtime.InteropServices.SafeHandle, ProviderEnum, UInt32 ByRef)

System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean, Boolean, Boolean ByRef)

System.Data.SqlClient.TdsParser.Connect(System.Data.SqlClient.ServerInfo, System.Data.SqlClient.SqlInternalConnectionTds, Boolean, Int64, Boolean, Boolean, Boolean)

System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(System.Data.SqlClient.ServerInfo, System.String, Boolean, System.Data.ProviderBase.TimeoutTimer, System.Data.SqlClient.SqlConnection)

System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(System.Data.SqlClient.ServerInfo, System.String, Boolean, System.Data.SqlClient.SqlConnection

解决方法:

netsh winsock reset catalog

微软的解决方法:


若要变通解决此问题,请尝试以下方法:

  • 卸载非 IFS Bsp 或 Lsp。若要执行此操作,请使用下列方法之一:
    • 卸载在系统上安装了非 IFS BSP 或 LSP的应用程序。
    • 在命令提示符处运行以下命令:

      netsh winsock remove provider <id>

      注意在此命令中,"目录条目 Id"值为非-IFS LSP 时运行下面的命令显示的 <id> 表示:

      netsh winsock show catalog
  • 卸载.NET Framework 4.5.1。

    注意如果在系统上安装了 Visual Studio 2013,此选项不适用。

原理:

由于一些非-IFS Winsock 基础服务提供商 (Bsp) 或分层服务提供程序 (Lsp) 安装在系统上截取和更改的传入和传出网络通信,则会出现此问题。因此,当应用程序连接到 SQL Server 时,这些 Bsp 或 Lsp 干扰 Winsock 通讯,造成内存访问非法。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值