2

我有一个需要从 Sql Server 访问的 Visual FoxPro 表。在 Sql Server x86 中,我将只创建一个链接服务器。不幸的是,没有用于 VFP 的 x64 驱动程序 - 因此 Sql Server x64 无法为其创建链接服务器。

到目前为止,我已经提出了以下选项——其中没有一个是我特别喜欢的:

  1. 设置一个 x86 Sql Server 用作中继,以便查询从 x64 -> x86 -> VFP。

我真的不关心这个,因为除了作为开发人员之外,我还是系统管理员。所以,这意味着我需要修补、维护和监控另一个 Sql Server - 可能还有另一个服务器(假设我不只是使用单独的实例)。

此外,由于 VFP 提供程序不能使用 4 部分语法,因此我必须使用 OPENQUERY。想到将 OPENQUERY 语句嵌入到另一个 OPENQUERY 语句中所需要的所有单引号转义让我头晕目眩……

  1. 创建一个 CLR 表值函数,尽管程序集(大概?)也是 x64 - 所以我必须退出 proc(IPC?Webservice?)才能实际运行查询

事实证明 TVF 需要一个模式,所以这个选项并不像我最初想象的那样干净。我做了一个峰值来让 WCF 客户端进入 MSSQL,它返回一个 XML 列,然后可以使用 Sql XML 数据类型函数对其进行解析。它可以工作,并且实际上比 OPENQUERY 更易于查询,因为它实际上将变量作为参数。这为我节省了大部分单引号和 EXEC 舞蹈。

当然,Sql 中的 WCF 完全不受支持,而且闻起来像是一个相当大的 hack。我对性能和可靠性有相当严重的保留。

  1. 停止从 Sql Server 到 VFP 的查询,并重写大量客户端代码

显然,这是“正确”的答案。但是,有很多客户端代码依赖于 Sql Server 表和 VFP 表之间的连接。重写这些东西以填充临时表或进行客户端连接似乎是一个相当大的负担。

这里希望有人能提出更好的选择,或一些类似的经验。

4

2 回答 2

2

这是一个讨厌的问题,我同意。

SSIS 在 32 位模式下运行以定期(可能是按需,在由同一 SP 触发的作业中)将数据导入 SQL Server 本机表是另一种选择,如果您可以忍受延迟的话。这将取决于数据更改的频率以及数据略微过时的问题。

于 2009-01-27T15:22:13.253 回答
0

我想我找到了替代方案。Microsoft 已发布更新的 Access 驱动程序,该驱动程序有 32 位和 64 位两种版本。与原始的 Jet OleDB 驱动程序一样,这将允许您从 SQL Server x64访问 dBase 文件格式。

唯一的限制是 DBF 必须是ISAM 支持的其中一种 dBASE 格式。我已经使用 dBASE IV 格式进行了一些测试,并且使用以下连接字符串似乎可以正常工作。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=Admin;Password=;
于 2010-10-29T04:40:03.817 回答