利用C 實現分布式資料庫查詢

2021-04-16 22:00:07 字數 2698 閱讀 4378

本文提出了在.net環境下使用一種新的開發語言c#結合ado.net資料訪問模型來開發分布式資料庫系統,大大簡化了開發過程……

另外,在分布式資料庫系統中,還會經常遇到當使用者修改自從提取出來以來已經被修改的行時,違反一致性原則。對此問題ado.net也作了很好地解決,即使用dataset物件為每一條修改過的記錄維護兩個版本:原始版本和更新版本,在更新的記錄被寫回資料庫之前,先要把資料集中記錄的原始版本與資料庫中的當前版本進行比較,如果兩個版本匹配,就在資料庫中更新記錄;否則,就會出現違反一致性原則的錯誤。

3 例項開發

乙個家用電器連鎖店設有乙個總部和許多分店,總部和分店以及各分店之間經常需要進行各種資訊的查詢(如:商品當日價目表、各店銷售狀況和庫存資訊等),對此組織機構建立分布式資料庫查詢系統,可實現總部和各店資訊的共享,便於統一管理。

3.1 系統設計

3.1.1系統結構圖

系統結構如圖2所示:

圖2 系統結構圖

總部和各分店都配置了一台具有固定ip的伺服器,其它電腦通過集線器與伺服器相連,總部和各分店的伺服器通過通訊網路聯接起來。

3.1.2 系統實現步驟

系統實現分為三個主要步驟。首先,為總部和各分店設計資料庫。由於資料量較大,故採用sql server為每個分店建立銷售和庫存資料庫,同時為總部建立員工資料庫、整個連鎖店的存貨資料庫、信用卡客戶資料庫以及**商資訊資料庫等。其次,需要建立乙個提供資料庫服務(dbserver)的動態鏈結庫(dll),將查詢時所要用到的一些服務(如:遠端物件的發布和獲取等)和函式(如:本地異地資料表的查詢、資料表的遠端建立和刪除、表間的連線和合併等)置入該dll中,各分店都需要使用這個dll,以便查詢時對一些服務和函式進行呼叫。最後,根據實際需要開發客戶端查詢介面。

3.2系統實現的關鍵技術

3.2.1 遠端物件的發布與獲取

系統執行後所要做的第乙個工作是發布本地的遠端物件並獲取其它各店所發布的遠端物件。發布遠端物件時,首先要設定乙個網路埠號,然後建立並註冊乙個通道,最後發布該伺服器端的啟用物件。其它場地的伺服器根據ip位址和網路埠號即可方便地獲取所發布的遠端物件。實現遠端物件發布和獲取的關鍵**如下:

遠端物件的發布:

//建立乙個通道例項,port為指定的網路埠號

tcpchannel mychannel= new tcpchannel (int32.parse(port));

//註冊通道

channelservices.registerchannel(mychannel);

//發布該伺服器端啟用物件

remotingconfiguration.registerwellknownservicetype( typeof ( dbserver ), "store", wellknownobjectmode.singleton);

遠端物件的獲取:

//根據ip位址和埠號獲取相應的遠端物件

try

//捕捉異常

catch( nullreferenceexception nullexp )

catch( remotingexception remexp )

3.2.2資料庫的訪問

通過ado.net訪問資料庫,可以方便地連線資料庫,將資料來源中的資料匯入dataset物件中,在dataset物件中可對資料表進行各種操作,而且dataset物件本身也可遠端傳遞。這為開發分布式資料庫系統帶來極大方便。實現資料庫訪問的關鍵**如下所示: 

//建立資料庫的連線

string sqlconn = "initial catalog=store;data source=localhost;userid=sa;password=;";

sqlconnection conn= new sqlconnection

(sqlconn);

conn.open();//開啟資料庫

//將資料來源中的資料匯入到資料集物件

try

finally

3.2.3 查詢

分布式資料庫系統中的查詢一般分為三類:本地查詢、遠端查詢和聯合查詢。本地查詢和集中式資料庫的查詢沒什麼區別;對於遠端查詢,只要獲取遠端物件後,呼叫查詢函式,即可方便地實現;最複雜的是聯合查詢,涉及到多場地之間資料的查詢、表的遠端建立、傳遞、連線、合併等技術。下面以例項介紹聯合查詢的實現。

第二連鎖店要查詢離其較近的第

三、第四連鎖店中所有北京的**商所**的空調的庫存資訊以便調貨,可通過以下步驟實現。首先,獲取總部以及第

三、第四連鎖店所發布的遠端物件。接著,通過遠端物件在總部建立一臨時資料表t1,將查詢到的所有北京的**商資訊存放在t1表中(各分店只有**商名,並不知其所在地,只有總部才有**商的詳細資訊),再將t1表儲存到第三和第四連鎖店。然後讓t1表分別與兩店的庫存表作連線,找出所有北京**商所**的空調庫存資訊(如空調名稱、型號、個數、**等資訊),並將連線結果t2和t3資料表返回到第二連鎖店。最後對t2和t3兩表進行合併,並使用datagrid控制項顯示出來。上述實現中,包含了不同場地之間資料表的複製、傳遞、連線等,所用到的一些函式(如:遠端建立資料表、表與表間的遠端連線、合併等)都放在dll中,可以方便地呼叫。

4 結束語

利用c#的.net remoting技術能夠方便地解決各場地間資料的通訊問題。另外,c#通過ado.net訪問資料庫,使得對資料庫的操作及管理變得更加高效、可靠。這兩種技術的使用,有效地解決了開發分布式資料庫系統的主要問題,大大減輕了系統開發工作量,並且提高了系統的可靠性和安全性。

利用C 實現分布式資料庫查詢

隨著傳統的資料庫 計算機網路和數字通訊技術的飛速發展,以資料分布儲存和分布處理為主要特徵的分布式資料庫系統的研究和開發越來越受到人們的關注。但由於其開發較為複雜,在一定程度上制約了它的發展。基於此,本文提出了在.net環境下使用一種新的開發語言c 結合ado.net資料訪問模型來開發分布式資料庫系統...

利用C 實現分布式資料庫查詢

本文提出了在.net環境下使用一種新的開發語言c 結合ado.net資料訪問模型來開發分布式資料庫系統,大大簡化了開發過程 隨著傳統的資料庫 計算機網路和數字通訊技術的飛速發展,以資料分布儲存和分布處理為主要特徵的分布式資料庫系統的研究和開發越來越受到人們的關注。但由於其開發較為複雜,在一定程度上制...

利用C 實現分布式資料庫查詢

文提出了在.net 環境下使用一種新的開發語言c 結合ado.net資料訪問模型來開發分布式資料庫系統,大大簡化了開發過程 隨著傳統的資料庫 計算機網路和數字通訊技術的飛速發展,以資料分布儲存和分布處理為主要特徵的分布式資料庫系統的研究和開發越來越受到人們的關注。但由於其開發較為複雜,在一定程度上制...