Web 開發中
經常要用到 Access 數據庫
但是由於 Access 是一種文件型數據庫
所以無法跨服務器進行訪問
經過筆者的探索
發現可以利用 SQL Server 的鏈接服務器
把地理上分散的 Access 數據庫整合起來
使 Access 數據庫具有跨越 Web 服務器群的能力
這樣做
還可以使 Access 數據庫與 SQL Server
甚至 Oracle 等網絡數據庫連接起來
實現異構數據庫的互連
從而執行分布式的查詢
更新
命令和事務
一創建鏈接服務器連接本地 Access 數據庫 創建鏈接服務器可以用
企業管理器
也可以執行系統存儲過程 sp_addlinkedserver 來完成
用系統存儲過程相對快捷一些
格式為
sp_addlinkedserver
鏈接服務器名
產品名
Microsoft
Jet
OLEDB
Access數據庫路徑及文件名
指定 Microsoft
Jet
OLEDB
作為 provider_name
指定 Access 數據庫文件的完整路徑名作為 data_source
mdb 數據庫文件必須駐留在本地服務器上
路徑必須是服務器上的有效路徑
例如
本例創建一個名為 mytest 的鏈接服務器
對 E:\我的文檔\ 文件夾下名為 DOS
mdb 的 Access 數據庫進行操作
則在
SQL查詢分析器
中執行
sp_addlinkedserver
mytest
Access
Microsoft
Jet
OLEDB
E:\我的文檔\DOS
mdb
二創建鏈接服務器登錄映射 同樣可以用
企業管理器
或存儲過程來完成
存儲過程的格式為
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 mytest
articles
或
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
%>
From:http://tw.wingwit.com/Article/program/SQLServer/201311/21985.html