Sql server 用T-sql读取本地数据文件dbf的数据文件

第一步启用Ad Hoc Distributed Queries  SQLserver执行以下的语句:

exec sp_configure 'show advanced options',1

reconfigure

exec sp_configure 'Ad Hoc Distributed Queries',1

reconfigure

----允许在进程中使用ACE.OLEDB.12   在安装了 ACE2010的驱动才可以执行下面语句。

 EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1

 

 

第二步 到数据库执行下面的查询语句

select *  from   OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source="E:\广州市\GZYJ\GZYJJK\GZYJJK\bin\Debug\DllG\data";Extended properties=dBase 5.0')...bs_factory

会报一个错误:
消息 7308,级别 16,状态 1,第 3 行
因为 OLE DB 访问接口 'MICROSOFT.JET.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。

是由于Windows64 位操作系统里面没有 ACE2010的驱动,64位的驱动

下载一个64位的驱动   ACE2010的驱动,64位的。 进行安装 ,但是这个驱动必须在office 64 位的环境才能正常安装。

安装前是要将系统中32 office 软件卸载掉 并且删除对应的 注册文件,然后重新安装一个office 64 位和ACE2010的驱动,64位的驱动

卸载office32 位后,打开 注册表进行删除

在打开的运行窗口中,输入命令regedit,然后点击确定按钮。

 找到office注册表信息,路径如下:(win10环境下)

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office“

此外,也可通过在“编辑”工具栏下“查找”(快捷键:Ctrl+F),输入”office“在全字匹配”条件下进行查找。具体如图:

 

如有,找到“office”注册表项后,右击“删除”选项,删除原office残留注册表信息。

在打开的注册表编辑器窗口中,定位到HKEY_CLASSES_ROOT\Installer\Products注册表项。

 在展开的注册表项中,我们找到以00002开头的注册表项,右键点击该项,在弹出菜单中选择“删除”菜单项。

 

 这时会弹出一个确认项删除的窗口,点击“是”按钮即可。另外我们再删除所有以000051开头的注册表项,重新启动计算机后,再安装64位的Office就不会提示错误 了。

 

将这些删除干净后再 重新安装 office 2010 64位的

再安装相应的  ACE2010的驱动,64位的   。

执行一下语句 

select *  from

OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source="E:\DllG\data";Extended properties=dBase 5.0')...bs_reg

既可以查询到数据。

 

posted @ 2018-11-07 17:49  游林  阅读(1307)  评论(0编辑  收藏  举报