none
如何在64位的SQL Server 2005/2008上创建连接服务器访问Access 或Excel数据源? RRS feed

  • 常规讨论

  • 在微软发布64位ACE 12.0驱动程序之前,只能使用32位的Microsoft.Jet.OLEDB.4.0去访问Access和Excel文件。这种方式需要在64位环境下,先安装32位的SQL Server数据库实例作为媒介,然后在32位的SQL Server实例上,通过Microsoft.Jet.OLEDB.4.0数据库连接组件向Excel或Access文件创建连接服务器,最后向64位SQL Server实例上的SQL Server Express实例创建连接服务器。

    现在,你可以使用64位ACE驱动程序进行数据访问。以下是详细的步骤:
    1. 下载并安装64位ACE驱动程序。
    2. 打开SQL Server Management Studio(SSMS),连接到64位SQL Server数据库实例并使用下面的T-SQL语句向Access数据库创建连接服务器:

    EXEC sp_addlinkedserver
    @server=N'MYACCESS',
    @srvproduct=N'Access',
    @provider=N'Microsoft.ACE.OLEDB.12.0',
    @datasrc=N'D:\AccessData\test.mdb'
    go
    EXEC sp_addlinkedsrvlogin
    @rmtsrvname=N'MYACCESS',
    @useself=N'True'
    GO

    如果连接的是Excel文件,你还需要指定@provstr参数:
    EXEC sp_addlinkedserver
    @server=N'MYEXCEL',
    @srvproduct=N'EXCEL',
    @provider=N'Microsoft.ACE.OLEDB.12.0',
    @datasrc=N'D:\AccessData\test.xlsx',
    @provstr=N'Excel 12.0'
    go
    EXEC sp_addlinkedsrvlogin
    @rmtsrvname=N'MYEXCEL',
    @useself=N'True'
    GO

    3. 接下来就可以对连接服务器进行访问:
    --访问Access文件
    SELECT * FROM MYACCESS...Tasks
    --访问Excel文件
    SELECT * FROM MYEXCEL...[Books$]

    2011年9月21日 1:28
    版主

全部回复

  • 这个貌似在Windows Server 2008 R2 的OS上面无法运行,

    安装完毕,建立相应的Linked Server以后,查询2010版本的Excel时,发生如下错误:

    Msg 7399, Level 16, State 1, Line 1
    The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "MYEXCEL" reported an error. The provider did not give any information about the error.
    Msg 7330, Level 16, State 2, Line 1
    Cannot fetch a row from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "MYEXCEL".

    链接服务器如下所是:

    EXEC master.dbo.sp_addlinkedserver @server = N'MYEXCEL', @srvproduct=N'EXCEL', @provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'D:\AccessData\TEST.xlsx', @provstr=N'EXCEL 12.0'

    2011年10月31日 3:08