【文章內(nèi)容簡介】
1 訪問時主要采用 RDA 的同步技術(shù)。 運用 PULL 和 PUSH 操作分別從遠(yuǎn)程的服務(wù)器接收數(shù)據(jù)和向遠(yuǎn)程服務(wù)器發(fā)送數(shù)據(jù)。在運用 RDA 時由于是一種樂觀的訪問方式,而沒有考慮系統(tǒng)環(huán)境存在的沖突,當(dāng)訪問不成功時,數(shù)據(jù)會暫時保存在本地數(shù)據(jù)庫中,其實質(zhì)也是對本地數(shù)據(jù)庫的操作。當(dāng)系統(tǒng)環(huán)境通暢后再一次對數(shù)據(jù)進(jìn)行 PULL 和 PUSH 操作就能訪問遠(yuǎn)程數(shù)據(jù)庫。 系統(tǒng)整體運行模式:通過一臺 Pocket PC 向另一臺 Pocket PC 傳送信息,首先發(fā)送方將信息寫入 Pocket PC 中即完成對發(fā)送方 本地數(shù)據(jù)庫的操作,在通過PUSH 操作向遠(yuǎn)程數(shù)據(jù)庫中發(fā)送數(shù)據(jù),接收方再通過 PULL 操作從遠(yuǎn)程數(shù)據(jù)庫接受數(shù)據(jù),此時信息將保存在接收方本地數(shù)據(jù)庫中,通過相應(yīng)的查詢 操作 完成對接收方本地數(shù)據(jù)庫的訪問 。 同時需要考慮此傳輸過程是一種樂觀的 傳輸 過程。 設(shè)計結(jié)構(gòu) 系統(tǒng)設(shè)計結(jié)構(gòu)圖和 RDA 功能結(jié)構(gòu)圖 如圖 1,圖 2 所示 智 能 通 訊 設(shè) 備智 能 通 訊 設(shè) 備S Q L S e r v e r C ES Q L S e r v e r C ES Q L S e r v e r 2 0 0 0 圖 1系統(tǒng)結(jié)構(gòu)圖 第 7 頁 共 20 頁 圖 2 RDA功能 系統(tǒng)結(jié)構(gòu)圖 系統(tǒng) 功能 模塊結(jié)構(gòu) 系統(tǒng)總體功能模塊如圖 3 所示: 圖 3系統(tǒng)功能模塊 ( 1)發(fā)送方包含了接收方的 ID 號和待發(fā)信息,接收方的 ID 號以列表的方式展現(xiàn)在發(fā)送方。 ( 2)接收方包含了發(fā)送方的 ID 號和接收信息(即發(fā)送方發(fā)出的信息)。 ( 3)發(fā)送方通過模擬器軟件盤寫入信息,通過添加刪除功能完成信息寫入與發(fā)送。 ( 4)通過 RDA 技術(shù)可以訪問 在遠(yuǎn)程 SQL Server 2021 數(shù)據(jù)庫中表內(nèi)信息。 短信通信系統(tǒng) 發(fā)送方 接收方 信 息 接收方 ID 發(fā)送方 ID 信 息 第 8 頁 共 20 頁 系統(tǒng)數(shù)據(jù)庫設(shè)計 在 SQL Server 2021 企業(yè)管理器中創(chuàng)建數(shù)據(jù)庫 mysqlce 和表 MsgInfo1( 如表 1) 所示 表 1數(shù)據(jù)庫表 MsgInfo1 使用 SQLCE 通過代碼在智能設(shè)備 Pocket PC 2021 上創(chuàng)建數(shù)據(jù)庫 和表 Ppc1(如表 2,圖 4 所示 ) 表 2 本地數(shù)據(jù)庫表 Ppc1 圖 4 Pocket PC 上創(chuàng)建的本地數(shù)據(jù)庫 列 名 類 型 長 度 特 性 SendID nvarchar 50 NOT NULL AcceptID nvarchar 50 NOT NULL Message nvarchar 100 NULL DateTime time 8 NOT NULL 列 名 類 型 長 度 特 性 SendID nvarchar 50 NOT NULL AccepterID nvarchar 50 NOT NULL Message nvarchar 100 NULL 第 9 頁 共 20 頁 4 系統(tǒng)實現(xiàn) 程序設(shè)計語言 Visual 是新一代的 Visual Basic 語言,它是一種簡便快捷地創(chuàng)建 .NET 應(yīng)用程序(包括 XML Web services 和 應(yīng)用程序)的語言Visual 具有許多新的功 能和改進(jìn)功能(如繼承,接口和重載),這使 Visual 成為功能強大的面向?qū)ο蟮木幊陶Z言,其他新的語言功能包括自由線程處理和結(jié)構(gòu)化異常處理。 Visual 還完全集成了 .NET Framework 和公共語言運行苦, .NET Framework 和公共語言運行庫,共同提供語言互操作性,垃圾回收,增強的安全符合性和改進(jìn)的版本支持。 Visual Basic 開發(fā)者現(xiàn)在可以使用顯示多線程處理創(chuàng)建多線程可伸縮的應(yīng)用程序。 Visual 中其他的新語言功能包括結(jié)構(gòu)化異常處 理,自定義屬性和符合公共語言規(guī)范( CLS)。 CLS是對諸如數(shù)據(jù)類型之類的事物以及對象的公開和交互操作方式進(jìn)行標(biāo)準(zhǔn)化的一組規(guī)則。 Visual 添加了幾項利用 CLS 優(yōu)勢的功能,任何符合CLS 的語言都可以使用在 Visual 中創(chuàng)建的類,對象和組件。 Visual Basic 用戶可以從其他符合 CLS 的編程語言訪問類,組件和對象,而不用擔(dān)心諸如數(shù)據(jù)類型之類的語言特定的差異, Visual 程序使用的 CLS 功能包括程序集,命名空間和屬性。 Visual 支持許多新的或改進(jìn)的面向?qū)ο笳Z言功能,如重載,繼承 ,Overrides 關(guān)鍵字,接口,共享 成員和構(gòu)造函數(shù),還包括結(jié)構(gòu)化異常處理,委托以及幾個新的數(shù)據(jù)類型。 開發(fā)環(huán)境搭建 配置 SQL Server 2021 數(shù)據(jù)庫 安裝使用設(shè)備上的移動數(shù)據(jù)庫,首先要安裝 SQL Server,因為使用 SQL Server 可以進(jìn)行遠(yuǎn)程數(shù)據(jù)訪問( RDA)和合并復(fù)制兩種方式的同步數(shù)據(jù)。 RDA 訪問功能支持與 SQL (和更高版本)數(shù)據(jù)庫的連接,合并復(fù)制則要求后端必須是 SQL Server 2021。這里選擇 SQL Server 2021 安裝,同時為下步安裝SQL Server CE 做準(zhǔn)備,要先安裝 SQL Server 2021 升級補丁包 SQL Server PackSP4。在選擇驗證模式時選擇混合模式。 安裝及配置 SQL Server CE 下載最新自解壓包 sqlce20sql2ksp4 和 安裝文件,即可將 SQL Server CE(SSCE)數(shù)據(jù)庫安裝在開發(fā)用的 PC機上 (即服務(wù)器名 9PYAC859FD7PXWY)。如果僅僅 創(chuàng)建本地數(shù)據(jù)庫, 則 選擇( Development Tools)安裝即可;要使用 SQL Server CE 的遠(yuǎn)程數(shù)據(jù)訪問( RDA)和復(fù)制技術(shù),除了安裝以上外,還需要選擇第 10 頁 共 20 頁 ( Server Tools)安裝。 安裝 SQL Server CE 服務(wù)器工具程序,通過在運行 IIS 的計算機上運行SQL Server CE 服務(wù)器工具安裝程序之一,自動安裝 SQL Server CE 連接管理實用工具和 SQL Server CE 虛擬目錄創(chuàng)建向?qū)А0惭b結(jié)束時,可以轉(zhuǎn)到“開始”菜單,指向“程序”,單擊“ Microsoft SQL Server ”然后單擊“配置 IIS中的連接支持”。在 SQL Server CE 管理實用工具的右窗格中雙擊“創(chuàng)建虛擬目錄”向?qū)А⑻摂M目錄名為“ sqlce” ,將文件 拷貝到該目錄下(在這一步中要先在你設(shè)定的目錄下建立一個物理文件夾并將該文件夾設(shè)置為共享文件夾,并修改該文件夾的使用權(quán)限,當(dāng)在創(chuàng)建虛擬目錄時文件夾路徑會自動映射到該物理文件夾下),運行 ,轉(zhuǎn)到 C:\Ipub\root\sqlce 目錄下,然后鍵入“ regsvr32 ”將 COM 組件注冊到 DLL 中,在 Pocket PC 2021模擬器的地址欄輸入 測試連接到服務(wù)器 9PYAC859FD7PXWY 是否成功。 如果數(shù)據(jù) 庫 安裝正確,將得到一個包含SQL Server CE Agent 的 Web 頁面。需要 注意一點:在配置環(huán)境時盡量 先 不要對整個操作系統(tǒng)安裝殺毒軟件和其他的防護(hù)性軟件,以免安裝快照文件夾時失敗,并提示開發(fā)者找不到 網(wǎng)絡(luò)路徑。 在本設(shè)計中由于要訪問遠(yuǎn)程數(shù)據(jù)庫,因此 不僅 需要運用 RDA 方法來實現(xiàn) SQL Server 數(shù)據(jù)庫與本地 SQL Server CE 數(shù)據(jù)庫之間同步數(shù)據(jù)操作,還需要安裝( Server Tools) 才能訪問遠(yuǎn)程數(shù)據(jù)庫。 創(chuàng)建本地設(shè)備上的數(shù)據(jù)庫 創(chuàng)建本地數(shù)據(jù)庫 和表 Ppc1 代碼如下: 39。創(chuàng)建 SQL Server CE 數(shù)據(jù)庫 Private Sub CreatemyDB() Dim boolCreateNewDatabase As Boolean = True Dim slocalDatabaseName As String Dim AppPath As String 39。返回 Pocket PC應(yīng)用程序路徑 AppPath = (. _ GetExecutingAssembly().()) slocalDatabaseName = AppPath amp。 \ 39。檢查數(shù)據(jù)庫文件是否存在 If (slocalDatabaseName) Then boolCreateNewDatabase = False End If If ((slocalDatabaseName)) Then (slocalDatabaseName) 第 11 頁 共 20 頁 End If Dim eng As = New (Data source = amp。 slocalDatabaseName) () 39。連接 SQL Server CE 數(shù)據(jù)庫 Dim localconnection As localconnection = New (Data source = amp。 slocalDatabaseName) () 39。創(chuàng)建數(shù)據(jù)庫表 Dim buildtables As = New (CREATE TABLE ppc1() (SenderID nvarchar(50) null) (,AceepterID nvarchar(50) null) ( ,Message nvarchar(100) null) ()) Dim cmdCreateTable As cmdCreateTable = New ((), localconnection) = () () End Sub 系統(tǒng)設(shè)計代碼 本地數(shù)據(jù)庫訪問 本地數(shù)據(jù)訪問 如圖 41 所示 通過對本地數(shù)據(jù)庫的訪問可以知道本地數(shù)據(jù)庫上保存的相關(guān)信息 。 可以通過SQL Server CE 的查詢分析器 ISQLW 查詢信息, 如圖 5 所示 圖 5 ISQLW查詢分析器 第 12 頁 共 20 頁 本地數(shù)據(jù)庫訪問界面 , 如圖 6 所示 圖 6發(fā)送和接收 過程界面 通過向數(shù)據(jù)表中插入 數(shù)據(jù)的公共過程 可更改數(shù)據(jù)庫中的數(shù)據(jù) : 39。向數(shù)據(jù)表插入數(shù)據(jù)的公共過程 Public Sub runNonQuery(ByVal sqlmandtext As String, ByVal localDatasource As String) Dim localConnection As localConnection = New (localDatasource) Dim cmdCreateTable As () cmdCreateTable = New (sqlmandtext, localConnection) = () () () () End Sub 該段代碼實現(xiàn)當(dāng)數(shù)據(jù)差入后使用 DataReader和 DataSet 進(jìn)行讀取數(shù)據(jù)庫數(shù)據(jù) : 39。使用 DataReader訪問數(shù)據(jù) Public Function Getdata(ByVal localDataSource As String) As Try Dim localConnection As localConnection = New (localDataSource) 39。獲取數(shù)據(jù) Dim dr As Dim cmdGetdata As 第 13 頁 共 20 頁 () cmdGetdata = New (SELECT * FROM PPC1, localConnection) = dr = () Return dr Catch ex As () End Try End Function 39。使用 DataSet訪問數(shù)據(jù) Public Function GetDataSet(ByVal localDatasource As String