zoukankan      html  css  js  c++  java
  • 【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();
                }
            }
  • 相关阅读:
    Hosts知多少?
    Google 谷歌网页搜索, 学术搜索
    机器学习是什么?
    SCI/EI期刊投稿 Reply Letter 常用格式总结
    解决Javascript中$(window).resize()多次执行
    Jquery使容器自适应浏览器窗口
    java中GET方式提交和POST方式提交
    java调试打断点和不打断点执行结果不一致问题解决
    EasyUI combobox的panelHeight自动高度
    跨服务器查询信息的sql
  • 原文地址:https://www.cnblogs.com/bomo/p/2758657.html
Copyright © 2011-2022 走看看