今天在一台电脑上使用asp.net访问access,出现了
ole_connection.ServerVersion引发了System.InvalidOperationException;
下面是解决过程;
先看下异常的情况;
为了认识错误的根源,展开看更细节的异常情况;
此时连接字符串的两种写法都试过了;
conn_str = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='xxxx.mdb'";
conn_str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='xxxx.mdb'";
所以不是这个的问题;
参考此文;
http://wangbin840403.blog.163.com/blog/static/21271097201342310550841/
在注册表中查看Provider的访问权限;
搜索项;
看下12.0和4.0两个提供者都是存在的;
继续再搜Microsoft.Jet.OLEDB.4.0,下面这个也有Microsoft.Jet.OLEDB.4.0,但不是本项目使用的提供者;
看下Microsoft.Jet.OLEDB.4.0的访问权限;
添加Everyone的完全控制权限后如下;
对12.0也同样添加权限;
结果还是一样的错误;
是否本机不存在Microsoft.Jet.OLEDB.4.0的DLL呢;搜索下C盘,这货还是在的;
那么12.0使用的是哪个DLL呢?
如果没有12.0的提供者;根据网上资料可在
http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe
下载后安装即可;
现在连接字符串没问题;提供者也有;注册表权限也正常;那么可能是本机某些配置限制了对OLEDB引擎的访问;
下面把另一个可在另一台电脑运行的C#操作Access的程序拷贝到本机,下断点看一下;是一样的情况;
可知是本机的电脑配置问题;