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也彻底解决了这个问题,因此升级也是个不错的选择。

发生此类问题肯定还有其他原因和解决方案,如果您还有所补充,欢迎您给我回复,互相学习,共同进步。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值