SQL消息7303,级别16,状态1,行3无法初始化OLE DB提供程序“VFPOLEDB”的数据源对象

时间:2018-04-09 21:44:11

标签: oledb linked-server visual-foxpro sql-server-2014-express openquery

我在运行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'

1 个答案:

答案 0 :(得分:0)

我认为问题在于安全性。在任何一种情况下,我都会仔细检查我是否使用32位驱动程序进行调用(即:C#代码在64位机器上编译为64位,除非明确指向x86)。使用OpenQuery,您至少会尝试提供完整路径而不仅仅是表名(例如“... from([c:\ My Folder \ Order]))。