2012-04-05 95 views
1

我们有一个SQL 2008,并希望创建一个链接服务器到一个dbf文件。 我应该选择哪个提供商,我提供的提供商(ADsDSOObject,MSDAOSP,MSDASQL,MSIDXS,MSOLAP,SQLNCLI10,SQLOLEDB)如何在sql 2008中创建链接服务器到.dbf?

如果以上都没有,那么还有其他提供商吗?

回答

1

我见过一些链接到dbf的方法。我认为我最喜欢的一个就是使用Visual FoxPro提供程序,您可以使用download from Microsoft

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

从EM链接服务器属性中选择“OLE DB提供程序的Visual FoxPro”作为提供程序名称

产品名称:留空

数据来源:位置的文件夹中包含的DBF文件

提供字符串:VFPOLEDB


连接dbf文件的其他选项包括MDAC,ODBC等,但是通过这些选项通过链接可以完成的操作最多是有限的,错误的和不可预测的,具体取决于确切的版本。视觉狐狸提供者似乎做了最好的工作。


related SO link也有关于连接到一个DBF

+0

感谢快速回答说,对不起,我忘了提及的SQL 2008年是64位的,我想你的解决方案,这不是”吨工作在64位。 – 2012-04-06 14:33:29

+0

嗯,这是一个问题。使用链接服务器有多重要?这个dbf是否经常更改?如果没有,您可以简单地创建一个shell数据库并使用SSIS或其他ETL方法导入数据,然后查询该数据库。 – RThomas 2012-04-06 16:56:28

0

不能创建64位的SQL Server和32位DBF驱动程序的链接服务器的一些其他信息。

但是,您可以在Visual Studio中使用适用于OLE DB的.NET Framework Provider然后在VFP的MS OLE DB Provider中打开一个新的SqlDataSource。连接字符串应该看起来像这样(或使用UNC)

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

配置向导包含一个部分来测试您的SQL。您可以使用此运行临时SQL。

4

我的分步是:

  • Intall驱动程序 Microsoft Access数据库引擎2010可再发行 AccessDatabaseEngine.exe 32Bit AccessDatabaseEngine_x64.exe 64Bit

  • CREATE SQL 2012 LinkedServer

    EXEC master.dbo.sp_addlinkedserver
    @server ='LinkedServerName',
    @srvproduct = '微软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 = '假',
    @locallogin = NULL,
    @rmtuser = '管理',
    @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 ...表名

  • 如果您收到此错误:

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

    问题我发现的是,运行QRY用户没有 对sqlserver的临时目录

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

    • 应用过滤器CTR + L和
    • 过滤后的结果=“访问被拒绝请单击添加
    • 选择仅显示文件系统活动
      和SQL查询运行时,你会看到的财产以后这样的:

    SQLSERVR.EXE:000查询信息
    C:\用户\ MSSQLSERVER \应用程序数据\本地\温度拒绝访问

    克咆哮权限到C:\用户\ MSSQLSERVER \目录

    C:\ WINDOWS \ ServiceProfiles \网络服务\应用程序数据\被拒
    授予权限到C本地的\ Temp ACCESS:\ WINDOWS \ ServiceProfiles \网络服务\目录

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

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

    1. 我做:
      • 属性的文件夹中
      • 选择安全选项卡
      • 点击编辑按钮单击
      • 添加按钮
      • 输入对象名称:NT服务\ MSSQLSERVER点击查询名称
      • 选择MSSQLSERVER对象单击确定
      • 选择允许完全控制