关于 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错问题

时间:2022-09-27 13:49:35
我用c#导入一个access数据库到sqlserver中去,两个数据库的表结构完全一致,字段类型也完全匹配
用的sql语句是
strSql.Append("insert into table_A  select * from ");
strSql.Append(" OPENROWSET('Microsoft.Jet.OLEDB.4.0', '" + Path + "';'admin';'" + passWord + "', table_A)");

其中Path是access数据库的包含数据库名的完全的地址,password是该数据库的密码,执行后报错:

链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。身份验证失败。
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。

其中access数据库并未打开,而且路径和密码也是完全正确的。查了很多方法都没有结果,我的sqlserver的数据库是在服务器上的,access数据库在本机。

40 个解决方案

#1


看过很多帖子都说是access数据库要和sqlserver数据库放一起的,我把access数据库放到服务器上,并在sqlserver2005上用尝试过查询分析,不过还是一样的错。

链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。身份验证失败。
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。 

#2


用这种方法,MDB要在本机才行,SQLSERVER可以在服务器上

#3


我的mdb就是在本机的啊,而且sqlserver服务器上的外围配置都配好了的,OPENROWSET也没有问题啊

#4


我的mdb就是在本机的啊
是在运行程序的机器上?

#5


是的,程序和access数据库都在本机上,sqlserver数据库在服务器上

#6


MDB中的密码是什么?用户组 OR 数据库?

#7


mdb的密码就是一个简单的字符串啊

#8


mdb必须也在服务器上,和SQL SERVER在同一台机器上。

QQ群 48866293 / 12035577 / 7440532 / 13666209
ACCESS专业论坛
http://www.accessbbs.cn/bbs/index.php .
http://www.office-cn.net/vvb/ .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://www.office-cn.net/home/space.php?uid=141646 .

#9


引用 7 楼 kevinyoung1985 的回复:
mdb的密码就是一个简单的字符串啊

我是问:是数据库密码还是用户组密码?

#10


引用 8 楼 ACMAIN_CHM 的回复:
mdb必须也在服务器上,和SQL SERVER在同一台机器上。

no,是在本机

#11


引用 9 楼 wwwwb 的回复:
引用 7 楼 kevinyoung1985 的回复:
mdb的密码就是一个简单的字符串啊

我是问:是数据库密码还是用户组密码?


数据库密码啊

#12


引用 11 楼 kevinyoung1985 的回复:
引用 9 楼 wwwwb 的回复:
引用 7 楼 kevinyoung1985 的回复:
mdb的密码就是一个简单的字符串啊

我是问:是数据库密码还是用户组密码?


数据库密码啊

连接字串有问题
设置数据库密码,打开密码为 1 打开时需要使用
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\1.mdb;User ID=admin;Password=;Jet OLEDB:Database Password=1" 

#13


你的这个只是简单的链接该access数据库啊
我这个OPENROWSET('Microsoft.Jet.OLEDB.4.0', '" + Path + "';'admin';'" + passWord + "', table_A),格式上没有任何问题啊

#14


引用 13 楼 kevinyoung1985 的回复:
你的这个只是简单的链接该access数据库啊
我这个OPENROWSET('Microsoft.Jet.OLEDB.4.0', '" + Path + "';'admin';'" + passWord + "', table_A),格式上没有任何问题啊


给你讲过,连接字串有问题
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="d:\temp\yy.mdb";User ID=Admin;Password=;Jet OLEDB:Database Password=1234')...zzz

#15


用你上面的那个连接字符串还是出现了我问的这个问题

#16


引用 15 楼 kevinyoung1985 的回复:
用你上面的那个连接字符串还是出现了我问的这个问题

你直接在查询分析器中运行,看看能否访问MDB,我是测试通过的,
注意MDB要在本机。

#17


我在查询分析器里执行也是出现这个错误

#18


引用 17 楼 kevinyoung1985 的回复:
我在查询分析器里执行也是出现这个错误

代码贴出来看看

#19


你好,我能加你q或是msn和你聊吗

#20


私信发不出去的,不好意思哦

#21


就在这个帖子中吧

#22


 public void SaveAllData(string filePath, string passWord)
     {
           StringBuilder strSql = new StringBuilder();
           strSql.Append("insert into T_FO_COMMITEE  select * from ");
           strSql.Append("OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source=" + filePath + ";User ID=Admin;Password=;Jet OLEDB:Database Password=" + passWord + "')...T_FO_COMMITEE");
           dbhelper.ExecuteNonQuery(strSql.ToString());
     }

这个是我的插入一个access数据库中的T_FO_COMMITEE表的数据到当前的sqlserver数据库中的表T_FO_COMMITEE的函数,两个数据库的表结构是一样的

我服务层调用dao层的这个函数,传下来的两个参数,一个是当前access数据库的路径,一个是access数据库的密码。这个函数就这样的。

#23


关于这个dbhelper,是一个封装好的接口,这些都是证实过可行的。

#24


MDB与SQLSERVER在同一机器上,运行你上述代码;

#25


这个我一开始就执行过了啊,我在1楼的时候就说过了,还是这个问题

#26


引用 25 楼 kevinyoung1985 的回复:
这个我一开始就执行过了啊,我在1楼的时候就说过了,还是这个问题

直接在服务器中查询分析器中运行,将MDB也COPY过去。

#27


引用 26 楼 WWWWA 的回复:
引用 25 楼 kevinyoung1985 的回复:
这个我一开始就执行过了啊,我在1楼的时候就说过了,还是这个问题

直接在服务器中查询分析器中运行,将MDB也COPY过去。


对啊,我一开始网上查了很多资料,说是sqlserver要和access放一起的,我就把access数据库上传到服务器上,在在服务器上的查询分析器里试过了,还是这个错误啊

#28


哦,再用了你的这种字符串连接解决了这个问题了。不过表重复了。

#29


无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。 

确定你这个MDB没有工作组?在ACCESS下打开有无问题?

#30


已经解决了这个出错的问题,但关键是我不可能总是把access数据库放到服务器上去啊,本地的access数据库就不能合并进去了吗?

#31


引用 28 楼 kevinyoung1985 的回复:
哦,再用了你的这种字符串连接解决了这个问题了。不过表重复了。

呵呵,说了那么久,还是连接字符串问题,
表重复了:什么意思?

#32


这个mdb没有工作组的,access中打开也没有任何问题

#33


引用 30 楼 kevinyoung1985 的回复:
已经解决了这个出错的问题,但关键是我不可能总是把access数据库放到服务器上去啊,本地的access数据库就不能合并进去了吗?

没有办法,你要用这个方法就只能这样

#34


表重复了是我sql语句的问题。已经解决了

现在的关键是我不可能每次要合并进一个access数据库都要放服务器上去吧,本机的access数据库就不能用这个方法了吗

#35


那如果要服务器上的sqlserver数据库合并进一个本机上的access数据库,又该用何种方法呢?

#36


引用 35 楼 kevinyoung1985 的回复:
那如果要服务器上的sqlserver数据库合并进一个本机上的access数据库,又该用何种方法呢?

SELECT * INTO aa 
FROM zzzz IN ODBC[ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=temp;DataBase=tmp];

记住加分

#37


谢谢啊,我试试看,好了就给你加分,谢谢您啊!!1

#38


Office 2003应该没问题  该不会是2007吧

#39


您好,你的这个ODBC的方法,IN odbc里的都是sqlserver数据库的链接
现在我当前连的就是SQLServer的数据库,合并进一个access数据库的,这个链接字符串又是怎么写的哇

#40


1、这种方法只能ado连接MDB,用JETSQL,T-SQL是不行的;
2、如果是不同的MDB
INSERT INTO [;DATABASE=D:\TEMP\123.MDB].NEWTT
SELECT * FROM zzzz IN ODBC[ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=temp;DataBase=tmp]; 
OR
INSERT INTO [;DATABASE=D:\TEMP\123.MDB].NEWTT
SELECT * FROM [ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=temp;DataBase=tmp].ZZZZ; 

#1


看过很多帖子都说是access数据库要和sqlserver数据库放一起的,我把access数据库放到服务器上,并在sqlserver2005上用尝试过查询分析,不过还是一样的错。

链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。身份验证失败。
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。 

#2


用这种方法,MDB要在本机才行,SQLSERVER可以在服务器上

#3


我的mdb就是在本机的啊,而且sqlserver服务器上的外围配置都配好了的,OPENROWSET也没有问题啊

#4


我的mdb就是在本机的啊
是在运行程序的机器上?

#5


是的,程序和access数据库都在本机上,sqlserver数据库在服务器上

#6


MDB中的密码是什么?用户组 OR 数据库?

#7


mdb的密码就是一个简单的字符串啊

#8


mdb必须也在服务器上,和SQL SERVER在同一台机器上。

QQ群 48866293 / 12035577 / 7440532 / 13666209
ACCESS专业论坛
http://www.accessbbs.cn/bbs/index.php .
http://www.office-cn.net/vvb/ .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://www.office-cn.net/home/space.php?uid=141646 .

#9


引用 7 楼 kevinyoung1985 的回复:
mdb的密码就是一个简单的字符串啊

我是问:是数据库密码还是用户组密码?

#10


引用 8 楼 ACMAIN_CHM 的回复:
mdb必须也在服务器上,和SQL SERVER在同一台机器上。

no,是在本机

#11


引用 9 楼 wwwwb 的回复:
引用 7 楼 kevinyoung1985 的回复:
mdb的密码就是一个简单的字符串啊

我是问:是数据库密码还是用户组密码?


数据库密码啊

#12


引用 11 楼 kevinyoung1985 的回复:
引用 9 楼 wwwwb 的回复:
引用 7 楼 kevinyoung1985 的回复:
mdb的密码就是一个简单的字符串啊

我是问:是数据库密码还是用户组密码?


数据库密码啊

连接字串有问题
设置数据库密码,打开密码为 1 打开时需要使用
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\1.mdb;User ID=admin;Password=;Jet OLEDB:Database Password=1" 

#13


你的这个只是简单的链接该access数据库啊
我这个OPENROWSET('Microsoft.Jet.OLEDB.4.0', '" + Path + "';'admin';'" + passWord + "', table_A),格式上没有任何问题啊

#14


引用 13 楼 kevinyoung1985 的回复:
你的这个只是简单的链接该access数据库啊
我这个OPENROWSET('Microsoft.Jet.OLEDB.4.0', '" + Path + "';'admin';'" + passWord + "', table_A),格式上没有任何问题啊


给你讲过,连接字串有问题
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="d:\temp\yy.mdb";User ID=Admin;Password=;Jet OLEDB:Database Password=1234')...zzz

#15


用你上面的那个连接字符串还是出现了我问的这个问题

#16


引用 15 楼 kevinyoung1985 的回复:
用你上面的那个连接字符串还是出现了我问的这个问题

你直接在查询分析器中运行,看看能否访问MDB,我是测试通过的,
注意MDB要在本机。

#17


我在查询分析器里执行也是出现这个错误

#18


引用 17 楼 kevinyoung1985 的回复:
我在查询分析器里执行也是出现这个错误

代码贴出来看看

#19


你好,我能加你q或是msn和你聊吗

#20


私信发不出去的,不好意思哦

#21


就在这个帖子中吧

#22


 public void SaveAllData(string filePath, string passWord)
     {
           StringBuilder strSql = new StringBuilder();
           strSql.Append("insert into T_FO_COMMITEE  select * from ");
           strSql.Append("OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source=" + filePath + ";User ID=Admin;Password=;Jet OLEDB:Database Password=" + passWord + "')...T_FO_COMMITEE");
           dbhelper.ExecuteNonQuery(strSql.ToString());
     }

这个是我的插入一个access数据库中的T_FO_COMMITEE表的数据到当前的sqlserver数据库中的表T_FO_COMMITEE的函数,两个数据库的表结构是一样的

我服务层调用dao层的这个函数,传下来的两个参数,一个是当前access数据库的路径,一个是access数据库的密码。这个函数就这样的。

#23


关于这个dbhelper,是一个封装好的接口,这些都是证实过可行的。

#24


MDB与SQLSERVER在同一机器上,运行你上述代码;

#25


这个我一开始就执行过了啊,我在1楼的时候就说过了,还是这个问题

#26


引用 25 楼 kevinyoung1985 的回复:
这个我一开始就执行过了啊,我在1楼的时候就说过了,还是这个问题

直接在服务器中查询分析器中运行,将MDB也COPY过去。

#27


引用 26 楼 WWWWA 的回复:
引用 25 楼 kevinyoung1985 的回复:
这个我一开始就执行过了啊,我在1楼的时候就说过了,还是这个问题

直接在服务器中查询分析器中运行,将MDB也COPY过去。


对啊,我一开始网上查了很多资料,说是sqlserver要和access放一起的,我就把access数据库上传到服务器上,在在服务器上的查询分析器里试过了,还是这个错误啊

#28


哦,再用了你的这种字符串连接解决了这个问题了。不过表重复了。

#29


无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。 

确定你这个MDB没有工作组?在ACCESS下打开有无问题?

#30


已经解决了这个出错的问题,但关键是我不可能总是把access数据库放到服务器上去啊,本地的access数据库就不能合并进去了吗?

#31


引用 28 楼 kevinyoung1985 的回复:
哦,再用了你的这种字符串连接解决了这个问题了。不过表重复了。

呵呵,说了那么久,还是连接字符串问题,
表重复了:什么意思?

#32


这个mdb没有工作组的,access中打开也没有任何问题

#33


引用 30 楼 kevinyoung1985 的回复:
已经解决了这个出错的问题,但关键是我不可能总是把access数据库放到服务器上去啊,本地的access数据库就不能合并进去了吗?

没有办法,你要用这个方法就只能这样

#34


表重复了是我sql语句的问题。已经解决了

现在的关键是我不可能每次要合并进一个access数据库都要放服务器上去吧,本机的access数据库就不能用这个方法了吗

#35


那如果要服务器上的sqlserver数据库合并进一个本机上的access数据库,又该用何种方法呢?

#36


引用 35 楼 kevinyoung1985 的回复:
那如果要服务器上的sqlserver数据库合并进一个本机上的access数据库,又该用何种方法呢?

SELECT * INTO aa 
FROM zzzz IN ODBC[ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=temp;DataBase=tmp];

记住加分

#37


谢谢啊,我试试看,好了就给你加分,谢谢您啊!!1

#38


Office 2003应该没问题  该不会是2007吧

#39


您好,你的这个ODBC的方法,IN odbc里的都是sqlserver数据库的链接
现在我当前连的就是SQLServer的数据库,合并进一个access数据库的,这个链接字符串又是怎么写的哇

#40


1、这种方法只能ado连接MDB,用JETSQL,T-SQL是不行的;
2、如果是不同的MDB
INSERT INTO [;DATABASE=D:\TEMP\123.MDB].NEWTT
SELECT * FROM zzzz IN ODBC[ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=temp;DataBase=tmp]; 
OR
INSERT INTO [;DATABASE=D:\TEMP\123.MDB].NEWTT
SELECT * FROM [ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=temp;DataBase=tmp].ZZZZ;