2.后台代码编程
首先,为了实现数据库的全局访问的方便(例如从每一个子页面中访问数据库),我们最好在App类中定义一个公共属性db。
清单2:在App类中定义一个公共属性db方便数据库访问
- public partial class App : Application
- {
- private DBHelper _db;
- public DBHelper db
- {
- get
- {
- Assembly assem = Assembly.GetExecutingAssembly();
- if (_db == null)
- _db = new DBHelper(assem.FullName.Substring(0, assem.FullName.IndexOf(',')), "database1.sqlite");
- return _db;
- }
- }
- // ...其他省略
注意到,公共属性db关联到上文中的工具类DBHelper。另外,请注意我们是如何使用程序集相关操作并结合上文中SQLite数据库文件的Build Action属性来实现访问这个数据库文件的。
上述短短的代码足矣。接下来,让我们在示例页面TestDataEditor.xaml相应的后台代码文件TestDataEditor.xaml.cs中实现一些基本的初始化操作。
清单3:
- //其他省略...
- using WP7SQLiteClient.Dal;
- using System.Collections.ObjectModel;//ObservableCollection
- using System.ComponentModel;
- using SQLiteClient;
- using Community.CsharpSqlite;
- using System.Collections;
- namespace WP7SQLiteClient
- {
- public partial class TestDataEditor : PhoneApplicationPage
- {
- ObservableCollection _customerEntries = null;
- public TestDataEditor()
- {
- InitializeComponent();
- //retrieve dat
- string strSelect = "SELECT ID,Name,Email,Desc FROM Customer ORDER BY ID ASC";
- _customerEntries = (Application.Current as App).db.SelectObservableCollection(strSelect);
- foreach (Customer data in _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:
- private void btnAdd_Click(object sender, RoutedEventArgs e)
- {
- DateTime start = DateTime.Now;
- int rec;
- Random rnd = new Random();
- string strInsert = " Insert into Customer (Name,Email,Desc) values (@Name,@Email,@Desc)";
- for (int i = 0; i < 5; i++)
- {
- Customer tst = new Customer
- {
- Name = "Name " + i,
- Email = Name + "@" + "aaa.com",
- Desc = "Desc for " + i
- };
- rec = (Application.Current as App).db.Insert < Customer>(tst,strInsert);
- }
- System.Diagnostics.Debug.WriteLine("\nInserted 5 " + " rows\r\nGenerated in " + (DateTime.Now - start).TotalSeconds);
- }
2. 删除记录
删除操作更简单,如清单5所示。
清单5:
- private void btnDel_Click(object sender, RoutedEventArgs e)
- {
- DateTime start = DateTime.Now;
- string strDel = " Delete from Customer where ID="+ "(SELECT COUNT(*) FROM Customer)" ;
- (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的使用。尽管如此,有关这款软件的真正实用性的技巧性的东西,还有待读者您的进一步挖掘。