在上一篇《微软WP7本机数据库解决方案之SQLite》中我们简要介绍了Sqlite Client for Windows Phone的主要功能及相关的辅助开发工具。特别注意的是,我们通过工具类DBHelper实现了SQLite数据库与WP7系统本地存储功能的关联。在本篇文章中,我们将着手构建一个简单的Windows Phone 7客户端应用程序,并将具体探讨Sqlite Client for Windows Phone在WP7开发中的基本应用思路和相关编程技巧。
本系列文章中的案例程序调试环境:
- Windows 7;
- .NET 4.0;
- Visual Studio 2010;
- Windows Phone Developer Tools RTW;
- Sqlite Client for Windows Phone (http://sqlitewindowsphone.codeplex.com/);
- (推荐) sqlite-manager (http://code.google.com/p/sqlite-manager/);
- (推荐) MVVM Light Toolkit (http://mvvmlight.codeplex.com/).
一、构建简易数据驱动型WP7客户信息编辑器
启动Visual Studio 2010中创建一个简单的Windows Phone 7应用程序,并命名为WP7SQLiteClient。然后,打开解决方案,并添加一个到程序集Community.CsharpSqlite.WP.dll的引用(在上文中刚刚构建的Sqlite Client for Windows Phone源码工程的bin目录下)。
1.运行时的截图预览
为了能够更好地了解后文的解释,让我们首先看一下示例程序的运行时快照,如图1所示。
▲图1. 客户编辑器的初始画面
注意到,在最初的客户编辑器截图中只提供了三个使用Sqlite Manager工具创建的记录。当您点击按钮“Add”后将有五个客户被添加到客户表Customer中。在此示例中,我没有立即刷新屏幕。但是,如果您按下硬件后退按钮(我们已经使用了仿真器),然后再次导航回到这个屏幕,你便会看到新追加的5条记录,如图2所示。
▲图2. 五个客户记录添加到表Customer中
现在,按下图中的按钮“Del Last 1”,则数据库database1.sqlite中Customer表格中的最后一个记录将被删除。图3给出了相关截图。
▲图3. 最后一条记录从表Customer中删除
接下来,让我们看看后台代码中的具体编程技术。
#p#
2.后台代码编程
首先,为了实现数据库的全局访问的方便(例如从每一个子页面中访问数据库),我们最好在App类中定义一个公共属性db。
清单2:在App类中定义一个公共属性db方便数据库访问
publicpartialclassApp:Application { privateDBHelper_db; publicDBHelperdb { get { Assemblyassem=Assembly.GetExecutingAssembly(); if(_db==null) _db=newDBHelper(assem.FullName.Substring(0,assem.FullName.IndexOf(',')),"database1.sqlite"); return_db; } } //...其他省略
注意到,公共属性db关联到上文中的工具类DBHelper。另外,请注意我们是如何使用程序集相关操作并结合上文中SQLite数据库文件的Build Action属性来实现访问这个数据库文件的。
上述短短的代码足矣。接下来,让我们在示例页面TestDataEditor.xaml相应的后台代码文件TestDataEditor.xaml.cs中实现一些基本的初始化操作。
清单3:
//其他省略... usingWP7SQLiteClient.Dal; usingSystem.Collections.ObjectModel;//ObservableCollection usingSystem.ComponentModel; usingSQLiteClient; usingCommunity.CsharpSqlite; usingSystem.Collections; namespaceWP7SQLiteClient { publicpartialclassTestDataEditor:PhoneApplicationPage { ObservableCollection_customerEntries=null; publicTestDataEditor() { InitializeComponent(); //retrievedat stringstrSelect="SELECTID,Name,Email,DescFROMCustomerORDERBYIDASC"; _customerEntries=(Application.CurrentasApp).db.SelectObservableCollection(strSelect); foreach(Customerdatain_customerEntries) { TextBlockID.Text+=data.ID+Environment.NewLine; TextBlockName.Text+=data.Name+Environment.NewLine; TextBlockEmail.Text+=data.Email+Environment.NewLine; TextBlockDesc.Text+=data.Desc+Environment.NewLine; } } //其他省略...
在上面的代码中,我们首先定义了一个ObservableCollection 类型的变量_customerEntries。然后,在类构造器中我们建立了一个标准的SQL的SELECT命令的字符串。接下来,通过调用定义于全局App类中DBHelper类相关实例中的方法SelectObservableCollection,实现把所有客户的数据提取到变量_customerEntries中。最后,通过迭代一个结构集合,成功地实现了在屏幕上显示所有客户数据之目的。
接下来,再看看具体的相关编码吧。
1. 添加记录
现在,让我们看看是如何把五个样本客户数据添加到客户表中的。
清单4:
privatevoidbtnAdd_Click(objectsender,RoutedEventArgse) { DateTimestart=DateTime.Now; intrec; Randomrnd=newRandom(); stringstrInsert="InsertintoCustomer(Name,Email,Desc)values(@Name,@Email,@Desc)"; for(inti=0;i<5;i++) { Customertst=newCustomer { Name="Name"+i, Email=Name+"@"+"aaa.com", Desc="Descfor"+i }; rec=(Application.CurrentasApp).db.Insert<Customer>(tst,strInsert); } System.Diagnostics.Debug.WriteLine("\nInserted5"+"rows\r\nGeneratedin"+(DateTime.Now-start).TotalSeconds); }
2. 删除记录
删除操作更简单,如清单5所示。
清单5:
privatevoidbtnDel_Click(objectsender,RoutedEventArgse) { DateTimestart=DateTime.Now; stringstrDel="DeletefromCustomerwhereID="+"(SELECTCOUNT(*)FROMCustomer)"; (Application.CurrentasApp).db.Delete(strDel); }
在上面的代码,客户表中的最后一个记录将被删除。显然,要编写复杂和全功能的SQL语句,你应该先熟悉SQLite数据库相关的语法。事实上,这并不是一件难事,因为有关于SQLite的教程在网站可以轻松搞到(例如这里http://www.sqlite.org/lang.html)。
二、总结
在本系列文章中,我向您介绍了一款强大且易于使用的支持Windows Phone 7开发的开源嵌入数据库系统-Sqlite Client for Windows Phone。正如您所看到的,在文中,我给出的仅仅是有关Sqlite Client for Windows Phone的入门性使用方法。但是,也看到了基于传统型SQL数据库操作知识,你可以轻松掌握Sqlite Client for Windows Phone的使用。尽管如此,有关这款软件的真正实用性的技巧性的东西,还有待读者您的进一步挖掘。
转载请注明:IT运维空间 » 运维技术 » 微软WP7本地数据库之SQLite编程技巧
发表评论