Tuesday, 31 December 2013 09:29

Local database – Isolated Storage Windows Phone

Written by 
Rate this item
(5 votes)

Hôm nay mình xin hướng dẫn các bạn làm quen với database trong windows phone

Database chính là cơ sở truy xuất dữ liệu của mọi ứng dụng, một ứng dụng từ Web đến Windows không thể thiếu database để lưu trữ và đối với Windows Phone cũng vậy.

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều cách như là XML, Binary ở phiên bản 7.0 đến phiên bản 7.1 trở về sau Windows Phone hổ trợ thêm một cách lưu trữ nữa mà các lập trình viên ưa thích đó là SQL CE (SQL Compact Editon) giúp việc lưu trữ dữ liệu trở nên dể dàng hơn.

Tất cả những cách lưu trữ này đều là cách lưu trữ phía local của phone. Thậm chí bạn củng có thể lưu trữ Database theo dạng text.txt

I.   Đặc điểm:

Dùng để lưu trữ các thiết lập (setting) và các custom data.

Ứng dụng Windows Phone có thể sử dụng theo các cách sau:

  • Setting: Phục hồi các data as key/ value pairs.
  • Files and folders: Phục hồi các files và folders.
  • DataContext: Phục hồi các data quan hệ trong local database.

Tuy nhiên, thông thường các ứng dụng nhỏ trên Windows Phone 7 chỉ sử dụng các kiểu đơn giản của Isolated Storage là Setting và Files.

 

Sơ đồ tóm tắt các lựa chọn cho việc sử dụng lưu trữ dữ liệu chung

Lưu ý: Để đồng bộ hóa truy cập đến Isolated Storage giữa các Thread khác nhau, bạn nên sử dụng lớp System.Threading.Mutex. Một Mutex chỉ cấp cho một Thread quyền truy cập độc quyền cho một nguồn tài nguyên được chia sẻ. Nếu một Thread có được một Mutex, Thread thứ hai mà muốn có được Mutex sẽ phải chờ đến khi Thread đầu tiên giải phóng các Mutex. Trong lúc đó, các Thread thứ hai sẽ bị suspended. Ví dụ, một Mutex có thể được dùng để đồng bộ hóa truy cập vào một folder Isolated Storage giữa một ứng dụng điện thoại Windows đang chạy trong foreground và background.

II.   IsolatedStorageSettings:

Cú pháp và các hàm cơ bản:

+  Khai báo thư viện System.IO.IsolatedStorage.IsolatedStorageSettings

+  Sử dụng cú pháp khai báo, hệ thống sẽ tự tạo một vùng nhớ trên thiết bị:

IsolatedStorageSettings  [tenbien] = IsolatedStorageSettings.ApplicationSettings;

+  Các hàm thường dùng:

Public void Add(string key,object value): Thêm một mục có khóa key của object value vào vùng nhớ.

Public bool Remove(string  key): Xóa cặp Key/Value có chuỗi key.

Public virtual string ToString(): Trả về chuỗi đại diện cho object hiện tại.

Public void Clear(): Đặt lại số items stored trong IsolatedStorageSetting về 0 và giải phóng tất cả elements liên kết.

Public bool Contains(string key): Kiểm tra các khóa key có chứa giá trị bằng chuổi s không.

Public void Save(): Lưu lại data đến đối tượng IsolatedStorageSettings hiện tại.

+  Các Properties:

ApplicationSetting:Lấy instance của IsolatedStorageSettings có chứa nội dung trong IsolatedStorageFile của ứng dụng, khoanh vùng mức độ ứng dụng, hoặc tạo instance mới trong IsolatedStorageSettings nếu nó không tồn tại.

Count:Lấy số lượng các cặp key/values được lưu trữ trong thư mục.

Item:Lấy hoặc ghi giá trị liên quan đến key xác định.

Keys:Lấy collection mà chứa các key trong thư mục.

SiteSetting:Lấy instance của IsolatedStorageSettings có chứa nội dung trong IsolatedStorageFile của ứng dụng, khoanh vùng mức độ domain, hoặc tạo instance mới trong IsolatedStorageSettings nếu nó không tồn tại.

Values:Lấy collection mà chứa các values trong thư mục.

III.   IsolatedStorageFiles:

Cú pháp và các hàm cơ bản:

+  Khai báo thư viện System.IO.IsolatedStorage.IsolatedStorageFile

+  Cú pháp khai báo:

IsolatedStorageFile []name = IsolatedStorageFile. GetUserStoreForApplication();

IsolatedStorageFileStream  [name]=new IsolatedStorageFileStream(string path, FileMode mode, IsolatedStorageFile isolated);

IsolatedStorageFileStream [name]=new IsolatedStorageFileStream(string path, FileMode mode.FileAccess access, IsolatedStorageFile isolated);

+  Các hàm thường dùng:

Public void CreateDirectory(string dir): Tạo thư mục trong Isolated Storage.

Public void DeleteDirectory(string dir): Xóa thư mục trong Isolated Storage.

Public IsolatedStorageFileStream CreateFile(string path): Tạo một file trong kho isolated .

Public void DeleteFile(string file): Xóa một file trong kho isolated.

Public bool DirectoryExists (string path): Kiểm tra thư mục có tồn tại trong Isolated Storage hay không.

Public bool FileExists (string path): Kiểm tra file có tồn tại trong Isolated Storage hay không.

Public void Remove(): Xóa vùng isolated Storage và các nội dung của nó.

Public IsolatedStorageFileStream OpenFile(string path, FileMode mode): Mở file với chế độ xác định.

+  Các Properties:

AvailableFreeSpace:Lấy giá trị cho biết tổng dung lượng trống có thể dùng cho isolated storage.

IsEnabled:Lấy giá trị cho biết các isolated storage được enable.

Quota:Lấy giá trị thể hiện dung lượn lớn nhất có thể dùng cho isolated storage.

UsedSize:Lấy giá trị thể hiện sô dung lượng được dùng cho isolated Storage.

IV.   LocalDatabase:

1.     Đặc điểm:

Với Windows Phone 7.1 Mango, ta có thể phục hồi các data quan hệ trong một local database stored với Isolated Storage trong ứng dụng của mình. Trong Windows Phone tất cả ứng dụng chỉ có thể truy xuất Isolated Storage của chính nó. Do đó, một database cũng chỉ có thể được sử dụng bởi chính ứng dụng chứa nó mà không thể chia sẻ giữa các ứng dụng khác.

2.     Các tình huống sử dụng Local Database:

Có nhiều table/entity liên quan chứa một số lượng vừa phải các giá trị.

Một số table chưa một lượng lớn các record/data.

Local cache của data nhận từ công nghệ cloud.

3.     Ưu điểm của local database:

Thực hiện hiệu quả và nhanh chóng các câu lệnh truy vấn phức tạp.

Chỉ cho phép các data cần thiết lúc đó được loaded vào bộ nhớ.

Tất cả các phương thức insert, delete,… được xử lý hiệu quả nhờ SQL Compac runtime.

4.     Các bước cần làm để sử dụng một local database trong Windows Phone:

Bước 1: Tạo các class trong database: table, column, relations,…

Bước 2: Tạo một database (.sdf) trong Isolated Storage (mặc định khởi tạo là rỗng).

Bước 3: Đưa data vào database trong Isolated Storage.

5.     Giới thiệu về SQL CE:

LINQ to SQL được sử dụng như công nghệ ORM

File database được lưu trữ trong Isolated Storage.

LINQ chỉ sử dụng các câu truy vấn đơn giản, không hỗ trợ T-SQL.

Local database trong Windows Phone hỗ trợ một phần framework, không cần distribute assembly làm tăng kích thước ứng dụng.

Phải khai báo System.Data.LINQ trong Reference của project.

Chuỗi kết nối phải định dạng như sau: Data Source='isostore:/DIRECTORY/FILE.sdf'

Demo tạo database bằng SQL CE và tạo file DataContext kết nối với database đã tạo bằng Linq to SQL:

+  Công cụ sử dụng: SQL Server 2008 Managament Studio và Visual Studio 2010.

+  Bước 1: Mở SQL Server Managament Studio, chọn tab SQL Server Compact Edition, nếu bạn muốn tạo mới database chọn <New Database…>, nếu muốn mở một database có sẵn, ta chọn <Browse for more…>

 

-  Nếu chọn <New Database…>, một cửa sổ mới hiện ra, bạn nhập tên database, chọn Browse để hiện cửa sổ thư mục, chọn thư mục chứa database và bấm OK 2 lần để hoàn tất việc tạo database mới.

 

-  Nếu chọn <Browse for more…> để load database, cửa sổ lựa chọn thư mục sẽ xuất hiện,  chọn OK nếu đồng ý. Bạn cũng có thể chọn Newdatabase trong cửa sổ này để tạo một database mới.

 

+  Bước 2: Sau khi tạo thành công, ta sẽ kết nối với database bằng link đến database đó.

Tạo table trong SQL CE như sau:

Giao diện tạo table mới như sau:

Sau khi tạo đầy đủ thông tin các column, chọn key primary và set Identity cho key nếu muốn.

+  Bước 3: Mình sẽ tạo hai table là Category và Sign, tiếp theo là tạo Relationship cho hai table. Trước khi làm điều này bạn cần chú ý xác định table nào sẽ chứa khóa của table nào, từ đó, chọn table chứa khóa để Add Relations có khóa của table kia. Ở đây, table chứa khóa là Sign, chứa khóa ngoại của Category.

- Để Add Relations ta làm như sau:

- Giao diện cửa sổ Add Relations như sau:

- Chọn Add Relations, các options quan trọng:

Relations Name: Tên Relations
Primary Key Table: Chọn Table có khóa làm khóa ngoại.
Foreign Key Table: Bắt buộc là table add Relations.
Primary Key Table Column: Chọn khóa chính.
Foreign Key Table Column: Chọn column làm khóa ngoại.

- Sau khi hoàn thành các options, nhấn OK để add Relations. Khi Add thành công, tab Manage Relations sẽ hiển thị Relations vừa tạo.

+  Bước 4: Vậy là ta hoàn thành xong việc tạo database, tiếp theo ta tạo record cho database:

- Có hai cách chèn record cho database trong SQL CE:

    Dùng câu lệnh Insert <> Into <> trong SQL .

    Dùng Visual Studio, cách làm như sau

    Trước tiên, tạo kết nối từ Visual Studio đến database đó Mở Visual Studio 2010, vào Server Explorer, RightMouse Click vào Data Connection -> chọn Add Connection…


 
    Cửa sổ Add Connection hiện ra, Chọn Change, cửa sổ Change Data Source xuất hiện, chọn Microsoft SQL Server Compact 3.5 -> OK.


 
    Cửa sổ Add Connection lại xuất hiện, chọn Browse để set đường dẫn đến database vừa tạo, sau đó, bấm OK để hoàn thành Add kết nối database vào Visual Studio.


 
    Khi Add thành công database sẽ xuất hiện trên Server Explorer:


 
    Để add record vào table, Trong Server Explorer, chọn database, RightMouseClick vào table cần thêm -> Chọn Show Table Data để thêm giá trị vào các cột.


 
    Chú ý giá trị thêm vào phải đúng với kiểu dữ liệu đã thiết lập, nếu không sẽ không thể thêm vào và phải nhập lại từ đầu cho giá trị đó.

+    Bước 5: Sau khi hoàn thành việc tạo local database, ta sẽ tạo file kết nối sử dụng Linq to SQL, để làm việc này, ta có thể sử dụng tool của Visual Studio để tạo file DataContext kết nối ứng dụng với database.

    - Tạo file DataContext.cs rỗng, sau đó copy vào thư mục chứa database.
    - Mở Visual Studio Command Prompt (2010) theo cách sau, nút Start Windows -> All programs -> Microsoft Visual Studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt (2010).
    - Copy chuỗi lệnh sau vào Visual Studio Command Prompt (2010):

sqlmetal <Đường dẫn đến file database>/code:<đường dẫn đến file cs lưu trữ datacontext> /languege:<ngôn ngữ lập trình> /namespace:<tên namespace chứa trong file> /context:<tên lớp context tạo trong file /pluralize


    - Chú ý rằng tool này sẽ không nhận ra đường dẫn đến thư mục của bạn, do đó, Đường dẫn tốt nhất nên ngắn gọn, cụ thể nhất là nên copy 2 file đó vào ổ đĩa của bạn ví dụ như C:\, D:\, E:\. Ở đây, mình sẽ chọn đường dẫn như sau:

Sqlmetal C:\MyDatabase.sdf /code:C:\DataContext.cs /language:csharp /namespace:VNTraffic /context:DatabaseDataContext /pluralize

    - Nhấn Enter để tool tiến hành generate code cho bạn, màn hình khi generate thành công:


 
    - Tiếp theo, Add 2 file này vào Project của bạn, trong đó đổi tên class DatabaseDataContext thành Database trong file DataContext.


 
    - Chú ý rằng, Data Linq trong Windows Phones 7 không hỗ trợ phương thức IdbConnection, do đó, ta nên xóa 2 phương thức sử dụng IdbConnection trong file DataContext:

 
 
    * Bạn có thể tinh chỉnh namespace hoặc class name sao cho project không còn lỗi.
    * Trong file App.xaml.cs, ta thêm khởi tạo đối tượng ConnectionString để tạo chuỗi kết nối đến local database.

public static string ConnectionString = "Data Source = 'isostore:/MyDatabase.sdf';";

Vậy là ta đã hoàn tất việc tạo file kết nối local database bằng Linq to SQL. Các bạn có thể test bằng cách viết các câu truy vấn đến local database, hoặc binding dữ liệu từ đó.

Phần tiếp theo mình sẽ hướng dẫn các bạn đọc dữ liệu.............

Read 9263 times Last modified on Thursday, 02 January 2014 07:06