问题描述
环境:VS2010,ACCESS2010,WIN7问题:用C#开放一个软件,两个功能,一个是ACCESS数据库访问,一个是用openFileDialog对话框选取文件。在软件运行时,如果先执行openFileDialog,则没有问题,数据库访问正常,以后再执行openFileDialog也没问题,但是,如果先执行数据库访问,再执行openFileDialog时,在OpenFileDialog1.ShowDialog(this)这句就会出错,或者文件浏览对话框无响应。报错信息是:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。OpenFileDialogopenFileDialog1=newOpenFileDialog();openFileDialog1.InitialDirectory=Application.StartupPath;if(OpenFileDialog1.ShowDialog(this)==DialogResult.OK){textBox1.Text=OpenFileDialog1.FileName;}代码也很简单,这个问题已经折磨了我很久了,请大家帮忙解决下。在网上也搜了半天,也有人遇到了同样的问题,但没有发现有效的解决方案。
解决方案
解决方案二:
up顶一下,期待牛人
解决方案三:
我连的sql2008我试了下没有问题啊你的代码OpenFileDialogopenFileDialog1=newOpenFileDialog();openFileDialog1.InitialDirectory=Application.StartupPath;if(OpenFileDialog1.ShowDialog(this)==DialogResult.OK){textBox1.Text=OpenFileDialog1.FileName;}OpenFileDialog1中首字母应该是小写openFileDialog1
解决方案四:
if(OpenFileDialog1.ShowDialog(this)==DialogResult.OK)==》if(openFileDialog1.ShowDialog(this)==DialogResult.OK)openFileDialog1是变量
解决方案五:
没有大小写问题,为了清爽,重新写一下,如果是大小写就简单多了另外,我记得之前连过MySQL,Oracle都没有问题,就这次连Access出这个问题环境:VS2010,ACCESS2010,WIN7问题:用C#开放一个软件,两个功能,一个是ACCESS数据库访问,一个是用openFileDialog对话框选取文件。在软件运行时,如果先执行openFileDialog,则没有问题,数据库访问正常,以后再执行openFileDialog也没问题,但是,如果先执行数据库访问,再执行openFileDialog时,在ShowDialog(this)这句就会出错,或者文件浏览对话框无响应。报错信息是:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。OpenFileDialogdlg=newOpenFileDialog();dlg.InitialDirectory=Application.StartupPath;if(dlg.ShowDialog(this)==DialogResult.OK){textBox1.Text=dlg.FileName;}代码也很简单,这个问题已经折磨了我很久了,请大家帮忙解决下。在网上也搜了半天,也有人遇到了同样的问题,但没有发现有效的解决方案。
解决方案六:
using(OpenFileDialogdlgText=newOpenFileDialog()){dlgText.Filter=@"(*.txt)|*.txt";if(dlgText.ShowDialog()==DialogResult.OK){if(File.Exists(dlgText.FileName)){StreamReaderrStream=newStreamReader(dlgText.FileName,System.Text.Encoding.Default);strings=default(string);this.textBox1.Text="";while((s=rStream.ReadLine())!=null){this.textBox1.Text+=s;}rStream.Close();}}}
解决方案七:
为了让大家更直观的看出问题,我做了一个工程,大家帮忙看看,只要顺序点三次以上访问数据库和浏览就会出问题尝试读取或写入受保护的内存。这通常指示其他内存已损坏。帮忙看看应该能够下载
解决方案八:
前两次是正常的第三次就会报错
解决方案九:
我测试了没有问题环境win8VS2013
解决方案十:
引用8楼bujanbusan的回复:
我测试了没有问题环境win8VS2013
上图证明
解决方案十一:
为什么我的会出错?在WIN7+VS2005也测试了,也有问题。先点访问数据库,交叉点几次就报错
解决方案十二:
还有,要先点访问数据库,如果先点浏览文件,以后就没有问题。先点访问数据库,再点浏览文件,交叉几次就出错了
解决方案十三:
没问题呀,VS2008下+WIN7正常。
解决方案十四:
这个论坛怎么这么不好用,传个图片一晚上传不上来,太崩溃了。楼上几位,多谢了,不知道你们测试的时候,多点几次会报错吗?要先点访问数据库,后点浏览文件,多点几次。。我测试了一下,基本上点十几次肯定会报错,图片发不上来。。。。麻烦再看看,再帮我测测我的这个问题和下面几个很类似,只是没有从他们的帖子里面找到有效的解决方案http://bbs.csdn.net/topics/390358491https://social.msdn.microsoft.com/Forums/zh-CN/c58d1135-fe6f-4f53-8263-b8fa6e8e3747/oledbaccessopenfiledialog
解决方案十五:
VS补丁打了没?
解决方案:
为什么非要show(this)直接show不就完了
解决方案:
show也一样,也出错。装的是VS2010旗舰版,没有打补丁。大家继续帮我看看啊。。。
解决方案:
引用14楼wyd1520的回复:
VS补丁打了没?
您试我的那个工程没,是不是也报错?
解决方案:
数据库打开后没关闭吧,被占用了!
解决方案:
已经用conn.Close();conn.Dispose();关闭了
解决方案:
实在不行试试重装access吧
解决方案:
重装还是不行啊。。。这是为什么呢??难道大家这么用都不会出错?
解决方案:
继续顶,需求解决问题的良方
解决方案:
我也遇到过这个问题。你打开的文件或数据库还处于打开状态或者没有完全退出。
解决方案:
如果报错不报错跟执行的先后有关系,那么100%是你代码逻辑有问题你的OpenFileDialog的作用是选取Access文件吗??
解决方案:
哥来给你解决,最近我也遇到这个问题,纠结了2天了,今天总算找到了~"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:DbTestTest.accdb;OLEDBServices=-1"在连接后面加上一个这个(OLEDBServices=-1)还是看的歪果仁的~http://www.codeproject.com/Answers/275226/OpenFileDialog-plus-OleDbConnection-equals-AccessV#answer8这个8楼~