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 }
View Code

  若要創建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 }
View Code

刪除數據

  刪除數據庫中的數據也包含三個步驟:首先,在數據庫中查詢要刪除的對象。然后,根據您需要刪除一個還是多個對象,分別調用 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();    
View Code

  下面通過一個簡單的例子更加深入的了解本地數據庫:

    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 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM