首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

利用 C# 遠端存取 Access 資料庫(一):架構設計與遠端物件建立

     編輯:關於C語言

目前基於資料庫伺服器的桌面管理程式與 Web 程式應用極多,尤其網路普及下,孤立的資料庫管理系統無法勝任分散式管理應用,但面對既有 Access 桌面應用也無法完全捨棄。我們利用 .NET 遠端處理功能,將連接與存取 Access 的行為封裝為遠端物件,供網路中其他客戶端透過呼叫該遠端物件存取實際 Access 資料庫。以 C# 2005 為開發語言實現上述功能。

一、 技術要點

Windows 應用程式執行時會啟動一個進程,包含若干執行緒,進程間通訊是開發分散式應用必需。傳統方式不僅需深入了解通訊兩端進程物件,還需了解低層協定宿主、API 及設定工具,是項需要大量專業知識的複雜任務。

.NET 遠端處理提供的通訊方法可快速便捷完成建立通訊任務。無論快速開發 Web 應用,還是構建關鍵企業級應用,.NET Framework 皆提供支援。透過 .NET 遠端處理,客戶端應用程式可使用同一台電腦或網路中任何可用電腦上其他進程中的物件。

使用 .NET 遠端處理建立讓兩個物件跨應用程式直接通訊的應用程式,只需建立以下物件:

  1. 可遠端處理的物件
  2. 偵聽該遠端物件請求的應用程式(伺服器程式)
  3. 對該遠端物件發出請求的客戶端應用程式

.NET 下不同應用程式中物件通訊有兩種:跨應用程式域邊界傳輸物件副本、使用 Proxy 交換訊息。MarshalByRefObject 是透過 Proxy 交換訊息通訊物件的基底類別。跨應用程式使用遠端物件時,物件基底類別必須繼承自 MarshalByRefObject。

二、 程式實作

(1)建立遠端物件類別庫

在 VS IDE 中建立名為「TestRemoteAccess」的新方案,新增類別庫專案「RemoteObject」,將預設類別重命名為「CRemoteAccess」並繼承 MarshalByRefObject:

using System;
using System.Collections.Generic;
using System.Text;

namespace RemoteObject
{
    public class CRemoteAccess : MarshalByRefObject
    {}
}

在該物件內建立連接與存取本地 Access 資料庫的所有函式,供伺服端與客戶端同時呼叫。所有需對客戶端公開的函式可見性必須設為 public。變數 m_ConnString 設為 public static,目的在客戶端呼叫 SetRemoteAccessConnString 後保存連接字串,以備本次連接期間隨時存取:

public static string m_ConnString;
public void SetRemoteAccessConnString(string Connstr)
{
    m_ConnString = Connstr;
}

成功連接 Access 後需回傳資料集給客戶端顯示與編輯,遠端物件宣告相關函式:

private void LoadData(string SqlStr, string TableName)
public void SaveData(DataTable ClientDataTable)
public DataTable GetUserTable(string SqlStr, string TableName)

客戶端可傳遞 SQL 查詢腳本呼叫 GetUserTable 取得相關資料表資料,回傳 DataTable,再指派給 DataGridView 顯示。GetUserTable 透過呼叫私有 LoadData 完成資料取得。SaveData 用於將編輯過的資料集存回本地 Access 檔案:

m_connection.Open();
m_adapter.Update(ClientDataTable);

(2)建立伺服器端應用程式

在方案中新增 Windows Forms 專案「TestServer」,拖曳元件佈局介面:

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved