多样化实现Windows Phone 7本地数据库访问1
最近个人的时间显得比较紧迫. 有一些想法一直没有时间去验证.上周五在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的设备上有没有本地数据库可以利用? 以后会支持本地数据库吗? |
如上翻译过来,更多细节请查看原文.
目前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) 22: {
- 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));
- }
- }
EffProze数据库基本上引入T-SQL大部分关键字支持,基本上合ADO.NET连接数据库方式雷同. 这也让.NET程序员不用再看EffProze新的API痛苦,而通过ADO.NET方式对比即可轻松编码.在代码中连接字符串中connection type=FILE/Memory 每次连接都需要指定采用数据库模式. 这是必须的. Memory模式大同小异不在赘述.
当有了EffProze数据库在WP7中作一些复杂数据操作. 是否考虑我们我们这样在代码方式太过粗糙原始. 我们需要一个查询工具.
当然EffPoze官方也为我们考虑到这点. 特意推出一款QueryTool. 当然有多个版本的,你想快速体验可以访问QueryTool in Silverlight 4 liveDemo 把QueryTool利用Silverlight 版本 4来实现. 另外一个版本需要到官方下载 QueryTool 1.2 Version[点击下载]: 提示目前工具支持.NET版本是3.5以上 本地运行:
如上提示我们需要打开数据库文件,Effproze数据库文件格式为: [.properties] 编写的SQL脚本对应格式为:[.Script]和SQl那一套完全不同. 下载文件中有实例数据库SamplyDB. 打开:
很简单布局,类似SQLSErver. 对T-SQl标准中关键字全面进行高亮支持. 这比SQlite工具要友好. 但我个人使用总体觉得很难受. 用户体验不太好. 其中涉及几个方面:
A:对T-Sql标准的有些关键字语法检查太过于严密. 大小写敏感. 写T-Sql出错几率大大增加.
B:工具功能过于简单. 左边菜单中除了展出和隐藏没有任何对DataBase和表 以及View /Proc的直接操作 只能用T-sql, 这样一来 我们队数据库操作全部靠T-sql 工作量剧增.
C:最令我不舒服的是 每次出现错误提示太过于简单. 特别大批量T-SQl 无法准确定位错误大概位置 那就更让人望而生畏了.
D:没有批量数据导入导出. 对于数据插入 没有这样的功能 工作量 真是太令人后怕了.
所以这个对使用这个工具原则是: 能避免使用就尽量避免使用. 基本上我昨天调试一个对数据库所有存储过程加密 调到最后看到下面始终不变错误提示我先崩溃掉了.真是很杯具啊. 各位也可以适当使用.
如上是EffProze数据库对WP7数据访问支持一个简单示例以及基本工具使用. 如有疑问请在留言中提出.我会及时回复 ,提供EffProze use In WP7
×××见附件。
<2>SQlite For Windows Phone 7
在本地数据库访问其实我最先尝试SQlite,作为移动平台Android默认数据库大量运用,没有其他原因—只是因为我个人对Sqlite操作很熟. 虽然没有了WP7官方的支持. 但是开源社区力量无线的. 国外有人改写开源Sqlite 3版本使其支持WP7本地数据访问. 我们需要添加一个DLL: Community.CsharpSqlite.WP.dll [源码中]引用.
创建一个简单页面测试 添加数据后自动查询数据并显示ListBox中:
插入数据成功 把插入数据通过自动查询方式显示在ListBox中 添加数据代码:
- private void AddUserInfor_Click(object sender, RoutedEventArgs e)
- {
- //用户信息
- WP7_LocalDBDemo.DataEntity.Customer newcustomer = new DataEntity.Customer
- {
- Username=this.username.Text,
- Password=this.passsword.Text
- };
- string dbname = @"wp7db.db3";
- string getreply = string.Empty;//回调信息
- //如果数据库文件不存在 自动创建
- Sqlite3.sqlite3 newsqlite = new Sqlite3.sqlite3();
- int getres = Sqlite3.sqlite3_open(dbname,ref newsqlite);
- if (getres == Sqlite3.SQLITE_OK)
- {
- //创建表
- string sql = @"Create Table Customer
- (
- customername varchar(100),
- customerpass varchar(100)
- ) ";
- Sqlite3.exec(newsqlite, sql, 0, 0, 0);
- string insertsql = @"insert into Customer Values('"+newcustomer.Username+"','"+newcustomer.Password+"')";
- int getinsertres = Sqlite3.exec(newsqlite, insertsql, 0, 0, 0);
- if (getinsertres == Sqlite3.SQLITE_OK)
- {
- MessageBox.Show("数据插入成功!");
- }
- else
- {
- MessageBox.Show("数据插入失败!");
- }
- //自动查询数据
- string querysql = @"select * from Customer";
- Sqlite3.dxCallback getcallback = new Sqlite3.dxCallback(TakeCallmethod);
- int getlocalres=Sqlite3.sqlite3_exec(newsqlite,querysql,getcallback,null,ref getreply);
- if (getlocalres == Sqlite3.SQLITE_OPEN_READWRITE)
- {
- //需要一个执行Reader API?
- //this.listBox1.Items.Add(getresdd.ToString());
- }
- }
- }
SQlite 3修改后能够支持对WP7数据访问 .大概方式基本同EffProze有些雷同. 但是在实际编码中.Effproze封装API的基本同ADO.NET相似. 这样广大的.NET程序员无需再熟悉EffProze数据库自己API, 而修改SQlite 3支持WP7 不同的是. 这里SQlite 3完全创造自己的一套API. 和原来支持.NET 访问的ADO.NET For SQlite 3 DataProvders完全不同. 没有任何关联.
那就痛苦了.所以我们需要一个SQlite 3访问WP7 的详细API. 但是很遗憾.如果访问到这份API 需要***.具体地址:Sqlite 3 For Windows Phoen Created API访问地址: Sqlite 3 For Wp7 API 如有哪位同志***成功 请备份这份API贡献出来吧.
SQlite 3支持了WP7的本地数据访问. 但是SQlite 3与EffProze最大特点是Sqlite 3没有数据库链接模式之分[内存/文件模式], 我在做完这个实例后 测试发现. 硬盘上不存在wp7db.db3这个文件. 因此我怀疑修改后SQlite 3版本对数据存储模式应该放到内存中的. 当然这是我个人猜测. 没有得到作者本人的证实.
如上写了一个建的Sqlite For Wp7 DEmo. ×××见附件。
<3>结语
本篇主要验证EffProze和修改Sqlite 数据库对Windows Phone 7 本地数据访问支持. 测试结果是可行的.这是第一篇 下一篇我会详细介绍其他方式来做WP7本地数据访问. 当然如上也是我个人测试. 难免会有纰漏的地方. 如果哟疑问请及时留言. 我会及时回复.
参考资料:
Sqlite 3 For Windows Phoen Created
Sqlite 3 For Wp7 API
LocalDAtaBase For Windows Phone 7
DotaSys Windows Phone 7 Demo
转载于:https://blog.51cto.com/chenkai/764701
多样化实现Windows Phone 7本地数据库访问1相关推荐
- 多样化实现Windows phone 7本地数据访问5——深入Rapid Repository
上一篇多样化实现Windows Phone 7本地数据访问<4>--Rapid Repository 中初步的介绍Repid Repository作为Windows phone 7数据库 ...
- 多样化实现Windows Phone 7本地数据访问3——DB4O
终于把这篇文章发出来了. 对于Windows Phone 7 Visit Local DataBase新采用DB4O和SiaqoDB方式来验证 本地数据访问. 其实这篇已经在上周 完成一个大概草稿. ...
- Windows系统启动MongoDB本地可以访问,远程连接不上问题
我在windows系统上安装了mongodb之后,本地测试了一下,可以连接上,但是远程访问时候发现连接被拒绝.网上百度说是配置文件默认只能访问本地,需要改mongod.cfg配置文件.然而改了之后重启 ...
- Windows Phone本地数据库(SQLCE):5、[Association]attribute(翻译)(转)
这是"windows phone mango本地数据库(sqlce)"系列短片文章的第五篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆 ...
- Windows Phone本地数据库(SQLCE):11、使用LINQ查询数据库(翻译) (转)
这是"windows phone mango本地数据库(sqlce)"系列短片文章的第十一篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将 ...
- Windows Phone本地数据库(SQLCE):3、[table]attribute(翻译) (转)
这是"windows phone mango本地数据库(sqlce)"系列短片文章的第三篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆 ...
- Windows Phone本地数据库(SQLCE):13、更新数据(翻译)
这是"windows phone mango本地数据库(sqlce)"系列短片文章的第十三篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将 ...
- 搭建阿里云Windows版服务器+使用宝塔安装MySQL数据库+本地Navicat访问数据库(增删改查)——详细流程
阿里云Windows服务器建设MySQL数据库流程 一.需要准备 1. 购买阿里云服务器选型 2.本机电脑远程登录 3. 购买域名(按项目需求添加) 二.搭建过程: 1. 安装宝塔面板 2. 回到本机 ...
- 搭建阿里云Linux版服务器+使用docker安装EMQ、Node-RED、MySQL+本地Navicat访问数据库(增删改查)——详细流程
搭建阿里云Linux版服务器+使用docker安装EMQ.Node-RED.MySQL+本地Navicat访问数据库 云服务器基础搭建 注册云服务器 XShell简介 部署EMQ 部署docker 物 ...
- c 访问阿里云mysql_本地怎样访问阿里云mysql数据库服务器
全网最新活动请看下方内容或右侧内容! --------------- 本地怎样访问阿里云mysql数据库服务器,在阿里云上放数据库. 对于大多数小型或初期项目来说,我们可能常用的做法是先将web.数据 ...
最新文章
- ## Hive分析疫情数据
- AI企业下一个使命:让生物特征数据使用走向阳光透明
- T-SQL的高级查询详解(一)--函数的综合应用
- fastadmin弹框提示不起作用 confirm
- 【采用】信用风险模型(申请评分、行为评分)与数据准备(违约期限、WOE转化)
- 【收藏】Vue中ref和$refs的介绍及使用
- java 堆内存分析_JVM内存堆布局图解分析
- codeproject上发现的DataSet调试利器
- Java toString()方法
- RK平台LCD调试说明
- 无刷驱动设计——浅谈MOS驱动电路
- sRGB标准与伽马校正 理解
- Ubuntu14.04/16.04安装Dukto
- python画图代码太阳花七行代码_写代码并不枯燥“用Python几行代码教你画出太阳花”...
- 网站ssl证书错误是为什么?要怎么解决ssl证书错误
- xx:xx,xx:xx规则的字符串怎么解析呢
- QBC和QBE查询方法
- SpiderMonkey教程
- GB28181协议--SIP协议介绍
- 使用LVM对服务器磁盘进行扩容