多样化实现Windows Phone 7本地数据库访问<上>

  最近个人的时间显得比较紧迫,有一些想法一直没有时间去验证,上周五在MSDN上公布的活动Silverlight Events:与John Papa面对面学习Silverlight 4中因为一时疏忽赶到MSDN会客厅是活动已经结束了。 不过我顺便看看活动中对JohnPapa提出问题: 其中有人明确提出Silverlight 下一版本会把本地数据库访问支持是否会在下一个Silverlight版本加入?[可惜我没有看到John Papa本人的回复],这突然让我联想到最近一直在看官方公布开源项目中Windows Phone 7对本地数据数据库操作方式, 恰好上周我做了一个SQlite相关测试。 有意无意间让我把Windows Phone 7 对本地数据库Local DataBase访问与开源数据库联系在一起。如下是我个人对WP7本地数据库访问方式的验证,如有疑问请及时提出。

  Windows Phone 7在CTP 版本时微软官方就对开发者提出问题做了两次集体回应. 一次是在3月19日 另外一次是5月19日.回复内容详见Windows Phone 7 Series Developer General FAQ (Updated 5/19/2010), 内容中包含了WP7开发中多个细节和下一步需要改善的方向等做了明确回复. 当然其中也包含了大家很关心的数据访问. 具体回应内容如下:

在Windows Phone 7 Series的设备上有没有本地数据库可以利用?
没有,在最初的Windows Phone 7 Series上没有本地数据库API可以利用
我应该如何为我的应用程序存储信息?
你可以将信息存储在自己的存储空间里。如果你需要大型的数据库这里有一些选择:Windows Phone 7 Seires 已经支持WebServices,它可以让你容易的访问存储在InterNET上的信息。使用一个可以被WebServices访问的数据库,你的应用程序就可以在连接InterNET的情况下实时的获取数据.

以后会支持本地数据库吗?
当前我们没有宣告这样的计划来增加这一功能;但是我们会密切关注开发人员和用户的需求并识别哪些特性会给每个人带来好处

  如上翻译过来,更多细节请查看原文.

  目前WP7已经是Beta版本了. Windows Phone 7 支持访问数据几种方式为: XML、Isolated Storage[SL独立存储]、Cloud[云存储].    官方意思很明确 暂不支持本地数据库访问. 难道我们真的没有其他选择吗?未必如此.

  <1>Effiproz For Windows Phone 7

  在上一篇中由Effiproz DataBase来看.NET开源数据库发展我提到Effiproz开源数据库.NET多方面支持,其中就包含WP7.这为我们把Effiproz本地数据库提供访问WP7数据提供了可能.首先说明Effiproz运用在WP7条件:  Windows Phone Developer Tools Beta[最新版本]/VS2010[工具].

  首先创建一个WP7程序 引入Effiproz数据库DLL[详见源码下载]到项目中:

  创建一个界面用户输入用户名和密码并 保存到Effiproz数据库中:

  插入成功后自动查询并实现出来:

  也许有人会注意到两个FileDB和MemoryDB 按钮. 其实对应后台中Effproze数据两种存储数据模式:文件和内存模式. 上篇中我就曾讲到第一个纯.NET版本开源数据库出现问题矛盾就是这两种模式. 内存模式中数据提取直接 速度较快. 免去File模式读取硬盘IO和每次创建Connection的时间. 但是缺点也很致命. 速度虽然有了一定提升 但最终代价是我们数据无法再内存消失后存储. 也就是数据最终无法持久化存储文件中.  EffProze就是从HSQL继承而来. 所以保存这两种模式 供用户更多场景下选择. 先看一下FileDB模式代码实际创建:

private void btnFile_Click(object sender, RoutedEventArgs e)
{
//isolated storage database
string connectionString = "connection type=FILE; initial catalog=TestDb; user=SA; password=";
using (EfzConnection conn = new EfzConnection(connectionString))
{
conn.Open();
string sql = "CREATE TABLE Test(username varchar(100), password varchar(100));";
EfzCommand cmd
= conn.CreateCommand();
cmd.CommandText
= sql;
cmd.ExecuteNonQuery();
//获取输入数据
string getusername = this.nametxt.Text;
string getpass = this.passtxt.Text;
sql
= "INSERT INTO Test(username , password ) VALUES('" + getusername + "','"+getpass+"');";
cmd.CommandText
= sql;
int count=cmd.ExecuteNonQuery();
if (count == 1)
{
MessageBox.Show(
"数据插入成功!");
}
else
{
MessageBox.Show(
"数据插入失败!");
}
//执行查询操作
sql = "SELECT * FROM TEST;";
cmd.CommandText
= sql;
EfzDataReader reader
= cmd.ExecuteReader();
reader.Read();
//添加结果显示
//MessageBox.Show(string.Format("用户名={0} —— 登录密码={1}", reader.GetInt32(0), reader.GetString(1)));
tbkText.Text = String.Format("用户名 = {0}, 登录密码 = {1}, 模式=文件模式 ", reader.GetString(0), reader.GetString(1));
}
}

it知识库多样化实现Windows Phone 7本地数据库访问&amp;lt;上&amp;gt;,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。