我在运行Windows 7 64位的虚拟机上设置了32位SQL Server 2014 Express(BenVM)。这个SQL Server实例有一个使用VFPOLEDB(foxpro)提供程序连接到它的链接服务器,名为MSCRIBE2。从我的虚拟机我可以使用openquery来查询我的链接服务器。
我还有一台本地计算机(Windows 10 64位),它上面还安装了32位SQL Server 2014 Express(BenLocal)。这个SQL Server实例有一个使用VFPOLEDB(foxpro)提供程序连接到它的链接服务器,名为MSCRIBE。从我的本地机器,我可以使用openquery来查询我的链接服务器。
从我的本地计算机上,我能够连接到在我的虚拟机(BenVM)上运行的SQL Server实例并查询本机表,但是当我尝试运行完全相同的查询时,直接记录到我的VM中时我得到了以下错误:
链接服务器“MSCRIBE2”的OLE DB提供程序“VFPOLEDB”返回消息“路径或文件名无效。”
Msg 7303,Level 16,State 1,Line 3
无法为链接服务器“MSCRIBE2”初始化OLE DB提供程序“VFPOLEDB”的数据源对象
我尝试使用Windows身份验证和SQL用户作为我本地计算机上BenVM的登录,但这似乎并不重要。我还尝试了本地服务和命名帐户作为我的VM上运行的SQL Server的“登录”,但这似乎也没有帮助。
两个链接服务器MSCRIBE和MSCRIBE2都指向我具有完全读/写权限的完全相同的网络资源。我没有使用映射的驱动器地址而是\\\ServerName\Folder
正在使用的查询是
Select * from openquery(MSCRIBE2, '
Select ORDER.DATE,ORDER.ORDERNR
from [ORDER]
where cast(ORDER.DATE as date) = {^2018-03-08}
')
我将不胜感激任何帮助。
****更新 看起来这个问题与我上面的openquery直接相关,我之前没有尝试过,但是刚才我尝试了它作为常规查询,我能够连接。我现在使用的查询是:
Select [ORDER].[DATE],[ORDER].[ORDERNR]
from MSCRIBE2...[ORDER]
where cast([ORDER].[DATE] as date) = '2018-03-08'
答案 0 :(得分:0)
我认为问题在于安全性。在任何一种情况下,我都会仔细检查我是否使用32位驱动程序进行调用(即:C#代码在64位机器上编译为64位,除非明确指向x86)。使用OpenQuery,您至少会尝试提供完整路径而不仅仅是表名(例如“... from([c:\ My Folder \ Order]))。