在WP7开发中,虽然微软倡导云服务,出于流量的考虑,对于某些应用需要使用到本地数据库,下面演示一下本地数据库的使用
通过代码创建数据库
首先,我们定义一个继承于DataContext的类,用于操作和访问数据库
先引用命名空间 System.Data.Linq
public class MyDataContext:DataContext { public const string ConnectionString = "Data Source='isostore:/MyDatabase.sdf';Password='123456'"; public MyDataContext() : base(ConnectionString) { } public Table<Student> Students; }
定义一个数据库连接字符串(数据库名为MyDatabase.sdf,密码为123456,可以不设置密码),同时定义一个Table,关于Table的定义,下面给出
[Table] public class Student : INotifyPropertyChanged, INotifyPropertyChanging { string stuNum; string stuName; int stuScore; public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangingEventHandler PropertyChanging; protected void OnPropertyChanged(PropertyChangedEventArgs e) { if (PropertyChanged != null) { PropertyChanged(this, e); } } protected void OnPropertyChanging(PropertyChangingEventArgs e) { if (PropertyChanging != null) { PropertyChanging(this, e); } } [Column(IsPrimaryKey = true, CanBeNull = false)] public string StuNum { get { return stuNum; } set { if (this.stuNum != value) { OnPropertyChanging(new PropertyChangingEventArgs("StuNum")); this.stuNum = value; OnPropertyChanged(new PropertyChangedEventArgs("StuNum")); } } } [Column] public string StuName { get { return stuName; } set { if (this.stuName != value) { OnPropertyChanging(new PropertyChangingEventArgs("StuName")); this.stuName = value; OnPropertyChanged(new PropertyChangedEventArgs("StuName")); } } } [Column] public int StuScore { get { return stuScore; } set { if (this.stuScore != value) { OnPropertyChanging(new PropertyChangingEventArgs("StuScore")); this.stuScore = value; OnPropertyChanged(new PropertyChangedEventArgs("StuScore")); } } } }
注意,实体类必须要实现INotifyPropertyChanged接口,最好连同INotifyPropertyChanging接口,这样可以改善性能。一定要实现这两个接口,而且要触发PropertyChanging和PropertyChanged事件,不然你提交到数据库是不能更新数据的。
关于数据库和表的定义已经做好了,隔离存储空间一开始是没有数据库,所以需要先创建数据库,在页面的构造函数中
public MainPage() { using (MyDataContext dc = new MyDataContext()) { if (dc.DatabaseExists() == false) { dc.CreateDatabase(); } } InitializeComponent(); }
数据库创建完成后,接下来是对数据库的操作,增删改
using (MyDataContext dc = new MyDataContext()) { if (dc.Students.Where(c => c.StuNum == "2010242").Count() > 0) { MessageBox.Show("输入的号码已经存在。"); return; } Student stu = new Student() { StuNum = "2010242", StuName = "Bomo", StuScore = "50" }; dc.Students.InsertOnSubmit(stu); dc.SubmitChanges(); } using (MyDataContext dc = new MyDataContext()) { Students stu = dc.Students.FirstOrDefault(s1 => s1.StuNum == "2010242"); if (stu != null) { dc.Students.DeleteOnSubmit(stu); dc.SubmitChanges(); } } using (MyDataContext dc = new MyDataContext()) { Students stu = dc.Students.FirstOrDefault(s => s.StuNum == "2010242"); if (stu != null) { stu.StuName = "Toby"; stu.StuScore = 90; dc.SubmitChanges(); } }
数据库的操作就说到这里
接下来说说讲数据库绑定到ListBox控件中,关于ListBox的模板定义和数据绑定请参考下面链接
http://www.cnblogs.com/bomo/archive/2012/11/07/2758657.html
using (MyDataContext dc = new MyDataContext()) { var res = from s in dc.Students select s; this.lbItemList.ItemsSource = res.ToList(); }
这里是取出数据库的数据关联到ListBox控件的项中
注意:每次对数据库的数据进行增删改操作时都要重新关联数据才能让ListBox的显示更新
例如:
using (MyDataContext dc = new MyDataContext()) { Students stu = dc.Students.FirstOrDefault(s => s.StuNum == "2010242"); if (stu != null) { stu.StuName = "Toby"; stu.StuScore = 90; dc.SubmitChanges(); var res = from s in dc.Students select s; this.lbItemList.ItemsSource = res.ToList(); } }