• 微软原版系统

  • 一键重装系统

  • 纯净系统

  • 在线技术客服

魔法猪系统重装大师 一键在线制作启动 U 盘 PE 系统 用一键重装的魔法拯救失去灵魂的系统
当前位置:首页 > 教程 > 电脑教程

WindowsPhone7开发中使用SQLCE数据库实例

时间:2015年04月02日 15:26:43    来源:魔法猪系统重装大师官网    人气:16714

 在WindowsPhone中有时候我们会一些数据的存储,这个时候我们有两种选择,一种是选择存在的独立存储文件中,一种是存储在数据库中。存储在独立存储文件中,这个相信很多用都会使用,这里不作为重点,本文主要讲一下在WindowsPhone中使用数据库SQL CE。

下面开始一步一步的带领大家实现在WindowsPhone 中使用SQL CE数据库。(该示例引自WindowsPhone 7应用开发)

一、首先,我们需要创建一个EmployeeTable类,映射为数据库中的Employee表

如下:

在创建之前需要添加引用:System.Data.Linq;

同时引入命名空间:using System.Data.Linq.Mapping;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
[Table]//特性标识该类为映射为数库中的表
 //该类实现了INotifyPropertyChanged和INotifyPropertyChanging接口
   public class EmployeeTable:INotifyPropertyChanged,INotifyPropertyChanging
   {
       private int _employeeId;
       //将EmployeeID映射为表的主键,特性Column里的含义分别为:主键,自增,int型不为空,不为空等
       [Column(IsPrimaryKey = true, IsDbGenerated = true,DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
       public int EmployeeID
       {
           get
           {
               return _employeeId;
           }
           set
           {
               if (_employeeId != value)
               {
                   NotifyPropertyChanging("EmployeeID");
                   _employeeId = value;
                   NotifyPropertyChanged("EmployeeID");
               }
           }
       }
       private string _employeeName;
       [Column]//EmployeeName属性为表中EmployeeName字段
       public string EmployeeName
       {
           get
           {
               return _employeeName;
           }
           set
           {
               if (_employeeName != value)
               {
                   NotifyPropertyChanging("EmployeeName");
                   _employeeName = value;
                   NotifyPropertyChanged("EmployeeName");
               }
           }
       }
       private string _employeeDesc;
       [Column]//将EmployeeDesc属性映射为表中EmployeeDesc字段
       public string EmployeeDesc
       {
           get
           {
               return _employeeDesc;
           }
           set
           {
               if (_employeeDesc != value)
               {
                   NotifyPropertyChanging("EmployeeDesc");
                   _employeeDesc = value;
                   NotifyPropertyChanged("EmployeeDesc");
               }
           }
       }
       //定义PropertyChanged事件用来通知页面,表字段数据发生了改变
       public event PropertyChangedEventHandler PropertyChanged;
       private void NotifyPropertyChanged(string propertyName)
       {
           if (PropertyChanged != null)
           {
               PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
           }
       }
       //定义PropertyChanging事件通知数据上下文表的字段数据将要发生改变
       public event PropertyChangingEventHandler PropertyChanging;
       private void NotifyPropertyChanging(string propertyname)
       {
           if (PropertyChanging != null)
           {
               PropertyChanging(this, new PropertyChangingEventArgs(propertyname));
           }
       }
   }

通过以上的这些操作,我们已经基本上完成了Employee表的创建,映射为数据库中的EmployeeTable表

二、下面我们来新建一个EmployeeDataContext.cs类文件,创建数据库的DataContent,该类继承自DataContent,在该类中定义连接字符串,如下:

首先需要引入命名空间:using system.data.Linq;

public class EmployeeDataContext:DataContext
    {
        //数据库连接字符串
        public static string DBConnectionString = "Data Source=isostore:/Employee.sdf";
        //传递数据库连接字符串到DataContext基类
        public EmployeeDataContext(string connectionString):base(connectionString)
        {
        }
        //定义员工信息表
        public Table Employees;
    }

三、创建EmployeeCollection类,该类的主要作用为页面数据绑定的集合。如下:

    //绑定页面,进行显示用    

public class EmployeeCollection:INotifyPropertyChanged
{
    //用于通知属性的改变
        public event PropertyChangedEventHandler PropertyChanged;
        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,new PropertyChangedEventArgs (propertyName));
            }
        }
        private ObservableCollection _employeeTables;

//创建EmployeeTables属性用来绑定页面数据        

public ObservableCollection EmployeeTables
        {
            get
            {
                return _employeeTables;
            }
            set
            {
                if (_employeeTables != value)
                {
                    _employeeTables = value;
                    NotifyPropertyChanged("EmployeeTables");
                }
            }
        }
    }

四、这样一个完整的数据库就创建完毕了,那么我们该如何使用呢?一般的情况下我们都是在程序启动的时候加载数据库,为此我们可以在App.xaml文件的Launching事件中做如下处理:

using (EmployeeDataContext db=new EmployeeDataContext(EmployeeDataContext.DBConnectionString))
           {
                if (db.DatabaseExists() == false)
                {
                    db.CreateDatabase();
                }
            }

五、下面做一个实例进行演示:

页面布局如下:


        
            
                
                    
                    
                    
                 

                VerticalAlignment="Center"/>
                
                
            

        

    

    
    
        
            
            
        

        
        
            
            
        

        
        
            
            
                                VerticalAlignment="Top" Width="281" />
                                VerticalAlignment="Top" Width="281" />
            

.cs页的处理代码如下:

public partial class EmployeeShow : PhoneApplicationPage
    {
        //创建DataContext用于操作独立的数据库
        private EmployeeDataContext employeeDB;
        private EmployeeCollection employeeCol = new EmployeeCollection();

      

  public EmployeeShow()
        {
            InitializeComponent();
    //创建EmployeeDataContext实例        
    employeeDB = new EmployeeDataContext(EmployeeDataContext.DBConnectionString);
            var employeeInDB = from EmployeeTable employee in employeeDB.Employees
                               select employee;
 //为页面创建数据绑定源            
employeeCol.EmployeeTables = new System.Collections.ObjectModel.ObservableCollection(employeeInDB);
            listBox1.ItemsSource = employeeCol.EmployeeTables;
        }

        //删除信息        

private void deleteButton_Click(object sender, RoutedEventArgs e)
        {
            var button = sender as Button;
            if (button != null)
            {
                EmployeeTable edelete = button.DataContext as EmployeeTable;
                //
                employeeCol.EmployeeTables.Remove(edelete);
                employeeDB.Employees.DeleteOnSubmit(edelete);
                employeeDB.SubmitChanges();
            }
        }

     //保存信息        

private void button2_Click(object sender, RoutedEventArgs e)
        {
            if (txtname.Text != "" && txtdesc.Text != "")
            {
                //编辑状态
                if (State.Count > 0 && State["employee"] != null)
                {
                    EmployeeTable employee = (EmployeeTable)State["employee"];
                    employee.EmployeeName = txtname.Text;
                    employee.EmployeeDesc = txtdesc.Text;
                    employeeDB.SubmitChanges();
                    employeeCol.EmployeeTables.Add(employee);
                    State["employee"] = null;
                }
                Else//添加新的信息
                {
                    EmployeeTable newEmployee = new EmployeeTable
                    {
                        EmployeeName = txtname.Text,
                        EmployeeDesc = txtdesc.Text
                    };
                    employeeCol.EmployeeTables.Add(newEmployee);
                    employeeDB.Employees.InsertOnSubmit(newEmployee);
                    employeeDB.SubmitChanges();
                    txtname.Text = "";
                    txtdesc.Text = "";
                }
                listBox1.ItemsSource = employeeCol.EmployeeTables;
            }
            else
            {
                MessageBox.Show("姓名和简介不能为空!");
            }
        }

        //编辑信息     

private void editButton_Click(object sender, RoutedEventArgs e)
     {
         var button = sender as Button;
         if (button != null)
         {
             EmployeeTable eedit = button.DataContext as EmployeeTable;
             txtname.Text = eedit.EmployeeName;
             txtdesc.Text = eedit.EmployeeDesc;
             State["employee"] = eedit;
             employeeCol.EmployeeTables.Remove(eedit);      
         }
     }
 }

效果如图:

好了,到这里我们已经基本上实现了在WindowsPhone手机中使用SQLCE数据库了,希望可以对朋友们有所帮助。

WindowsPhone7,开发,中,使用,SQLCE,数据
栏目:电脑教程 阅读:1000 2023/12/27
Win7教程 更多>>
U盘教程 更多>>
Win10教程 更多>>
魔法猪学院 更多>>

Copyright © 2015-2023 魔法猪 魔法猪系统重装大师

本站发布的系统仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件。

在线客服 查看微信 返回顶部