SQLCE本地数据库

  SQLCE是一个标准得关系数据库,可以使用 LINQ 和DateContext来处理本地数据库数据库。

  使用SQLCE 要在代码中使用本地数据库功能,需要添加以下命名空间 :

    using System.Data.Linq;

    using System.Data.Linq.Mapping;

    using Microsoft.Phone.Data.Linq;

    using Microsoft.Phone.Data.Linq.Mapping;

  DateContext能将LINQ数据库操作语句转换成关系数据库能辨识的标准SQL语句。DateContext类是LINQ操作SQLCE的一个基类。

DateContext连接数据库

  需要为DateContext类设置一个连接字符串,DateContext就可以连接或打开一个数据库。如果数据库存在则将其打开,不存在则创建。 实例代码如下:

    DateContext dcdb = new DataContext(Data Sourse =isostore:/dc.sdf);

创建数据库
  在创建 DataContext 对象之后,可以创建本地数据库并执行一些其他数据库操作。
  创建SQLCE数据库表,创建数据库时不能使用T-SQL语句进行创建,而是先要创建LINQ语句映射。
    例如:

1 using (ToDoDataContext db = new ToDoDataContext("isostore:/db.sdf"))
2 {
3     if (db.DatabaseExists() == false)
4     {
5         db.CreateDatabase();
6     }
7 }

  若要创建DataContext,必须首先指定数据上下文和数据库文件的文件位置。DataContext 构造函数值指定数据库文件名称为 ToDo.sdf。该值的 isostore:/ 部分指定该文件位于本地文件夹中。接下来,在 DatabaseExists 方法确认数据库尚不存在之后,使用 CreateDatabase 方法创建数据库。

操作数据库

  在本地数据库创建之后,可以使用 LINQ 和DateContext来处理本地数据库。 操作数据库主要有以下操作:在数据库中查询、插入、更新和删除数据。

数据库查询

  在 Windows Phone 中,使用语言集成查询 (LINQ) 查询数据库。LINQ 可弥补对象部分和数据部分之间的间隙。LINQ to SQL 中查询使用的语法与 LINQ 中的查询相同。 由于 LINQ to SQL 查询中引用的对象被映射到数据库中的记录,因此 LINQ to SQL 在查询的执行方式上与其他 LINQ 技术有所不同。 典型的 LINQ 查询在应用层的内存中执行。通过 LINQ to SQL 使用运行时的对象关系功能,每一个 LINQ 查询都被转换为 Transact-SQL,然后在数据库中直接执行。这样可以提高查询的性能。

插入数据

  将数据插入数据库的过程分为两个步骤。首先在DateContext中添加一个对象,然后DateContext使用InsertOnSubmit执行添加操作。

更新数据

  更新本地数据库中的数据分为三个步骤。首先,在数据库中查询要更新的对象。然后,按需要修改对象。最后,调用 SubmitChanges 方法将更改保存到本地数据库。 如果将DateContext中的对象绑定到页面上的控件,则DateContext会根据用户交互自动进行更新。然后,所需的唯一步骤是在需要时调用 SubmitChanges 方法。 例如下面进行数据更新:

1 protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
2 {
3     base.OnNavigatedFrom(e);
4     toDoDB.SubmitChanges();
5 }

删除数据

  删除数据库中的数据也包含三个步骤:首先,在数据库中查询要删除的对象。然后,根据您需要删除一个还是多个对象,分别调用 DeleteOnSubmit 或 DeleteAllOnSubmit 方法,以将这些对象置于挂起删除状态。最后,调用 SubmitChanges 方法将更改保存到本地数据库。

数据库加密

  本地数据库提供了密码保护和加密功能来确保数据库的安全。在对数据库使用密码功能时,整个数据库都会被加密。若要加密数据库,请在创建数据库之前在数据库连接字符串(DateContext构造函数)中提供密码。每次访问数据库时都需要提供密码。在数据库创建之后便无法对其加密。数据库是使用 AES-128 加密的,而密码是使用 SHA-256 进行哈希处理的。 以下代码演示如何通过在数据库连接字符串中指定密码来创建加密数据库。

1         ToDoDataContext db = new ToDoDataContext ("Data Source=’isostore:/ToDo.sdf’;Password=’securepassword’");
2         if (!db.DatabaseExists())
3             db.CreateDatabase();    

  下面通过一个简单的例子更加深入的了解本地数据库:

    MainPage.xaml.cs部分代码:

 1 namespace SqlCe
 2 {
 3     public partial class MainPage : PhoneApplicationPage, INotifyPropertyChanged
 4     {
 5       private ToDoDataContext toDoDB;
 6       private ObservableCollection<ToDoItem> _toDoItems;
 7         public MainPage()
 8         {
 9             InitializeComponent();
10             // 连接数据库
11             toDoDB = new ToDoDataContext(ToDoDataContext.DBConnectionString);
12             this.DataContext = this;
13         }
14         //重定离开页面事件
15         protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
16         {
17             var toDoItemsInDB = from ToDoItem todo in toDoDB.ToDoItems
18                                 select todo;
19             ToDoItems = new ObservableCollection<ToDoItem>(toDoItemsInDB);
20             base.OnNavigatedTo(e);
21         }
22         //增加数据
23         private void newToDoAddButton_Click(object sender, RoutedEventArgs e)
24         {
25             // 定义数据
26             ToDoItem newToDo = new ToDoItem { ItemName = newToDoTextBox.Text };
27             // 添加
28             ToDoItems.Add(newToDo);
29             // 保存数据库更改
30             toDoDB.ToDoItems.InsertOnSubmit(newToDo);
31         }
32         //删除数据
33         private void deleteTaskButton_Click(object sender, RoutedEventArgs e)
34         {
35             // 转换为参数
36             var button = sender as Button;
37
38             if (button != null)
39             {
40                 ToDoItem toDoForDelete = button.DataContext as ToDoItem;
41                 // 移动映射表项数据
42                 ToDoItems.Remove(toDoForDelete);
43                 toDoDB.ToDoItems.DeleteOnSubmit(toDoForDelete);
44                 // 保存数据库更改
45                 toDoDB.SubmitChanges();
46                 // Put the focus back to the main page.
47                 this.Focus();
48             }
49         }
50         //更新数据库
51         protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
52         {
53             base.OnNavigatedFrom(e);
54             toDoDB.SubmitChanges();
55         }
56 }

时间: 2024-11-04 09:35:50

SQLCE本地数据库的相关文章

Windows Phone本地数据库(SQLCE):1、介绍(翻译)(转)

一只大菜鸟,最近要学习windows phone数据库相关的知识,找到了一些比较简短的教程进行学习,由于是英文的,顺便给翻译了.本身英语水平就不好,估计文中有不少错误,如果有不幸读到的童鞋请保持对翻译质量的质疑,多多指教. 这是原文地址:http://windowsphonegeek.com/tips/Windows-Phone-Mango-Local-Database%28SQL-CE%29-Introduction 正文如下: 我开始了一个新的系列——Windows Phone Mango本

Windows Phone本地数据库(SQLCE):6、[Index] attribute(翻译)(转)

这是“windows phone mango本地数据库(sqlce)”系列短片文章的第六篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点. 我将谈谈在windows phone mango本地数据库时使用[Index] attribute. 首先.要说到的是,windows phone 7.1上基本的数据库功能是SQL Compact关于Mango的一个实现.你将使用linq to sql访问存储在数据库上的数据. 注释:[In

Windows Phone本地数据库(SQLCE):5、[Association]attribute(翻译)(转)

这是“windows phone mango本地数据库(sqlce)”系列短片文章的第五篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点. 我将谈谈在windows phone mango本地数据库时使用[Association] attribute. 首先.要说到的是,windows phone 7.1上的数据库功能是SQL Compact关于Mango的一个实现.你将使用linq to sql访问存储在数据库上的数据. 1.

Windows Phone本地数据库(SQLCE):3、[table]attribute(翻译) (转)

这是“windows phone mango本地数据库(sqlce)”系列短片文章的第三篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点.这个时候我将谈谈有关你使用windows phone mango本地数据库时使用[table]attribute. 1.[Table]attribute是什么? 你可以使用这个属性来指定一个类作为与数据库表或视图有关的实体类.LINQ to SQL将有这个属性的类作为持久化类. 你可以使用Ta

Windows Phone本地数据库(SQLCE):2、LINQ to SQL(翻译)(转)

首先.要说到的是,windows phone 7.1上基本的数据库功能是SQL Compact关于Mango的一个实现,使用linq to sql访问存储在数据库上的数据. 1.LINQ to SQL是什么 LINQ to SQL 是一个作为.NET Framework上的一部分的ORM(对象关系映射)框架.它允许你映射你的业务对象(business object)(模型类)到数据库中的表,然后可以不用写单一的SQL语句来访问或查询数据库中的数据.随着Mango的更新,LINQ to SQL现在

Windows Phone本地数据库(SQLCE):4、[Column]attribute(翻译) (转)

这是“windows phone mango本地数据库(sqlce)”系列短片文章的第四篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点.我将谈谈在windows phone mango本地数据库时使用[Column] attribute. 首先,要说到的是,windows phone 7.1上的数据库功能是SQL Compact关于Mango的一个实现.你将使用linq to sql访问存储在数据库上的数据. 1.[Colum

Windows Phone本地数据库(SQLCE):8、DataContext(翻译)

这是“windows phone mango本地数据库(sqlce)”系列短片文章的第八篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点.我将谈谈在windows phone mango本地数据库中使用DataContext的问题. 1.DataContext是什么 DataContext的用途是以面向对象的方式来显示数据库到其余的代码上.DataContext有三个重要的特点: (1)它从System.Data.Linq.Da

Windows Phone本地数据库(SQLCE):12、插入数据(翻译)

这是“windows phone mango本地数据库(sqlce)”系列短片文章的第十二篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点.我将谈谈在windows phone mango本地数据库里怎么插入数据. 插入数据到数据库是一个两个步骤的过程.首先使用InsertOnSubmit 方法添加一个对象到DataContext,然后调用DataContext的SubmitChanges 方法来将保存数据作为数据库中的行. 注

Windows Phone本地数据库(SQLCE):9、Connection Strings(翻译) (转)

这是“windows phone mango本地数据库(sqlce)”系列短片文章的第八篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点.我将谈谈在windows phone mango本地数据库中使用Connection Strings的问题. 1.ConnectionStrings是什么 在我们实际开始使用一个数据库之前,我们需要制定一个连接字符串,它告诉应用程序怎么连接数据库.一个连接字符串可以被用来做数据库的配置值.在连