本文介紹一種資料庫遠端備份機制,採用 Client-Server 架構,透過 Socket 通訊實現資料庫結構與資料的跨機器同步。核心流程為:服務端將資料庫轉換為指定 XML 格式,經由 Socket 傳送至客戶端;客戶端接收 XML 後解析並重建資料庫。此方案適用於異構環境下的資料遷移與備份場景。
採用 VC6.0 開發兩個獨立專案:DBServer(服務端/發送方)與 DBClient(客戶端/接收方)。DBServer 負責生成 XML 資料庫檔案並發送;DBClient 負責接收 XML 並據此建立資料庫。整體類別圖展示了核心類別間的協作關係,包含資料庫操作類、Socket 通訊類與 XML 解析類。
定義標準化的 XML 結構以描述資料庫結構與資料:
<Database>:屬性 name 指定資料庫名稱<Table>:屬性 name 指定資料表名稱<Struct> 區段:包含多個 <Field> 節點,屬性包含 fieldName、fieldType、fieldLength<Content> 區段:包含多個 <Record> 節點,屬性對應欄位值範例 XML 檔案 (DBTest.xml):
<?xml version="1.0" encoding="GB2312"?>
<Database xmlns:xlink="https://www.w3.org/1999/xlink" version="1.0" name="dbTest.mdb">
<Table name="dbTest">
<Struct>
<Field fieldName="Name" fieldType="VARCHAR" fieldLength="20"/>
<Field fieldName="Age" fieldType="VARCHAR" fieldLength="3"/>
</Struct>
<Content>
<Record name="徐景周" age="29" />
<Record name="趙振華" age="25" />
<Record name="田子葉" age="29" />
</Content>
</Table>
</Database>
DBServer 使用 MFC CSocket 類別實作 TCP 通訊,監聽預設埠 8686。核心發送邏輯包含三階段:
Create()、Listen()、Accept() 建立連線程式碼採用 goto 統一錯誤處理與資源釋放,確保記憶體與檔案控制代碼正確關閉。
DBClient 同樣基於 CSocket 實作接收邏輯,對應服務端的三階段協議:接收長度、分塊接收資料、寫入本地 XML 檔案。接收完成後,呼叫 CBulidDB::Parse_XML_Document() 解析 XML 並重建 Access 資料庫:
<Database> 與 <Table> 節點取得名稱<Struct>/<Field> 動態構建 CREATE TABLE SQL<Content>/<Record> 構建 INSERT SQL 寫入資料程式碼使用 DAO (CDaoDatabase, CDaoRecordset) 操作 Access,並檢查檔案是否已存在以避免覆寫。
基本功能已驗證可行,但仍有擴充空間:
完整原始碼可供下載參考,適合作為資料庫同步與遠端備份的教學與二次開發基礎。