Windows Phone 8 SQL Server CE 数据库
员工信息表 EmployeeTable.cs
using System.Data.Linq.Mapping;
using System.ComponentModel; namespace SQLServerDemo
{
[Table]
public class EmployeeTable : INotifyPropertyChanged, INotifyPropertyChanging
{
// 定义员工表独立增长ID,设置为主键
private int _employeeId; [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]
public string EmployeeName
{
get
{
return _employeeName;
}
set
{
if (_employeeName != value)
{
NotifyPropertyChanging("EmployeeName");
_employeeName = value;
NotifyPropertyChanged("EmployeeName");
}
}
} //定义员工简介字段
private string _employeeDesc; [Column]
public string EmployeeDesc
{
get
{
return _employeeDesc;
}
set
{
if (_employeeDesc != value)
{
NotifyPropertyChanging("EmployeeDesc");
_employeeDesc = value;
NotifyPropertyChanged("EmployeeDesc");
}
}
} #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; //用来通知页面表的字段数据产生了改变
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
} #endregion #region INotifyPropertyChanging Members public event PropertyChangingEventHandler PropertyChanging; // 用来通知数据上下文表的字段数据将要产生改变
private void NotifyPropertyChanging(string propertyName)
{
if (PropertyChanging != null)
{
PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
}
} #endregion }
}
员工数据库EmployeeDataContext继承DataContext
using System.Data.Linq; namespace SQLServerDemo
{
//定义一个EmployeeDataContext类来继承DataContext,在EmployeeDataContext中定义数据库连接字符串,以及员工信息表
public class EmployeeDataContext : DataContext
{
// 数据库链接字符串
public static string DBConnectionString = "Data Source=isostore:/Employee.sdf"; // 传递数据库连接字符串到DataContext基类
public EmployeeDataContext(string connectionString)
: base(connectionString)
{ } // 定义一个员工信息表
public Table<EmployeeTable> Employees;
}
}
创建页面数据绑定集合
using System.ComponentModel;
using System.Collections.ObjectModel; namespace SQLServerDemo
{
//EmployeeCollection用于跟页面的数据绑定
public class EmployeeCollection : INotifyPropertyChanged
{
//定义ObservableCollection来绑定页面的数据
private ObservableCollection<EmployeeTable> _employeeTables;
public ObservableCollection<EmployeeTable> EmployeeTables
{
get
{
return _employeeTables;
}
set
{
if (_employeeTables != value)
{
_employeeTables = value;
NotifyPropertyChanged("EmployeeTables");
}
}
} #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; //用于通知属性的改变
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
}
在App.cs 的Launching添加数据库检查
// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
//如果数据库不存在则创建一个数据库
using (EmployeeDataContext db = new EmployeeDataContext(EmployeeDataContext.DBConnectionString))
{
if (db.DatabaseExists() == false)
{
//创建一个数据库
db.CreateDatabase();
}
}
}
MainPage.xaml.cs
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Phone.Controls;
using System.Collections.ObjectModel; namespace SQLServerDemo
{
public partial class MainPage : PhoneApplicationPage
{
// 创建DataContext实例用于用于操作本地的数据库
private EmployeeDataContext employeeDB;
private EmployeeCollection employeeCol = new EmployeeCollection(); public MainPage()
{
InitializeComponent(); //连接数据库并初始化DataContext实例
employeeDB = new EmployeeDataContext(EmployeeDataContext.DBConnectionString); // 使用Linq查询语句查询EmployeeTable表的所有数据
var employeesInDB = from EmployeeTable employee in employeeDB.Employees
select employee; // 将查询的结果返回到页面数据绑定的集合里面
employeeCol.EmployeeTables = new ObservableCollection<EmployeeTable>(employeesInDB); //赋值给当前页面的DataContext用于数据绑定
this.DataContext = employeeCol;
} /// <summary>
/// 删除操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void deleteButton_Click(object sender, RoutedEventArgs e)
{
// 获取单击的按钮实例
var button = sender as Button; if (button != null)
{
//获取当前按钮绑定的DataContext,即当前的删除的EmployeeTable实例
EmployeeTable employeeForDelete = button.DataContext as EmployeeTable;
//移除绑定集合里面要删除的EmployeeTable记录
employeeCol.EmployeeTables.Remove(employeeForDelete);
// 移除数据库里面要删除的EmployeeTable记录
employeeDB.Employees.DeleteOnSubmit(employeeForDelete);
//保存数据库的改变
employeeDB.SubmitChanges();
}
} /// <summary>
/// 保存操作,处理新增和编辑员工信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addButton_Click(object sender, RoutedEventArgs e)
{
//控制员工名字和简介不能为空
if (name.Text != "" && desc.Text != "")
{
if (State.Count> && State["employee"] != null )//编辑状态
{
//获取编辑的EmployeeTable对象
EmployeeTable employee = (EmployeeTable)State["employee"];
employee.EmployeeName = name.Text;
employee.EmployeeDesc = desc.Text;
//保存数据库的改变
employeeDB.SubmitChanges();
//添加绑定集合的数据,因为在单击编辑的时候移除了
employeeCol.EmployeeTables.Add(employee);
State["employee"] = null;
}
else//新增状态
{
//创建一条表的数据
EmployeeTable newEmployee = new EmployeeTable { EmployeeName = name.Text, EmployeeDesc = desc.Text };
//添加绑定集合的数据
employeeCol.EmployeeTables.Add(newEmployee);
//插入数据库
employeeDB.Employees.InsertOnSubmit(newEmployee);
//保存数据库的改变
employeeDB.SubmitChanges();
} name.Text = "";
desc.Text = "";
}
else
{
MessageBox.Show("姓名和简介不能为空!");
}
} /// <summary>
/// 编辑操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void editButton_Click(object sender, RoutedEventArgs e)
{
// 获取单击的按钮实例
var button = sender as Button; if (button != null)
{
//获取当前按钮绑定的DataContext,即当前的编辑的EmployeeTable实例
EmployeeTable employeeForEdit = button.DataContext as EmployeeTable;
name.Text = employeeForEdit.EmployeeName;
desc.Text = employeeForEdit.EmployeeDesc;
//将需要编辑的表实例存储在State里面
State["employee"] = employeeForEdit;
employeeCol.EmployeeTables.Remove(employeeForEdit);
}
}
}
}
Windows Phone 8 SQL Server CE 数据库的更多相关文章
- WP之Sql Server CE数据库
如何在WP8中进行数据存储,你首先想到应该是独立存储,但是独立存储似乎存储文件更方便,如果我们希望像处理对象的形式,该怎么办呢,答案就是Sql Server CE. Sql Server CE并不是新 ...
- 如何转换SQL Server 2008数据库到SQL Server 2005
背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...
- SQL Server附加数据库出现错误5123的正确解决方法
因为自己有一本基于SQL Server 2005的数据库教程,里边使用的示例数据库是AdventureWorks for SQL Server 2005,而我的机子上装的是SQL Server 200 ...
- 通过SQL Server 2008数据库复制实现数据库同步备份
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...
- SQL Server 2012 数据库笔记
慕课网 首页 实战 路径 猿问 手记 Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...
- SQL Server 2008 数据库镜像部署实例之一 数据库准备
SQL Server 2008 数据库镜像部署实例之一 数据库准备 一.目标 利用Sql Server 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动 ...
- SQL Server中数据库文件的存放方式,文件和文件组
原文地址:http://www.cnblogs.com/CareySon/archive/2011/12/26/2301597.html SQL Server中数据库文件的存放方式,文件和文件组 ...
- Windows XP系统安装SQL Server 2005(开发版)图解
转自Windows XP系统安装SQL Server 2005(开发版)图解 安装前提:由于有些从网上的下载的项目需要导入SQL Server 2005的数据文件,因此,今天便安装了这个数据库,我的系 ...
- php连接sql server 2008数据库
原文:php连接sql server 2008数据库 关于php连接sql server 2008的问题,2000的版本可以直接通过php中的配置文件修改,2005以上的版本就不行了,需要使用微软公司 ...
随机推荐
- 初次接触GWT,知识点总括
初次接触GWT,知识点概括 前言 本人最近开始研究 GWT(Google Web Toolkit) ,现将个人的一点心得贴出来,希望对刚开始接触 GWT的程序员们有所帮助,也欢迎讨论,共同进步. 先说 ...
- nodejs 简单对mongodb 操作
路由到了 index.js /* * GET home page. 控制器 */ exports.index = function(req, res){ // res.render('index', ...
- DEPENDENT SUBQUERY” 和 “SUBQUERY”
http://blog.163.com/li_hx/blog/static/183991413201642410122327/ mysql> CREATE TABLE t1 (a INT, b ...
- block没那么难(三):block和对象的内存管理
本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 ...
- ICMP协议
1. ICMP简介: ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制报文协议,协议号为1,网络层协议. 它是TCP/IP协议族的一个子协议,用于在IP主机 ...
- Java web 文件下载
/** * 下载文件 * @param msg */ public boolean printOutFile(String fileFullName,String fileName) { if (fi ...
- 第五篇:python基础之循环结构以及列表
python基础之循环结构以及列表 python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.pyth ...
- java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
Java的List接口有3个实现类,分别是ArrayList.LinkedList.Vector,他们用于存放多个元素,维护元素的次序,而且允许元素重复. 3个具体实现类的区别如下: 1. Array ...
- Express难点解析
app.js 应用程序入口文件1.// view engine setup 设置视图引擎app.set('views', path.join(__dirname, 'views'));//告诉expr ...
- socket.io 实例
//引用 var io = require('socket.io')(server); //server io.on('connection', function(socket) { // ...