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
既可以查询到数据。