程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 利用C#遠程存取Access數據庫(1)

利用C#遠程存取Access數據庫(1)

編輯:關於C語言

目前,基於數據庫服務器的桌面管理程序和Web程序已經有太多的應用了,尤其是網絡的大量普及,孤立地數據庫管理系統無法勝任分布式管理應用,但是面對基於Access數據庫的現有的桌面應用我們也無法完全的摒棄。我們利用.Net 遠程處理功能將連接和存取Access的行為封裝為一個遠程對象,供網絡中其它客戶端通過調用該遠程對象來存取實際的Access數據庫。我們以 C# 2005 為開發語言來實現上述功能。

一、 技術要點

我們都知道Windows應用程序在運行時會啟動一個進程,其總包括若干線程,不同的進程之間通信是開發分布式應用程序所必需的,傳統上,這不僅需要深入了解通信流兩端上進程的對象,而且還要深入了解低級別協議的宿主、應用程序編程接口以及配置工具等。總之,它是一項需要大量專業知識和經驗的復雜任務。

幸好.Net為我們提供了遠程處理功能,它所提供的通信方法可以快速而方便地完成上述建立通信的任務。因此,無論是需要快速開發 Web 應用程序,還是要花費更多時間生成關鍵的企業范圍的應用程序,.NET Framework 都會提供支持。通過 .Net 遠程處理,客戶端應用程序可以使用同一台計算機或其網絡中其他任何可用的計算機上的其他進程中的對象。

要使用 .Net 遠程處理創建可以讓兩個對象跨越應用程序直接通信的應用程序,只需生成以下對象即可:

1、 可遠程處理的對象。

2、 偵聽對該遠程對象的請求的應用程序即服務器程序。

3、 對該遠程對象發出請求的客戶端應用程序。

.Net下不同應用程序中的對象的通信方式有兩種:一種是跨應用程序域邊界傳輸對象副本,一種是使用代理交換消息。MarshalByRefObject 是通過使用代理交換消息來進行通信的對象的基類。當跨應用程序使用遠程對象時,對象的基類必須是從 MarshalByRefObject 繼承。

二、 程序實現

(1)我們先在VS的IDE中創建名為“TestRemoteAccess”的新的解決方案來容納前述用來實現遠程處理的三個項目,首先向解決方案中添加名為“RemoteObject”的類庫,然後將默認創建的類名更改為“CRemoteAccess”,並且繼承於“MarshalByRefObject”,代碼如下:

using System;
using System.Collections.Generic;
using System.Text;
  namespace RemoteObject
{
 public class CRemoteAccess : MarshalByRefObject
 {}
}

我們需要在該對象內創建用於連接和存取本地Access數據庫的所有函數,供服務端客戶端程序同時調用。用於連接和存取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,然後可以將該DataTable附值給DataGridVIEw以便將數據顯示出來。GetUserTable通過調用私有的LoadData 函數來完成對數據的獲取。SaveData函數用於將編輯過的數據集保存回本地Access數據庫文件,代碼如下:

……
m_connection.Open();
m_adapter.Update(ClIEntDataTable);
……

(2)遠程對象創建完成,我們需要創建用於偵聽該遠程對象請求的服務端應用程序。在“TestRemoteAccess”解決方案中新建一個Windows窗體項目名為:“TestServer”,從工具箱中拖拽下幾個組件,界面如下所示:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved