古蹟修復_淺解在遺留系統中ADO與RDS的程式開發_補充ODBC、OLE DB
資料庫存常見的方式
- ODBC(Open DataBase COnnectivity)開放資料庫連接提供應用程式介面,使得任一DB都能藉由ODBC驅動與指定的DBMS相連。早期的程式設計師在程式中要連接資料庫是非常困難的,每種DBMS產生的資料庫檔案的格式都不一樣,程式設計師要對他們存取的DBMS的底層API有相當程度的了解,透過API來存取特定的DBMS。這就產生了一個問題,當使用的DBMS改變後,或是使用者習慣使用的DBMS與開發程式使用DBMS的不符合時,應用軟體便無法正常存取DBMS。因此,能處理各種資料檔的API便產生了,這就是大家都知道的ODBC。ODBC是透過API的早期產物,是根據SQL 的,以此作為存取資料的標準。這時大多數DBMS提供了一個根據ODBC的驅動程序,遵從了這個標準的DBMS被稱為ODBC相容的DBMS。 ODBC相容的資料庫包括Access, MS-SQL Server, Oracle, Informix等。用戶程式能藉由呼叫ODBC驅動管理器中相應的驅動程式去存取或管理資料庫。當程式要去訪問DB時候是交由ODBC管理器將應用程序的資料庫訪問請求傳遞給相應資料庫驅動程序,該driver再去執行SQL完成任務。
- DAO(Data Access Objects)資料庫訪問物件
使用微軟的Jet提供資料庫訪問物件集合做存取DBMS,據說性能比ODBC更好。 - OLE DB微軟發明的,想用來淘汰掉ODBC的。OLE DB不光可連接各種DB,還能達到連接類似AD、OS文件目錄各種不同DB資料源,當然也需要分別使用不同的driver。其實定位跟ODBC差不多,差異在於有COM標準支援(底層用C++ API),ODBC則是根據C API。
當ODBC成為資料庫介面的標準之後,大多數關聯式資料庫都提供了根據ODBC的驅動程序,使得該類型的資料庫檔案可以被ODBC存取。前面說過,ODBC只可以存取任何支援SQL語言的關聯式資料庫,而OLEDB可以存取各種類型的資料來源,包括關聯式資料庫,所以說,符合ODBC 標準的資料來源是符合OLE DB標準的資料來源的子集。
那麼,OLEDB是否可以取代ODBC呢?不會。
符合ODBC的資料來源要能夠被OLE DB訪問,符合OLE DB標準,也必須提供對應的OLEDB服務提供程序,叫做Microsoft OLE DB Provider for ODBC drivers。OLE DB對ODBC的兼容性,讓OLE DB存取現有的ODBC資料來源。
其優點很明顯,由於ODBC相對OLE DB來說使用得更為普遍,因此可以獲得的ODBC驅動程式相應地比OLE DB的要多。這樣不一定要得到OLE DB的驅動程序,就可以立即存取原有的資料系統。
現在,微軟已經為所有的ODBC資料來源提供了一個統一的OLEDB服務提供程序,這個東西允許你透過OLE-DB或ADO 存取ODBC提供的所有功能。換言之,ODBC和OLEDB這兩種技術是互補的,不能完全互相替換。
ADO (ActiveX Data Objects)
從技術演進時間線層面探討,是在1990年代中期推出的,作為一種使用COM (Component Object Model) 技術訪問數據庫的方法。它是DAO (Data Access Objects) 和RDO (Remote Data Objects) 的後繼者,旨在為各種數據源提供一致的訪問接口。
設計目標:ADO 被設計為一種輕量級、高效的數據訪問接口,支持連接到數據庫、執行SQL查詢、操作數據以及檢索結果。它支持同步和異步操作,適用於客戶端應用程序和Web應用程序。
場景 : ADO 廣泛用於各種Windows應用程序中,用於實現對SQL Server、Oracle、MySQL等關係數據庫的直接訪問。
RDS (Remote Data Services)
從技術演進時間線層面探討,RDS 在ADO之後不久推出,作為ADO的一部分,專門用於簡化Web應用程序中的數據訪問和操作。
設計目標:RDS 的主要設計目標是允許用戶端應用程序(比方:瀏覽器中運行的應用程序)透過HTTP從遠程伺服器檢索和更新數據。它提供了一種機制,使客戶端能夠執行遠程查詢並接收ADODB.Recordset對象,這使得在客戶端進行數據操作變得容易。
場景 : 主要用於早期的Web開發中,當時的網站需要從服務器動態檢索數據並在客戶端進行顯示和操作。
RDS 程式開發中會常見到的一些語法/物件
以下是 RDS 程式設計模型中的關鍵元素:
- RDS.DataSpace
- RDSServer.DataFactory
- RDS.DataControl
- Event
RDS.DataSpace
用戶端應用程式必須指定伺服器和要呼叫的伺服器程式。反過來,應用程式接收對伺服器程式的引用,並將此引用當作伺服器程式本身來處理。
RDS 物件模型以 RDS.DataSpace 物件體現此功能。使用程式識別碼(或 ProgID)指定伺服器程式。伺服器使用 ProgID 和伺服器註冊表來定位有關要啟動的實際程式的資訊。
根據伺服器程式是在 Internet 或 Intranet 的遠端伺服器上、在區域網路的伺服器上、或根本不在伺服器而在本機動態連結庫 (DLL) 上,RDS 可在內部進行分割。這種劃分決定在客戶端與伺服器之間交換資訊的方式,並且對於傳回給客戶端應用程式的參考類型中有著實際的差異。從使用者的角度來看,這種劃分沒有特殊意義。重要的是使用者能接收到可用的程式引用。
RDSServer.DataFactory
RDS 提供預設伺服器程序,它可以執行對資料來源的 SQL 查詢並傳回 Recordset 對象,或取得 Recordset 物件並更新資料來源。
RDS 物件模型以 RDSServer.DataFactory 物件體現此功能。另外,此物件具有建立空的 Recordset 物件的方法,可以透過程式設計填滿這個空的 Recordset (CreateRecordset)。還有另一個方法可將 Recordset 物件轉換為文字字串以建立 Web 頁 (ConvertToString)。
透過 ADO,您可以用 DataFactory 處理程序和包含連線、命令和安全性參數的自訂檔案來覆寫 RDSServer.DataFactory 的某些標準連線和命令行為。
RDS.DataControl
RDS.DataControl 包括兩個面向:
一個方面涉及到資料來源。如果使用 RDS.DataControl 的 Connect 和 SQL 屬性設定指令和連線訊息,則會自動使用 RDS.DataSpace 以建立一個到預設 RDSServer.DataFactory 物件的參考。 RDSServer.DataFactory 將使用 Connect 屬性值來連接到資料來源,使用 SQL 屬性值取得資料來源的 Recordset 並將 Recordset 物件傳回RDS.DataControl。
第二個面向涉及在視覺控制中顯示傳回的 Recordset 資訊。可視控制項可與 RDS.DataControl 相關聯(在進程中稱為綁定),並且存取關聯的 Recordset 物件中的信息,查詢結果顯示在 Microsoft Internet Explorer 中的網頁上。每個 RDS.DataControl 物件將一個表示單一查詢結果的 Recordset 物件綁定到一個或多個視覺控制項(如文字方塊、組合方塊和網格控制項等等)。在每頁上可以有多個 RDS.DataControl 物件。每個 RDS.DataControl 物件都可連接不同的資料來源,並且包含獨立的查詢結果。
RDS.DataControl 物件也具有自己的定位、排序和過濾關聯的 Recordset 物件行的方法。這些方法與 ADO Recordset 物件的方法相似,但又有所區別。
淺見:
當談到RDS (Remote Data Services) 搭配VB (Visual Basic) 的程式開發,這通常指的是在較舊的技術棧中,如VB6或ASP(使用VBScript)來實現Client端和Server端的數據交互。ADO (ActiveX Data Objects) 和 RDS (Remote Data Services) 都是微軟提供的數據訪問技術,但它們服務於不同的用途和設計目標。
RDS允許Client應用程式透過HTTP從遠端伺服器檢索和更新資料。
雖然這些技術已經相對較舊,且在如今世代開發中不太常用,但在特定的維護或遺留系統情境下仍然有其應用場景。
在一些有歷史包袱的遺留系統中時常會看到他們這些古蹟存在,等著後續維護的人去考古。
在VB6中,你可能會使用ADODB.Connection和ADODB.Recordset以及RDS的RDSServer.DataFactory物件來實現這一功能。
環境條件
- 開發環境:安裝有Visual Basic 6.0或相應的IDE,如Visual Studio的舊版本,用於VBScript的ASP開發。
- 伺服器環境:Windows Server,配置IIS(Internet Information Services)來支援ASP應用程式的運行。
- 資料庫連接:配置適當的資料庫(如SQL Server),並設置連接字串來實現遠端資料服務。
MDAC 架構
MDAC 2.x 也支援遠端資料服務(RDS)。 通常用於Web 的應用,採用三層式架構。
需要透過 Internet 安全地存取資料存取頁面Data Access Pages (DAP)。
ADO(ActiveX Data Objects)的案例
VB6範例:使用ADO連接資料庫
Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String Set conn = New ADODB.Connection conn.ConnectionString = "Provider=sqloledb;Data Source=YourServerName;Initial Catalog=YourDatabaseName;User Id=YourUsername;Password=YourPassword;" conn.Open Set rs = New ADODB.Recordset sql = "SELECT * FROM YourTable" rs.Open sql, conn, adOpenStatic, adLockOptimistic Do While Not rs.EOF MsgBox rs.Fields("YourFieldName").Value rs.MoveNext Loop rs.Close Set rs = Nothing conn.Close Set conn = Nothing
ASP範例:顯示資料庫中的資料
<% Dim conn, rs, sql Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=sqloledb;Data Source=YourServerName;Initial Catalog=YourDatabaseName;User Id=YourUsername;Password=YourPassword;" Set rs = Server.CreateObject("ADODB.Recordset") sql = "SELECT * FROM YourTable" rs.Open sql, conn Do While Not rs.EOF Response.Write(rs("YourFieldName") & "<br>") rs.MoveNext Loop rs.Close Set rs = Nothing conn.Close Set conn = Nothing %>
RDS(Remote Data Service)的案例
RDS是一種技術,允許從客戶端應用程序透過網絡訪問和操作遠端數據庫中的數據。
使用RDS時,你可以創建一個客戶端物件,這個物件可以執行SQL查詢或調用遠端伺服器上的方法,然後返回一個或多個Recordset物件。
環境條件
必須安裝RDS服務器和用戶端組件。
VB6中使用RDS範例
Dim dataFactory As Object Dim connString As String Dim rs As ADODB.Recordset ' 創建RDSServer.DataFactory物件 Set dataFactory = CreateObject("RDSServer.DataFactory") ' 設置連接字符串 connString = "Provider=sqloledb;Data Source=YourServerName;Initial Catalog=YourDatabaseName;User Id=YourUsername;Password=YourPassword;" ' 使用DataFactory查詢數據庫 Set rs = dataFactory.Query(connString, "SELECT * FROM YourTable") ' 遍歷Recordset物件 Do While Not rs.EOF MsgBox rs.Fields("YourFieldName").Value rs.MoveNext Loop ' 清理 rs.Close Set rs = Nothing Set dataFactory = Nothing
ASP中使用RDS範例
在ASP(使用VBScript)中,可以通過創建RDSServer.DataFactory物件來實現遠端資料訪問。
<% Dim dataFactory Dim connString Dim rs ' 創建RDSServer.DataFactory對象 Set dataFactory = Server.CreateObject("RDSServer.DataFactory") ' 設置連接字符串 connString = "Provider=sqloledb;Data Source=YourServerName;Initial Catalog=YourDatabaseName;User Id=YourUsername;Password=YourPassword;" ' 使用DataFactory查詢數據庫 Set rs = dataFactory.Query(connString, "SELECT * FROM YourTable") ' 遍歷Recordset對象並輸出 Do While Not rs.EOF Response.Write(rs("YourFieldName") & "<br>") rs.MoveNext Loop ' 清理 rs.Close Set rs = Nothing Set dataFactory = Nothing %>
總結
ADO 著重於提供一種統一的方式來訪問各種數據源,而RDS專注於簡化遠程數據的檢索和操作,特別是在Web應用程序中。
RDS專注於簡化遠程數據的檢索和操作,特別是在Web應用程序中。
Ref:
https://study.holmesian.org/ado/mdmsctherdsprogrammingmodelindetail.htm
https://study.holmesian.org/ado/mdmscrdsprogrammingmodelwithobjects.htm
https://study.holmesian.org/ado/dir.htm
HOWTO: Use RDS from Inside a Visual Basic Program (165297)
https://ftp.zx.net.nz/pub/Patches/ftp.microsoft.com/MISC/KB/en-us/165/297.HTM
步骤 1: 指定服务器程序(RDS 教程)
http://doc.51windows.net/ado/?url=/ado/dir.htm
ADO: ActiveX Data Objects by Jason T Roff-ADO in Context: Universal Data Access
https://www.oreilly.com/library/view/ado-activex-data/1565924150/ch01s01.html
https://slideplayer.com/slide/5930652/
https://slideplayer.com/slide/9247464/
Microsoft ActiveX Data Objects 2.5 (ADO)
https://documentation.help/MS-ADO/documentation.pdf
ADO: ActiveX Data Objects
https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/ADO/O%27Reilly%20ADO%20Activex%20Data%20Objects.pdf
留言
張貼留言