System.AccessViolationException”类型的未经处理的错误在 System.Data.dll 中发生
System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生
错误背景:
操作系统:编程环境:VS2013; 语言:VB.net; 数据库:SQLserver2008
做数据库连接时,发生的错误:
错误提示为:
说明:用VB.net连接SQLServer数据库
第一种情况:
连接字符串为“Server=(Local);Database=charge_sys;UserID = sa;Password=123456”时,连接没问题;
第二种情况:
当把“ Server=(Local)”换为 “ Server=192.168.24.123 ”,即把local换为数据库服务器IP地址时,连接不成功,出现如上错误(PS:其他人的机器上就可以)。
第一种情况的代码:
Public Class UserDAO Public connStr As String = "Server=(Local);Database=charge_sys;User ID = sa;Password=123456" Public Function UserLogin(ByVal userName As String, ByVal password As String) As Boolean <span style="white-space:pre"> </span> Dim conn As New SqlConnection(connStr) Dim dbcmd As New SqlCommand Dim reader As SqlDataReader <span style="white-space:pre"> </span> Dim sqlStr As String = "select * from User_Info where userID=@userName and PWD=@password" '与数据库建立连接 conn.Open() '操作数据库 dbcmd = New SqlCommand(sqlStr, conn) dbcmd.Parameters.Add(New SqlParameter("@userName", userName)) dbcmd.Parameters.Add(New SqlParameter("@password", password)) reader = dbcmd.ExecuteReader If reader.Read Then Return True Else Return False End If '关闭与数据库的连接 conn.Close() End Function End Class第二种情况的代码
Public Class UserDAO Public connStr As String = "Server=192.168.24.123;Database=charge_sys;User ID = sa;Password=123456" Public Function UserLogin(ByVal userName As String, ByVal password As String) As Boolean <span> </span> Dim conn As New SqlConnection(connStr) Dim dbcmd As New SqlCommand Dim reader As SqlDataReader <span> </span> Dim sqlStr As String = "select * from User_Info where userID=@userName and PWD=@password" '与数据库建立连接 conn.Open() '操作数据库 dbcmd = New SqlCommand(sqlStr, conn) dbcmd.Parameters.Add(New SqlParameter("@userName", userName)) dbcmd.Parameters.Add(New SqlParameter("@password", password)) reader = dbcmd.ExecuteReader If reader.Read Then Return True Else Return False End If '关闭与数据库的连接 conn.Close() End Function End Class两种代码的不同之处仅仅在于数据库连接字符串中的Server值不同。
解决方法:
第一种方法:
重置winsock,我的系统为Win7 64位旗舰版,用管理员身份运行:netsh winsock reset ,重启,得到解决。其他系统重置方法或者出现问题,可参考百度百科《netsh
winsock reset》。
第一种方法:
更新.NET Framework。
在VisualStudio的反馈中心找到了解决方法:After
installing VS 2013 unable to add data connections? ,在这个帖子下面有这样一句评论:
在VS中看了一下.NET Framework的版本:
于是去下载了最新版本的.NET Framework4.5.2(点击跳到下载链接),安装之后上述问题“ ‘System.AccessViolationException’
类型的未经处理的异常在 System.Data.dll 中发生” 得到完美解决。
总结:
发生此问题“ ‘System.AccessViolationException’ 类型的未经处理的异常在 System.Data.dll 中发生”,可能是安装了VS2013后对系统中的winsock接口产生影响,因此第一种方法重置winsock可以解决
;微软最近几天刚发布的.NET
Framework4.5.2也彻底解决了这个问题,因此升级也是个不错的选择
。
发生此类问题肯定还有其他原因和解决方案,如果您还有所补充,欢迎您给我回复,互相学习,共同进步。
- 6楼xdd199105053小时前
- 升级是个好办法,是不是升级之后就不会遇到这个问题了?
- Re: huyuyang66883小时前
- 回复xdd19910505nYES
- 5楼u010539352昨天 21:49
- 原来是这样的,还没有出现过这种情况呢
- Re: huyuyang66884小时前
- 回复u010539352n你这一路走得太顺利了啊笑……
- 4楼wangdan199112昨天 08:55
- 这个问题虽然没遇到过,不过这真是比细心,不将就的精神
- Re: huyuyang6688昨天 10:13
- 回复wangdan199112n你们怎么都遇不到啊……RP原因吗?哈哈
- 3楼u010929604昨天 21:29
- 其实这个问题的解决办法我早就写在博客里了,只是至今还在草稿箱 被你抢了先!
- Re: huyuyang6688昨天 08:19
- 回复u010929604n为什么不分享出来呢?
- 2楼lfmilaoshi昨天 19:24
- 在犯错中成长,不是为了犯错,而是为了以后做对。而在“对”的教育中长大,我们仍然避免不了从犯错开始。n在这个层次上,还是要自己摔跤的好。就像是学习骑车,别人是替代不了的。遇到的困难挫折...真的...是上天为了你的成长而馈赠的财富
- Re: huyuyang6688昨天 19:25
- 回复lfmilaoshin米老师说得对,小时候我学骑自行车的时候,要不是我哥把我扶到大坡上就撒手,我还学不会呢……
- 1楼u010850027昨天 17:30
- 小胡子叔叔,这个问题,我也遇见了,但是却没有想到过要写一篇博客,哎,那我就站在你的肩膀上吧,学习了,那为什么local加上括号和不加括号也有这么大的区别呢?
- Re: huyuyang6688昨天 17:38
- 回复u010850027n(local)表示本地服务器的意思,跟127.0.0.1一样;nn而写网络IP地址(比如192.168.24.178)就不一样了,还有服务器名称(比如flower),都相当于在网络中的服务器。