SQLite on Windows Phone 7
SQLite是一个轻量级的、快速的、嵌入式数据库,开源,官方主页是http://www.sqlite.org/index.html,从诞生起就吸引了很多开发人员的关注。其拥有各大技术阵营的分支,也赢得了部分IT巨头的青睐,是快速开发的利器。尤其在移动领域,SQLite的优势愈加明显,Symbian、Android甚至iPhone上都可以完美的运行SQLite,但是Windows Phone 7发布时,却缺失了对本地数据库的支持。现在Windows Phone 7的最新版本是2010 April Refresh,只能使用临时存储区、XML或Cloud来存取数据,实在让人郁闷。前两天SQL CE 4发布了,且支持ASP.NET,希望以后能用于Windows Phone 7吧。
虽然缺少官方支持,但是国外有人改写了C# SQLite,使之能在Windows Phone 7上运行,可以在这里查看。(需要FQ)我测试了一下,还不错,有点小问题。此外,CodePlex上有人发布了全部由临时存储区操作的Windows Phone 7 DB项目,支持No-SQL操作,挺好的,感兴趣的朋友可以试试。本次我们来试试在Windows Phone 7上操作SQLite。
测试环境:
Windows Server 2008 R2 DataCenter
Visual Studio 2010 Ultimate
Windows Phone 7 Develop Tools 2010 April Refresh
C# SQLite WP
1、建立一个Silverlight for Windows Phone 的项目:
2、添加C# SQLite WP的引用:
3、放置如下控件:(由于Windows Phone 7现在还不支持中文,故全部用英文,请见谅)
4、测试很简单,点击【AddUser】按钮后,将用户输入添加进数据库:
private string _strDB = @"Test.db3";
private void fn添加用户()
{
string msg = string.Empty;
Sqlite3.sqlite3 db = new Sqlite3.sqlite3();
int rc = Sqlite3.sqlite3_open(this._strDB, ref db);
if (rc == Sqlite3.SQLITE_OK)
{
string sql1 = @"CREATE TABLE Users
(
UserName VARCHAR(20) PRIMARY KEY,
UserPass VARCHAR(50),
Email VARCHAR(50)
)";
Sqlite3.sqlite3_exec(db, sql1, (Sqlite3.dxCallback)this.callback, null, ref msg);
string sql2 = @"INSERT INTO Users(UserName, UserPass, Email)
VALUES('" + this.txtUserName.Text + @"', '" + this.txtUserPass.Password + @"', '" + this.txtEmail.Text + @"')";
int result = Sqlite3.sqlite3_exec(db, sql2, (Sqlite3.dxCallback)this.callback, null, ref msg);
if (result == Sqlite3.SQLITE_OK)
{
System.Windows.MessageBox.Show("Success!", "Add User", MessageBoxButton.OK);
}
else
{
System.Windows.MessageBox.Show("Error!", "Add User", MessageBoxButton.OK);
}
}
}
我没有找到用绝对路径创建数据库的方法,以及打开现有的数据库的方法,若有朋友知道,请指点一下。
这里输入密码时有点小问题,可能由于延迟,造成密码的字符先显示了一下,然后才会变成“*”。
本项目仅仅为了测试,只做了最基本的非空验证。
5、小结
尽管Windows Phone 7现在对本地数据库的支持还不是很好,但是鉴于其在微软移动战略中的重要地位,等正式版发布后肯定会有所改善,可能是SQL CE 4,或者新的本地数据库,到时也一定会有第三方解决方案的。现在Windows Phone 7的UI控件有点匮乏,连GridView都没有,希望能再改善吧。本次的测试代码很简单,主要是SQLite中的相关操作,看看文档示例即可以入门。SQLite的功能远不如此,感兴趣的朋友可以再深入挖掘。