|
在上一篇多樣化實(shí)現(xiàn)Windows Phone 7本地?cái)?shù)據(jù)庫訪問<上>采用兩種方式Effproze和SQlite來驗(yàn)證Window Phone 7訪問本地?cái)?shù)據(jù)庫.驗(yàn)證結(jié)論是可行的. 得到圓友及時(shí)反饋當(dāng)然也發(fā)現(xiàn)一些細(xì)節(jié)上問題. 例如Effproze利用文件/內(nèi)存模式 找不到指定的硬盤上數(shù)據(jù)庫文件. Sqlite中支持Windows Phone 7 API沒有相關(guān)文檔. 以及SQlite創(chuàng)建后類似Effproze找不到指定存儲(chǔ)文件等?類似這些問題 正在尋找和驗(yàn)證相關(guān)解決方案 稍后我會(huì)專門整理出一篇文章來詳細(xì)說明. 本篇將繼續(xù)驗(yàn)證Windows Phone 7訪問本地?cái)?shù)據(jù)庫其他方式-Windows Phone DB
<1>初識(shí)Windows Phone DB
其實(shí)看到Windows Phone DB[以下簡(jiǎn)稱WPDB]很偶然機(jī)會(huì).當(dāng)時(shí)我正在研究另外一家英國移動(dòng)軟件開發(fā)集成商自己做的開源數(shù)據(jù)庫方式實(shí)現(xiàn)對(duì)WP7本地?cái)?shù)據(jù)庫訪問.[詳細(xì)見Windows Phone 7 gets open source database]時(shí)碰見WPDB的. 一個(gè)群組UK-Grouper 的DVP向我推薦Windows Phone DB.
WPDB是利用Silverlight的獨(dú)立存儲(chǔ)[IsolatedStorage]機(jī)制為WP7訪問數(shù)據(jù)庫加以支持. 目前的版本只是針對(duì)開發(fā)人員. 使用簡(jiǎn)單. 開源. 其實(shí)它內(nèi)部存儲(chǔ)數(shù)據(jù)的實(shí)質(zhì)就是利用IsolatedStorage. Silverlight的IsolatedStorage是一種類似Cookie的靜態(tài)存儲(chǔ)機(jī)制.可以將一些基本類型(String,Int)的信息甚至是自定義類型序列化后的靜態(tài)存儲(chǔ)于客戶端文件中.
獨(dú)立存儲(chǔ)[IsolatedStorage]是一個(gè)局部信任機(jī)制. 什么叫局部? 當(dāng)你創(chuàng)建一個(gè)Silverlight應(yīng)用程序時(shí)會(huì)在硬盤上創(chuàng)建相應(yīng)獨(dú)立的存儲(chǔ)區(qū)域. 這里面獨(dú)立是相對(duì)于不同Silverlight Project而言的. 當(dāng)然如果應(yīng)用程序中存在多個(gè)程序集[Project],那么存儲(chǔ)空間在這多個(gè)程序集之間是共享的.
Silverlight限制了客戶端Silverlight應(yīng)用程序不能訪問全部的文件系統(tǒng),只能通過獨(dú)立存儲(chǔ)機(jī)制提供虛擬文件系統(tǒng),訪問數(shù)據(jù)流對(duì)象. 這樣一來類似我們Application 有了自己一塊硬盤空間一樣.獨(dú)立存儲(chǔ)空間內(nèi)就可以放置任意類型的文件. XML /.txt等. 4版本中空間大小也是可以控制的. 更多資源請(qǐng)參考.Introduce IsolatedStorage MSDN 由此也能看出Silverlight也涵蓋WP7日常開發(fā) 當(dāng)然還有Silverlight能做還不止這些 如下圖:Silverlight 涵蓋圖。
<2>Windows Phone DB給我們帶來什么?
先不著急回答這個(gè)問題.WPDB是開源的 你在可以在CodePlex上下載它相關(guān)源碼:DownLoad on the CodePlex: Windows Phone DB[源碼下載]
下載完源碼用VS工具打開.預(yù)覽整個(gè)Solutions:
Solutions中包含兩個(gè)項(xiàng)目: 第一個(gè)為WPDB的源碼項(xiàng)目 下面是對(duì)WPDB測(cè)試項(xiàng)目. 二者關(guān)系是測(cè)試項(xiàng)目對(duì)源碼項(xiàng)目采取了引用. 先不管那么多運(yùn)行起來看看效果:
頁面只有一個(gè)Run tests按鈕. 點(diǎn)擊后運(yùn)行提示Test Completed 測(cè)試完成 我們來看Button按鈕下事件下代碼的調(diào)用:[注釋是自己添加的]
private void RunTests_Click(object sender, RoutedEventArgs e)
{
//獲取測(cè)試項(xiàng)
foreach (var item in ResultPanel.Children)
{
if (item is TextBlock)
{
((TextBlock)item).Foreground = new SolidColorBrush(Colors.White);
}
}
CreateDBTest();//創(chuàng)建DataBase
CreateTableTest();//Create Table
SaveTest();//Save Config
SaveSingleTableTest();//保存單表
OpenTest();//打開數(shù)據(jù)庫
AddRangeTest();//添加一個(gè)范圍數(shù)據(jù)[20條]
RemoveRangeTest();
RemoveRangeConditionTest();
SaveFailsTest();//保存記錄
SaveWithEncryptionTest();//保存加密后數(shù)據(jù)-[看來還考慮加密]
OpenWithEncryptionTest();//打開機(jī)密數(shù)據(jù)
SelectConditionTest();
LazyLoadingTest();//還有延遲加載-[很意外啊]
AddRowToExistingTableTest();//添加一行數(shù)據(jù)庫
AddRowToExistingTableTestLazyLoad();
DatabaseExists();//關(guān)閉數(shù)據(jù)庫鏈接
//測(cè)試完成提示
MessageBox.Show("Test completed", "Silverlight Phone Database", MessageBoxButton.OK);
}
it知識(shí)庫:多樣化實(shí)現(xiàn)Windows Phone 7本地?cái)?shù)據(jù)庫訪問&lt;下&gt;,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。