2

我们有一个 sql 2008 并且想创建一个链接服务器到一个 dbf 文件。我应该选择哪个提供者,我拥有的提供者(ADsDSOObject、MSDAOSP、MSDASQL、MSIDXS、MSOLAP、SQLNCLI10、SQLOLEDB)

如果这些都不行,还有其他供应商吗?

4

3 回答 3

5

我的一步一步是:

  • 安装驱动程序 Microsoft Access Database Engine 2010 Redistributable AccessDatabaseEngine.exe 32Bit AccessDatabaseEngine_x64.exe 64Bit

  • 创建 Sql 2012 LinkedServer

    EXEC master.dbo.sp_addlinkedserver
    @server = 'LinkedServerName',
    @srvproduct = 'Microsoft ACE OLEDB 12',
    @provider = 'Microsoft.ACE.OLEDB.12.0',
    @datasrc = 'C:\DBF_Directory',
    @provstr = ' dBASE 5.0'

    EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname = 'LinkedServerName',
    @useself = 'False', @locallogin
    = NULL,
    @rmtuser = 'Admin',
    @rmtpassword = ''

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

    从 LinkedServerName...TableName 中选择 *

  • 如果您收到此错误:

    • 链接服务器“LinkedServerName”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”返回消息“未指定错误”。
    • 消息 7303,级别 16,状态 1,第 1 行无法为链接服务器“LinkedServerName”初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象

    我发现的问题是运行qry的用户在sqlserver临时目录上没有permission

  • 在这种情况下,您使用 SysinternalsSuite ProcessMon.exe 从 https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx下载

    • 应用过滤器 Ctr+L 和
    • filter Result = 'ACCESS DENIED' 点击添加
    • 选择 Show Only File System Activity
      ,当 sql 查询运行时,您将看到如下内容:

    sqlservr.exe:000 查询信息
    C:\Users\MSSQLSERVER\AppData\Local\Temp ACCESS DENIED

    授予对 C:\Users\MSSQLSERVER\ 目录

    C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp 访问被拒绝
    的权限 授予 C:\Windows\ServiceProfiles\NetworkService\ 目录的权限

    所以我授予用户读/写权限,它正在运行 que sql qry 并且一切运行正常。

    注意:授予 MSSQLSERVER 对象的权限有点棘手。

    1. 我已经做好了:
      • 文件夹中的属性
      • 选择安全选项卡
      • 单击编辑按钮单击
      • 添加按钮
      • 输入对象名称:NT Service\MsSqlServer点击检查名称
      • 选择MSSQLSERVER对象 单击确定
      • 选择允许完全控制
于 2015-10-28T20:33:25.040 回答
2

我已经看到了一些链接到 dbf 的方法。我认为我最喜欢的一个是使用可以从 Microsoft 下载的 Visual FoxPro 提供程序。

安装后,我见过的最常见方法是使用以下设置:

从 EM Linked Server Properties 中选择“OLE DB Provider for Visual FoxPro”作为提供程序名称

产品名称:留空

数据源:包含 dbf 文件的文件夹的位置

提供者字符串:VFPOLEDB


其他用于链接 dbf 文件的选项包括 MDAC、ODBC 等,但是您可以通过这些选项通过链接执行的操作充其量是有限的,在最坏的情况下会出现错误和不可预测,具体取决于确切的版本。视觉 foxpro 提供商似乎做得最好。


这个相关的 SO 链接也有一些关于链接到 DBF 的附加信息

于 2012-04-05T23:54:08.550 回答
0

You cannot create a linked server with 64-bit SQL Server and 32-bit DBF drivers.

However, you can open a new SqlDataSource in Visual Studio using the .NET Framework Provider for OLE DB then MS OLE DB Provider for VFP. The connection string should look like this (or with UNC)

Provider=VFPOLEDB.1;Data Source=h:\Programs\Data;Persist Security Info=True;User    ID=Your_user;Password=your_password 

The config wizard includes a part to test your SQL. You can use this run ad hoc SQL.

于 2013-02-18T12:38:43.473 回答