微软WP7本地数据库之SQLite编程技巧

在上一篇《微软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问题

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/268018.html<

(0)
管理的头像管理
上一篇2025-05-06 16:50
下一篇 2025-05-06 16:51

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注