熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

應用SQL鏈接服務器訪問遠程Access數據庫

2022-06-13   來源: SQL Server 

  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
  
  %>
  

From:http://tw.wingwit.com/Article/program/SQLServer/201311/21985.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.