OLE DB Provider for Jet

Microsoft OLE DB Provider for Jet 提供了一个通往 Microsoft Access 数据库的 OLE DB 接口,并允许 SQL Server 2005 和更高版本的分布式查询对 Access 数据库和 Excel 电子表格进行查询。

若要下载 Microsoft Office 2007 驱动程序,请参阅 2007 Office System 驱动程序:数据连接组件

提示提示

若要连接到 Microsoft Access,SQL Server 必须启动 Microsoft Access 数据库引擎。与大多数其他访问接口不同,Microsoft Access 不是轻型访问接口,而是整个 Microsoft Access 数据库引擎。在 SQL Server 进程空间中打开 Microsoft Access 可能由于缺少磁盘、处理器或内存资源而失败。错误包括“无法初始化 OLE DB 访问接口的数据源对象”。为了避免内存不足错误,请将该访问接口配置为在 SQL Server 内存进程空间外部打开。

在 SQL Server 内存空间外部运行 Microsoft Access

  1. 在 SQL Server Management Studio 对象资源管理器中,依次展开 SQL Server 名称、“服务器对象”“链接服务器”“访问接口”,右键单击 Microsoft Access 访问接口 Microsoft.ACE.OLEDB.12.0Microsoft.Jet.OLEDB.4.0,然后单击**“属性”**。

  2. 在**“访问接口选项”框中,取消选中“允许进程内”**。

  3. 单击“确定”。

创建链接服务器以访问 Access 数据库

  1. 执行 sp_addlinkedserver 以创建链接服务器,指定 Microsoft.Jet.OLEDB.4.0 作为 provider_name,并将 Access .mdb 数据库文件的完整路径名指定为 data_source。.mdb 数据库文件必须驻留在服务器上。data_source 在服务器(而不是客户端)上进行计算,且路径必须是服务器上的有效路径。

    例如,若要创建一个名为 Nwind 的链接服务器,对 c:\mydata directory 中名为 Nwind.mdb 的 Access 数据库进行操作,请执行:

    sp_addlinkedserver 'Nwind', 'Access', 'Microsoft.Jet.OLEDB.4.0', 
       'c:\mydata\Nwind.mdb'
    
  2. 若要访问不安全的 Access 数据库,尝试访问 Access 数据库的 SQL Server 登录名应将登录映射定义为用户名 Admin,且不带密码。

    下面的示例使得本地用户 Joe 可以访问名为 Nwind 的链接服务器。

    sp_addlinkedsrvlogin 'Nwind', false, 'Joe', 'Admin', NULL
    

    若要访问安全的 Access 数据库,请使用注册表编辑器配置注册表,以使用 Access 所用的正确的工作组信息文件。使用注册表编辑器将 Access 使用的工作组信息文件的完整路径名添加到下面的注册表项:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\SystemDB

  3. 配置完注册表项之后,请使用 sp_addlinkedsrvlogin 创建本地登录名到 Access 登录名的登录名映射:

    sp_addlinkedsrvlogin 'Nwind', false, 'Joe',
        'AccessUser', '034fhd99dl'
    
安全说明安全说明

此示例不使用 Windows 身份验证。密码未经加密而进行传输。在保存到磁盘的数据源定义和脚本、备份以及日志文件中可能会看到密码。在此类连接中,切勿使用管理员密码。有关特定于环境的安全指南,请联系您的网络管理员。

Access 数据库没有目录和架构名称。因此,在分布式查询中可以使用由四部分构成的 linked_server**...**table_name 形式的名称来引用基于 Access 的链接服务器中的表。

下面的示例检索名为 Nwind 的链接服务器中的 Employees 表中的所有行。

SELECT * 
FROM Nwind...Employees

创建链接服务器以访问 Excel 电子表格

Microsoft OLE DB Provider for Jet 4.0 可用于访问 Microsoft Excel 电子表格。

  • 若要创建访问 Excel 电子表格的链接服务器,请使用下面示例的格式:

    EXEC sp_addlinkedserver EXCEL,
         'Jet 4.0',
         'Microsoft.Jet.OLEDB.4.0',
         'c:\data\MySheet.xls', 
          NULL,
         'Excel 5.0;'
    
    GO
    
  • 若要访问 Excel 电子表格中的数据,请将单元范围与名称相关联。可以通过将范围名称用作表名来访问命名范围。通过在上面的示例中创建的链接服务器,可以使用下面的查询访问名为 SalesData 的命名范围。

    SELECT *
    FROM EXCEL...SalesData
    GO
    

将某行插入命名单元范围时,该行将添加到命名单元范围的最后一行之后。因此,如果要在列标题后插入行 rA,请将列标题单元与名称相关联,并将该名称用作为表名。插入行后,单元范围将自动增长。

设置针对格式化文本的链接服务器

Microsoft OLE DB Provider for Jet 可用于访问和查询文本文件。

  • 若要创建直接访问文本文件的链接服务器,而不将文件链接为 Access .mdb 文件中的表,请执行 sp_addlinkedserver,如下面的示例所示。

    访问接口为 Microsoft.Jet.OLEDB.4.0,访问接口字符串为 'Text'。数据源是包含文本文件的目录的完整路径名称。Schema.ini 文件必须与文本文件位于同一目录中。Schema.ini 文件说明文本文件的结构。有关如何创建 Schema.ini 文件的详细信息,请参阅 Jet 数据库引擎文档。

    --Create a linked server.
    EXEC sp_addlinkedserver txtsrv, 'Jet 4.0', 
       'Microsoft.Jet.OLEDB.4.0',
       'c:\data\distqry',
       NULL,
       'Text'
    GO
    
    --Set up login mappings.
    EXEC sp_addlinkedsrvlogin txtsrv, FALSE, NULL, Admin, NULL
    GO
    
    --List the tables in the linked server.
    EXEC sp_tables_ex txtsrv
    GO
    
    --Query one of the tables: file1#txt
    --by using a four-part name. 
    SELECT * 
    FROM txtsrv...[file1#txt]