System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

之前也遇到过这样的问题,一直未解决,最后重新安装系统,终于解决了。

没想到1个月以后,又出现了这种情况,让我奔溃,这次决定一定要找出原因;

调试后发现, connection.Open();以后报错,System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏,网上搜了很多都没有作用。

然后我发现 连接本地数据库是好的,连接远程数据库是报错了,但是在sql server Management中是好的  

然后在VS的服务资源管理器中找到了问题,发现VS2010 ,只要一连接远程数据库就立马关闭掉了,VS2013则是好的,最后发现在关掉的瞬间,会弹出一个提示,经过几次反复截图,终于找到了关键:

 

provider SSLProvider error:0

在网上一搜,豁然开朗,解决方法如下:

1:使用OLEDB ,不再使用SQLClient可以解决;

2:这个最方便,在开始运行栏中 输入 CMD,然后以管理员身份运行:输入:netsh winsock reset 后,系统提示需要重启电脑,重启后解决!

 

 (windows键+R)

最后补充一下,这个命令的意思:

  netsh winsock reset命令,作用是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令来重置Winsock目录借以恢复网络。这个命令可以重新初始化网络环境,以解决由于软件冲突、病毒原因造成的参数错误问题。 netsh是一个能够通过命令行操作几乎所有网络相关设置的接口,比如设置IP,DNS,网卡,无线网络等,Winsock是系统内部目录,Winsock是Windows网络编程接口,winsock工作在应用层,它提供与底层传输协议无关的高层数据传输编程接口,reset是对Winsock的重置操作。当执行完winsock的命令重启计算机后,需要重新配置IP。

原文地址:https://www.cnblogs.com/ajunForNet/p/4137321.html