Web 开发中经常要用到 Access 数据库但是由于 Access 是一种文件型数据库所以无法跨服务器进行访问经过笔者的探索发现可以利用 SQL Server 的链接服务器把地理上分散的 Access 数据库整合起来使 Access 数据库具有跨越 Web 服务器群的能力这样做还可以使 Access 数据库与 SQL Server甚至 Oracle 等网络数据库连接起来实现异构数据库的互连从而执行分布式的查询更新命令和事务
一创建链接服务器连接本地 Access 数据库
创建链接服务器可以用企业管理器也可以执行系统存储过程 sp_addlinkedserver 来完成用系统存储过程相对快捷一些格式为
sp_addlinkedserver 链接服务器名 产品名 MicrosoftJetOLEDB Access数据库路径及文件名
指定 MicrosoftJetOLEDB 作为 provider_name指定 Access 数据库文件的完整路径名作为 data_sourcemdb 数据库文件必须驻留在本地服务器上路径必须是服务器上的有效路径
例如本例创建一个名为 mytest 的链接服务器对 E:\我的文档\ 文件夹下名为 DOSmdb 的 Access 数据库进行操作则在SQL查询分析器中执行
sp_addlinkedserver mytest Access MicrosoftJetOLEDB E:\我的文档\DOSmdb
二创建链接服务器登录映射
同样可以用企业管理器或存储过程来完成存储过程的格式为
sp_addlinkedsrvlogin 链接服务器 false SQLServer登录名 admin NULL
为访问非保密的 Access 数据库试图访问 Access 数据库的 SQL Server 登录应该有一个为用户 Admin 定义的没有密码的登录映射下例使得本地用户 sa 可以访问名为 mytest 的链接服务器:
sp_addlinkedsrvlogin mytest false sa admin NULL
要访问保密的 Access 数据库需使用注册表编辑器配置注册表以便使用 Access 的正确的工作组信息文件使用注册表编辑器向该注册表项中添加 Access 使用的工作组信息文件的完整路径名称
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\\Engines\SystemDB
配置了注册表项后请使用 sp_addlinkedsrvlogin 创建从本地登录到 Access 登录的登录映射
sp_addlinkedsrvlogin mytest false sa [AccessUser] [AccessPwd]
链接服务器和链接服务器登录映射建立完毕可以在企业管理器里进行查看
三链接服务器的测试
可以在SQL查询分析器里对创建的链接服务器进行测试由于 Access 数据库没有目录和架构名称因此基于 Access 的链接服务器中的表可以在分布式查询中使用 [linked_server][table_name] 的四部分名称进行引用下例从名为 mytest 的链接服务器中检索 articles 表的所有行:
Select * from mytestarticles
或Select * from OpenQuery(mytest Select * from articles)
四用代码访问链接服务器的 Access 数据库
只有实现用代码访问链接服务器的 Access 数据库才使得链接服务器发挥了最大的灵活性和实用性可以使用三中的测试链接服务器的代码建立存储过程供 Asp 代码调用也可以直接在 Asp 代码中调用链接服务器以下是我通过测试的例子
<%
Dim conn, sSQL, rs
conn="Provider=sqloledb; server=localhost; uid=sa; pwd=SQLSERVER;"'用户 sa 的密码为 SQLSERVER。tw.wiNgwit.CoM可以省略数据库名
on error resume next
sSQL = "select * from mytest...articles"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.open sSQL, conn, 1, 1
rs.movefirst
response.write rs(0) & "
"
if err.number<>0 then
response.write "取数据错误:数据库连接出错,或存取数据表错误!"
else
response.write "OK!"
end if
%>