RDA實現SQL CE與SQL Server間資料存取
PPC程式與案頭PC進行通訊的編程方式目前有兩種,1、利用Socket編程與傳統型程式進行通訊;2、利用RDA和Replication(複製)進行資料庫編程來完成與案頭SQL Server資料庫的存取。利用Socket編程實際上就是通過TCP/IP協議與案頭PC進行通訊,它可以很方便的傳輸一般類型的資料,譬如:字串、整數以及位元組等,但是如果需要傳輸類型化的資料則需要程式員自己去封裝,而且若想由智慧型裝置從案頭資料庫引擎中返回指定資料庫表的資料,必須編寫案頭介面服務程式來查詢資料並將結果通過Socket返回給智慧型裝置。那麼如何才能在Pocket PC上做到像在案頭PC上一樣存取本機資料庫甚至是遠端桌面PC的資料庫呢?通過在智慧型裝置Pocket PC上啟動並執行SQL Server CE 我們便可以輕鬆存取放置在Pocket PC上的SQL Server CE資料庫,還可以通過SQL Server CE中的RDA或者合併式複寫快速實現從智慧型裝置上存取遠端桌面SQL Server2000的資料庫
什麼叫RDA
遠端資料存取,即Remote Data Access(簡稱為RDA),這項技術在Windows CE2.11版本時已經存在,在SQL Server 2000 For CE 出現後,它的功能便更加豐富了,通過使用這項技術。並利用各種網路環境,使用者可以將Pocket PC 串連到遠程SQL Server 2000 資料庫。如果擁護是第一次進行串連,則行動裝置會從SQL Server 2000 上下載需要查詢的資料;如果不是第一次查詢,行動裝置則會對比本機資料庫和遠端資料庫中的內容。並更新遠端資料庫中的資訊。
RDA技術的資料傳遞。
通過RDA 技術,可以完成以下幾種類型的資料傳遞:
從伺服器端下載資料。當行動裝置上的本機資料庫無內容時,可以通過RDA技術從遠程SQL Server 2000伺服器下載初始化資料到本地SQL Server CE資料庫。例如,應用程式利用RDA技術下載終端擁護登陸資料和產品未經處理資料到本地移動資料庫中,從而完成系統的初始化。如果沒有這個最初的初始化步驟,系統將無法登陸。
向伺服器上傳資料。行動裝置上的應用程式在初始化後能夠讓操作員登陸並使用系統。操作員錄入和採集資訊(如GPS的資訊和條碼的資訊)都將被儲存在移動資料庫中,此時,有可以利用RDA技術將本機資料上傳到SQL Server 2000伺服器端。值得注意的是,我們在設計伺服器端資料庫時,在參加同步的表中不能存在自增量欄位,否則容易造成上傳資料失敗,起原因是不同的行動裝置回對錶中的同一個欄位做自增。
補救伺服器端資料。有的時候,在多個行動裝置上的資料庫和伺服器端的資料庫中都可能存在同一條記錄,這時伺服器的記錄將以最後一次同步行動裝置中的記錄為準。
下達無返回的T—SQL命令操作遠程伺服器(Submit SQL)。在行動裝置上的應用程式能夠利用T-SQL命令遠程操作SQL Server 2000資料庫。這項功能非常實用,我們通常需要在採集資料時記錄目前時間,但是如果存在多個行動裝置時,各個行動裝置的機器時間又可能是不統一,對這種情況的解決方案就是在每次資料同步時,利用Submit SQL技術重新整理伺服器時間,下載這個時間並同時設定為行動裝置的時間。
SQL Server CE 架構圖 所示。
Pull(拉資料)
拉資料就是Windows CE 從SQL Server 服務器擷取資料的過程,這裡也可以理解從伺服器中下載資料。使用者不必關心這之間的處理過程,只需要調用ISSCERDA介面的pull方法即可。Pull方法的定義如下:
Virtual /* [id] */ HRESULT STSMETHODCALLTYPY Pull(
/* [in] */ BSTR LocalTableName,
/* [in] */ BSTR SQLSelectString,
/* [in] */BSTR OLEDBConnectionString,
/* [defaultvalue][in] */ RDA_TRACKOPTION TrackOption
/* [defaultvalue][in] */BSTR ErrorTableName)=0;
參數 |
說明 |
LocalTableName |
將從伺服器擷取資料存放區到此表中。如果此表已經存在,將會發生錯誤。 |
SQLSelectString |
表示從伺服器擷取資料的SQL運算式,它將控制從伺服器取得什麼資料。同時也支援那些返回結果集的預存程序和視圖。如果是將伺服器中的多個表的資料傳遞到CE中的一個表,那麼應將TRACKOPTION的參數值設定成為TRACKINGOFF,表示擷取後的資料不能再上傳到伺服器。 |
OLEDBConnectionString |
串連到SQL Server伺服器的連接字串 |
RDA_TRACKOPTION |
表示SQL Serve CE是否跟蹤儲存擷取伺服器資料的表(LocalTableName)的變化。它取值是一個枚舉值,具有如表 所示的四個取值。 |
ErrorTableName |
表示CE本地錯誤表名。在以後調用Push方法向伺服器提交變化資料時。如果發生錯誤,此錯誤表將被建立,並被寫入錯誤資訊。如果調用Pull方法時,此錯誤表已經存在,將會發生錯誤。 |
表 參數TrackOption的取值
常量 |
值 |
說明 |
TRACKINGON |
1 |
對於接收到資料的表,SQL Serve CE將跟蹤所有的變化,主鍵約束將根據SQLSelectString被執行而被建立。此值是預設值。 |
TRACKINGOFF |
0 |
對於接收到資料的表,SQL Serve CE將不跟蹤所有的變化,主鍵約束在本地表中也是不會被建立 |
TRACKINGON_INDEXES |
2 |
對於接收到資料的表,SQL Serve CE將跟蹤所有的變化,索引和主鍵如果已經在SQL Server表中存在,並且欄位被指定在SQLSelectString查詢語句裡,那麼伺服器表中的索引和主鍵將建立到CE本地表中。 |
TRACKINGOFF_INDEXES |
3 |
對於接收到資料的表,SQL Serve CE將不跟蹤所有的變化,索引和主鍵如果已經在SQL Server表中存在,並且欄位被指定在SQLSelectString查詢語句裡,那麼伺服器表中的索引和主鍵將建立到CE本地表中。 |
Push(推資料)
推資料和拉資料是完全相反的兩個方法。推資料則是將CE本地庫中的資料上傳到伺服器中。Push方法的定義如下:
Virtual /* [id] */ HRESULT STSMETHODCALLTYPY Push(
/* [in] */ BSTR LocalTableName,
/* [in] */BSTR OLEDBConnectionString,
/* [defaultvalue][in] */ RDA_BATCHOPTION BatchOption)=0;
參數 |
說明 |
LocalTableName |
表示將向伺服器上傳的變化資料的表名 |
OLEDBConnectionString |
為串連到SQL Server伺服器的連接字串 |
RDA_BATCHOPTION |
表示上傳資料的方法。它取值是一個枚舉值,具有如表 所示的兩個取值。 |
表 參數BatchOption的取值
常量 |
值 |
說明 |
BATCHINGOFF |
|
上傳的資料被一條一條更新到伺服器 |
BATCHINGON |
|
上傳的資料被一次性的更新到伺服器 |
Submit(遠程T-SQL操作)
Submit方法可以執行遠程SQL語句,也就是可以將SQL語句傳遞到伺服器上直接執行,其定義如下:
Virtual /* [id] */ HRESULT STSMETHODCALLTYPY Submit(
/* [in] */ BSTR SQLString,,
/* [in] */BSTR OLEDBConnectionString,)=0;
屬性 |
說明 |
SQLString |
表示要執行的SQL語句 |
OLEDBConnectionString |
為串連到SQL Server伺服器的連接字串 |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1622083