调用win32的对话框 的OpenFileDialog() 时,System.AccessViolationException: 尝试读取或写入受保护的内存 解决办法

6 篇文章 0 订阅

程序代码如下

        private void Button_Click(object sender, RoutedEventArgs e)
    {
        string fName = "";
        DataTable dt1 = new DataTable();
        //用于获取excel文件名
        Microsoft.Win32.OpenFileDialog open = new Microsoft.Win32.OpenFileDialog();
        //open.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls";
        if (open.ShowDialog() == true)
        {
            fName = open.FileName;
        }
        MessageBox.Show(fName);
        }

在运行时一直提示“System.AccessViolationException: 尝试读取或写入受保护的内存”,怎么修改代码都不行,最后终于找到问题,Button_Click是在子窗体的一个事件,子窗口调用Win32的OpenFileDialog时就会出错。
后来经过试验,每次调用完子窗体后再调用ShowDialg就会出错。
网上找相关异常资料,普遍建议是:netsh winsock reset,作用是重置 Winsock 目录。按照建议重置也不行。
经过代码一条条测试,只要打开的主窗口或子窗口中有数据库连接conn.open()操作,再打开ShowDialag()就会出错,用过conn再释放资源也不行,而页面初始化时有绑定数据库操作,却没有问题。

解决办法: “Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DbTest\Test.accdb; OLE DB Services=-1” ;

在数据库连接中加上(OLE DB Services=-1),打开文件就不会再提示 :未处理 accesViolatinException 尝试读取或写入受保护的内存

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值