微软WP7本地数据库之SQLite编程技巧
创始人
2024-07-29 09:31:11
0

在上一篇《微软WP7本机数据库解决方案之SQLite》中我们简要介绍了Sqlite Client for Windows Phone的主要功能及相关的辅助开发工具。特别注意的是,我们通过工具类DBHelper实现了SQLite数据库与WP7系统本地存储功能的关联。在本篇文章中,我们将着手构建一个简单的Windows Phone 7客户端应用程序,并将具体探讨Sqlite Client for Windows Phone在WP7开发中的基本应用思路和相关编程技巧。

本系列文章中的案例程序调试环境:

  1. Windows 7;
  2. .NET 4.0;
  3. Visual Studio 2010;
  4. Windows Phone Developer Tools RTW;
  5. Sqlite Client for Windows Phone (http://sqlitewindowsphone.codeplex.com/);
  6. (推荐) sqlite-manager (http://code.google.com/p/sqlite-manager/);
  7. (推荐) 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方便数据库访问

  1. public partial class App : Application  
  2. {  
  3.    private DBHelper _db;  
  4.    public DBHelper db  
  5.    {  
  6.       get 
  7.       {  
  8.          Assembly assem = Assembly.GetExecutingAssembly();  
  9.          if (_db == null)  
  10.             _db = new DBHelper(assem.FullName.Substring(0, assem.FullName.IndexOf(',')), "database1.sqlite");  
  11.          return _db;  
  12.       }  
  13.    }  
  14. // ...其他省略 

注意到,公共属性db关联到上文中的工具类DBHelper。另外,请注意我们是如何使用程序集相关操作并结合上文中SQLite数据库文件的Build Action属性来实现访问这个数据库文件的。

上述短短的代码足矣。接下来,让我们在示例页面TestDataEditor.xaml相应的后台代码文件TestDataEditor.xaml.cs中实现一些基本的初始化操作。

清单3:

  1. //其他省略...  
  2. using WP7SQLiteClient.Dal;  
  3. using System.Collections.ObjectModel;//ObservableCollection  
  4. using System.ComponentModel;  
  5. using SQLiteClient;  
  6. using Community.CsharpSqlite;  
  7. using System.Collections;  
  8. namespace WP7SQLiteClient  
  9. {  
  10.    public partial class TestDataEditor : PhoneApplicationPage  
  11.    {  
  12.       ObservableCollection _customerEntries = null;  
  13.       public TestDataEditor()  
  14.       {  
  15.          InitializeComponent();  
  16.          //retrieve dat  
  17.          string strSelect = "SELECT ID,Name,Email,Desc FROM Customer ORDER BY ID ASC";  
  18.          _customerEntries = (Application.Current as App).db.SelectObservableCollection(strSelect);  
  19.          foreach (Customer data in _customerEntries)  
  20.          {  
  21.             TextBlockID.Text += data.ID + Environment.NewLine;  
  22.             TextBlockName.Text +=data.Name + Environment.NewLine;  
  23.             TextBlockEmail.Text +=data.Email + Environment.NewLine;  
  24.             TextBlockDesc.Text +=data.Desc + Environment.NewLine;  
  25.          }  
  26.       }  
  27. //其他省略... 

在上面的代码中,我们首先定义了一个ObservableCollection 类型的变量_customerEntries。然后,在类构造器中我们建立了一个标准的SQL的SELECT命令的字符串。接下来,通过调用定义于全局App类中DBHelper类相关实例中的方法SelectObservableCollection,实现把所有客户的数据提取到变量_customerEntries中。最后,通过迭代一个结构集合,成功地实现了在屏幕上显示所有客户数据之目的。

接下来,再看看具体的相关编码吧。

1. 添加记录

现在,让我们看看是如何把五个样本客户数据添加到客户表中的。

清单4:

  1. private void btnAdd_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.    DateTime start = DateTime.Now;  
  4.    int rec;  
  5.    Random rnd = new Random();  
  6.    string strInsert = " Insert into Customer (Name,Email,Desc) values (@Name,@Email,@Desc)";  
  7.    for (int i = 0; i < 5; i++)  
  8.    {  
  9.       Customer tst = new Customer  
  10.       {  
  11.          Name = "Name " + i,  
  12.          Email = Name + "@" + "aaa.com",  
  13.          Desc = "Desc for " + i  
  14.       };  
  15.       rec = (Application.Current as App).db.Insert < Customer>(tst,strInsert);  
  16.    }  
  17.    System.Diagnostics.Debug.WriteLine("\nInserted 5 " + " rows\r\nGenerated in " + (DateTime.Now - start).TotalSeconds);  

2. 删除记录

删除操作更简单,如清单5所示。

清单5:

  1. private void btnDel_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.    DateTime start = DateTime.Now;  
  4.    string strDel = " Delete from Customer where ID="+ "(SELECT COUNT(*) FROM Customer)" ;  
  5.    (Application.Current as App).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的使用。尽管如此,有关这款软件的真正实用性的技巧性的东西,还有待读者您的进一步挖掘。


 

【编辑推荐】

  1. 微软WP7本地数据库之Sterling编程技巧
  2. WP7开发中的数据库系统选择
  3. 微软WP7本机数据库解决方案之SQLite
  4. 为您介绍几款开源的数据挖掘工具
  5. 告诉你如何解决MySQL server has gone away问题

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...