【WP7】本地数据库使用

在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();
            }
        }
原文地址:https://www.cnblogs.com/bomo/p/2758657.html