Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1071596
  • 博文数量: 403
  • 博客积分: 10272
  • 博客等级: 上将
  • 技术积分: 4407
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 14:22
文章分类

全部博文(403)

文章存档

2012年(403)

分类: 嵌入式

2012-03-18 17:39:05

Windows Phone OS 7.1,可以将关系数据存储在驻留在应用程序独立存储容器的本地数据库中。Windows Phone 应用程序使用 LINQ to SQL 执行所有数据库操作;LINQ to SQL 用于定义数据库架构、选择数据,并将更改保存到驻留在独立存储中的基础数据库文件;提到LINQ to SQL,你会不会感到欣喜,It’s amazing在window phone里我们居然可以这样来持久化数据 :),本文将带领大家一同建立第一个windows phone本地数据库应用--联系人管理。

本系列包括以下:

1.数据库创建

2.从独立存储中找到数据库文件并copy到pc上

3.复用2中的数据库(其他程序使用2中的数据库文件或者使用2中初始的数据)

前一篇我们已经将数据库物理文件copy到了pc文件目录里了,而我们这么做的最终目的当然是复用或者在其他应用里引用这个数据库,因为它现在已经有物理结构还有我们初始化的数据,我们在这里可以称之为内置数据了,因为其他应用引用这个数据库时,可以直接读取到它现在里面的数据,当然可以进行增删改查;好了,let’s go.

1.首先在解决方案里创建一个新的windows phone程序,Demo里为MangoDataBaseTest

2.将之前的ContactorDataContext.cs文件复制到MangoDataBaseTest项目(包括类:ContactorDataContext,DataBaseManager,还有其他的Model),因为它们负责ORMapping,以及数据库的管理;

3.将上一篇中我们导出的MyContactor.sdf文件复制到MangoDataBaseTest项目里,属性中的生成设置为“内容”,复制设置为“始终复制”

image

设置这些后当部署本地数据库时,数据库物理文件将存储在部署后的安装文件夹中。安装文件夹为只读。主应用程序可以通过只读方式连接到该数据库,或将其复制到独立存储以进行读写操作;当然我们的Demo对数据库不能是只读操作,所以我们需要把数据库物理文件移动到独立存储中去,当然这个要在程序里实现;

当然如果要以只读方式连接到数据库DataContext需要这样连接:

ContactorDataContext db = new ContactorDataContext("Data Source = 'appdata:/Resources/MyContactor.sdf'; File Mode = read only;");tips:在文件路径中使用 appdata 前缀来区分安装文件夹 (appdata) 中的路径和独立存储 (isostore) 中的路径;若没有前缀,则数据上下文将应用独立存储的路径下面Demo是采用复制数据库文件到独立存储中的方法;

4.将数据库物理文件复制到独立存储中

 在DataBaseManager中添加如下方法:

     ///
/// 将数据库文件复制到独立存储
///

public static void MoveReferenceDatabase()
{
//独立存储中是否已经存在数据库文件
bool i***ists = DataBaseManager.Exists();
if (!i***ists)//独立存储中不存在数据库文件则执行复制
{
//将数据库文件移动到独立存储,方便读写
IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication();
using (Stream input = Application.GetResourceStream(new Uri("Resources/MyContactor.sdf", UriKind.Relative)).Stream)
{
using (IsolatedStorageFileStream output = iso.CreateFile("MyContactor.sdf"))
{
byte[] readBuffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
output.Write(readBuffer, 0, bytesRead);
}
}
}
}
}

///
/// 是否存在数据库文件
///

///
public static bool Exists()
{
bool i***ists = false;
using (ContactorDataContext db = new ContactorDataContext(DBConnectionString))
{
i***ists = db.DatabaseExists();
}
return i***ists;
}

在App.xaml.cs中的构造函数中调用:

image

5.ui则可以直接复制MangoDataBaseDemo项目里的main.xaml、MainViewModel也可以直接复制,现在MangoDataBaseTest项目功能和MangoDataBaseDemo一样,但是MangoDataBaseTest却是使用我们引用的物理数据库文件MyContactor.sdf,不仅有已内置的数据,我们也可以进行增删改查..

运行MangoDataBaseTest效果图..

image

添加数据:

imageimage

现在我们正式完成对数据库物理文件的引用了..

回顾:此mango中使用数据库主要包括

1>在window phone中使用数据库可以有的选择;以及mango中支持linq to sql的数据库操作来建库、建表、建索引;通过创建一个简单的通讯录和分组,并验证了数据库的创建流程;详细

2>通过使用window phoen sdk中的ISETool.EXE来管理调试设备(模拟器或者测试机)应用独立存储中的文件和资源,它的一些命令符;通过product id浏览某应用的独立存储中的目录,并把独立存储总的文件复制到pc文件目录;详细

3>介绍了如何在新的应用中引用数据库文件并操作数据库;包括怎么将安装目录中的数据库文件复制到独立存储中,如何直接连接安装目录中的数据库文件进行只读操作;通过一个通讯录Test项目,读取并添加新的分组来操作数据库文件;

Demo实例下载

阅读(434) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~