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

作者:小菜 更新时间:2025-02-26 点击数:
简介:在WindowsPhone中有时候我们会一些数据的存储,这个时候我们有两种选择,一种是选择存在的独立存储文件中,一种是存储在数据库中。

存储在独立存储文件中,这个

【菜科解读】

在WindowsPhone中有时候我们会一些数据的存储,这个时候我们有两种选择,一种是选择存在的独立存储文件中,一种是存储在数据库中。

存储在独立存储文件中,这个相信很多用都会使用,这里不作为重点,本文主要讲一下在WindowsPhone中使用数据库SQLCE。

下面开始一步一步的带领大家实现在WindowsPhone中使用SQLCE数据库。

(该示例引自WindowsPhone7应用开发)

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

如下:

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

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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778[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,在该类中定义连接字符串,如下:

首先需要引入命名空间:usingsystem.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(); } }

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

页面布局如下:

.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,数据

太平军最能打的时代,重要是前期和中期 为什么后期就不可以了

中风是什么?预防中风的奇怪食物大推荐

加入收藏
               

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

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录