Perst是一個簡單、快速、便捷的面向Java和.Net的數據庫。它可以直接將.net對象存儲,在Silverlight不需要web service的方式進行讀寫,而是直接讀寫。
本文將編寫一個實例進行perst的操作,下載一個PerstSilverlight.dll,然后引用它。
首先:在App.xaml.cs中Application_Startup()中建立Perst數據庫的實例,在Application.Exit()中關閉Perst數據庫。
private void Application_Startup(object sender, StartupEventArgs e) { //應用程序開啟時打開數據庫 Storage instanse = StorageFactory.Instance.CreateStorage(); //初始化數據庫文件為1M instanse.SetProperty("perst.file.extension.quantum", 1024 * 1024); //數據庫大小不夠時,每次增加512K instanse.SetProperty("perst.extension.quantum", 512 * 1024); instanse.Open("SLDemo.dbs"); db = new Database(instanse); this.RootVisual = new MainPage(); } private void Application_Exit(object sender, EventArgs e) { //應用程序關閉時關閉數據庫連接 db.Storage.Close(); }
其次:建立一個實體類繼承於Persistent,定義為索引的字段必須設置為Public。
/// <summary> /// 城市類 /// </summary> public class City : Persistent { //定義為索引 [FullTextIndexable] public string _CityName; /// <summary> /// 城市名稱 /// </summary> public string CityName { get { return _CityName; } set { _CityName = value; } } [FullTextIndexable] public string _CityNum; /// <summary> /// 城市電話區號 /// </summary> public string CityNum { get { return _CityNum; } set { _CityNum = value; } } public override void OnLoad() { base.OnLoad(); } //刪除 public override void Deallocate() { base.Deallocate(); } }
再次:實現前台界面的事件,並實現它。
public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void GetNum_1(object sender, RoutedEventArgs e) { BindCity(); } /// <summary> /// 綁定所有的城市,並且按照CityNum排序 /// </summary> private void BindCity() { List<City> list = App.db.Select<City>("order by CityNum").ToList(); this.dgrid.ItemsSource = list; } /// <summary> /// 查找到021號碼的區號對象並且刪除 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DeleteNum_2(object sender, RoutedEventArgs e) { City city = App.db.Select<City>("CityNum='021'").FirstOrDefault(); city.Deallocate(); App.db.Storage.Commit(); BindCity(); } /// <summary> /// 查找到020區號的對象進行修改 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void EditNum_4(object sender, RoutedEventArgs e) { City city = App.db.Select<City>("CityNum='020'").FirstOrDefault(); city.CityName = "上海市"; city.Store(); App.db.UpdateFullTextIndex(city); BindCity(); } /// <summary> /// 添加數據 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AddNum_3(object sender, RoutedEventArgs e) { App.db.AddRecord(new City() { CityName = "廣州", CityNum = "021" }); App.db.AddRecord(new City() { CityName = "北京", CityNum = "010" }); App.db.AddRecord(new City() { CityName = "上海", CityNum = "020" }); App.db.AddRecord(new City() { CityName = "成都", CityNum = "028" }); App.db.Storage.Commit(); } }
最后我們來看前台界面Xaml如下:
<Grid x:Name="LayoutRoot" Background="White"> <sdk:DataGrid Name="dgrid" HorizontalAlignment="Left" Height="181" Margin="10,80,0,0" VerticalAlignment="Top" Width="338"/> <Button Content="增加數據" HorizontalAlignment="Left" Margin="42,10,0,0" VerticalAlignment="Top" Width="75" Click="AddNum_3"/> <Button Content="獲取值" HorizontalAlignment="Left" Margin="160,10,0,0" VerticalAlignment="Top" Width="75" Click="GetNum_1"/> <Button Content="修改值" HorizontalAlignment="Left" Margin="42,48,0,0" VerticalAlignment="Top" Width="75" Click="EditNum_4"/> <Button Content="刪除值" HorizontalAlignment="Left" Margin="160,48,0,0" VerticalAlignment="Top" Width="75" Click="DeleteNum_2"/> </Grid>
下面是效果圖片,如需源碼請點擊 SLPerstDemo.rar 下載。