WP7.1原生数据库介绍
来源:互联网 发布:top域名值钱吗 编辑:程序博客网 时间:2024/06/06 08:44
终于在Wp7.1中加入了数据库,使保存、查找、插入数据不再痛苦。在WP7中如果要做到这些,要么使用XML自已实现,要么使用第三方数据库,但是第三方数据库要么性能不好,要么占用空间太大,要么收费,现在总算有原生的本地数据库了。
1. 架构
这个本地数据库,不能直接支持Transact-SQL,需要通过LINQ to SQL 对象模型作为Proxy来操作数据库,为此引入了一个新的类System.Data.Linq.DataContext。这与windows mobile上的SQL CE有了很大的差别。
2. LINQ to SQL
在Windows phone中,LINQ to SQL既不能直接支持执行Data Definition Language(DDL)也不支持Data Modeling Language(DML),另外也不能直接访问ADO.NET。只能支持Microsoft SQL Server Compact Edition (SQL CE)的数据类型。并且需要通过DataContext方式来操来数据库。
3. 支持的数据类型
在SQL Server Compact 4.0中,当Ntext 和 image 数据超过256 bytes 时将会保存到一个新的数据页。这会影响到数据库的密度,因为SQL Server Compact 4.0 数据库是按页方式面不是按字节方式来压缩的。
4. 创建工程
新建一个Windows Phone工程,最好是MVVM工程,也就是选择新建工程中的Windows Phone Databound Application 模板直接生成或者手工创建MVVM工程。创建好后,将System.Data.Linq命名空间引入到工程。这个命名空间所在位置\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71中。
5. 创建数据库
新建一个类继承System.Data.Linq.DataContext类,这样就可以用这个类来控制数据库了。
{
public const string ConnectionStr = "Data Source=isostore:/MyDB.sdf";
public Table<MyTable> Rows;
public MyDataContext()
: base(ConnectionStr)
{
}
}
在这个类中同时创建数据库表类。
{
private int _index;
[Column(IsPrimaryKey = true, CanBeNull = false, IsDbGenerated = true, DbType = "INT NOT NULL Identity", AutoSync=AutoSync.OnInsert)]
public int Index
{
get
{
return _index;
}
set
{
if (_index != value)
{
NotifyPropertyChanging("Index");
_index = value;
NotifyPropertyChanged("Index");
}
}
}
private string _name;
[Column]
public string Name
{
get
{
return _name;
}
set
{
NotifyPropertyChanging("Name");
_name = value;
NotifyPropertyChanged("Name");
}
}
private String _gen;
[Column]
public String Gen
{
get
{
return _gen;
}
set
{
NotifyPropertyChanging("Gen");
_gen = value;
NotifyPropertyChanged("Gen");
}
}
private int _age;
[Column]
public int Age
{
get
{
return _age;
}
set
{
NotifyPropertyChanging("Age");
_age = value;
NotifyPropertyChanged("Age");
}
}
#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
}
6. 操作数据库
新建一个ViewModel类,在这个类中实现数据库的操作。在这个类中实现了对数据的选择、保存、更新和删除。在对数据库的操作因为不能直接使用Transact_SQL,所以操作都是通过LINQ来完成的。
MyDataContext _DB;
{
if (IsAddedToDB)
{
if (_DB.DatabaseExists())
{
IEnumerator<MyTable> enumerator = _DB.Rows.GetEnumerator();
while (enumerator.MoveNext())
{
this.Items.Add(enumerator.Current);
}
IsAddedToDB = false;
}
}
}
public bool SaveData(MyTable table)
{
try
{
this.Items.Add(table);
_DB.Rows.InsertOnSubmit(table);
_DB.SubmitChanges();
}
catch (Exception e)
{
return false;
}
return true;
}
public bool DeleteData(MyTable table)
{
try
{
if (_DB.DatabaseExists())
{
_DB.Rows.DeleteOnSubmit(table);
_DB.SubmitChanges();
this.Items.Remove(table);
}
}
catch (Exception e)
{
return false;
}
return true;
}
public bool UpdateData(MyTable source, MyTable dest)
{
try
{
var tables = from item in this.Items where (int)item.Index == source.Index select item;
foreach (MyTable mt in tables)
{
mt.Name = dest.Name;
mt.Age = dest.Age;
mt.Gen = dest.Gen;
break;
}
MyTable table = _DB.Rows.GetOriginalEntityState(source);
table.Name = dest.Name;
table.Age = dest.Age;
table.Gen = dest.Gen;
_DB.SubmitChanges();
}
catch (Exception e)
{
return false;
}
return true;
}
1. 架构
这个本地数据库,不能直接支持Transact-SQL,需要通过LINQ to SQL 对象模型作为Proxy来操作数据库,为此引入了一个新的类System.Data.Linq.DataContext。这与windows mobile上的SQL CE有了很大的差别。
2. LINQ to SQL
在Windows phone中,LINQ to SQL既不能直接支持执行Data Definition Language(DDL)也不支持Data Modeling Language(DML),另外也不能直接访问ADO.NET。只能支持Microsoft SQL Server Compact Edition (SQL CE)的数据类型。并且需要通过DataContext方式来操来数据库。
3. 支持的数据类型
在SQL Server Compact 4.0中,当Ntext 和 image 数据超过256 bytes 时将会保存到一个新的数据页。这会影响到数据库的密度,因为SQL Server Compact 4.0 数据库是按页方式面不是按字节方式来压缩的。
4. 创建工程
新建一个Windows Phone工程,最好是MVVM工程,也就是选择新建工程中的Windows Phone Databound Application 模板直接生成或者手工创建MVVM工程。创建好后,将System.Data.Linq命名空间引入到工程。这个命名空间所在位置\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71中。
5. 创建数据库
新建一个类继承System.Data.Linq.DataContext类,这样就可以用这个类来控制数据库了。
{
public const string ConnectionStr = "Data Source=isostore:/MyDB.sdf";
public Table<MyTable> Rows;
public MyDataContext()
: base(ConnectionStr)
{
}
}
在这个类中同时创建数据库表类。
{
private int _index;
[Column(IsPrimaryKey = true, CanBeNull = false, IsDbGenerated = true, DbType = "INT NOT NULL Identity", AutoSync=AutoSync.OnInsert)]
public int Index
{
get
{
return _index;
}
set
{
if (_index != value)
{
NotifyPropertyChanging("Index");
_index = value;
NotifyPropertyChanged("Index");
}
}
}
private string _name;
[Column]
public string Name
{
get
{
return _name;
}
set
{
NotifyPropertyChanging("Name");
_name = value;
NotifyPropertyChanged("Name");
}
}
private String _gen;
[Column]
public String Gen
{
get
{
return _gen;
}
set
{
NotifyPropertyChanging("Gen");
_gen = value;
NotifyPropertyChanged("Gen");
}
}
private int _age;
[Column]
public int Age
{
get
{
return _age;
}
set
{
NotifyPropertyChanging("Age");
_age = value;
NotifyPropertyChanged("Age");
}
}
#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
}
6. 操作数据库
新建一个ViewModel类,在这个类中实现数据库的操作。在这个类中实现了对数据的选择、保存、更新和删除。在对数据库的操作因为不能直接使用Transact_SQL,所以操作都是通过LINQ来完成的。
MyDataContext _DB;
{
if (IsAddedToDB)
{
if (_DB.DatabaseExists())
{
IEnumerator<MyTable> enumerator = _DB.Rows.GetEnumerator();
while (enumerator.MoveNext())
{
this.Items.Add(enumerator.Current);
}
IsAddedToDB = false;
}
}
}
public bool SaveData(MyTable table)
{
try
{
this.Items.Add(table);
_DB.Rows.InsertOnSubmit(table);
_DB.SubmitChanges();
}
catch (Exception e)
{
return false;
}
return true;
}
public bool DeleteData(MyTable table)
{
try
{
if (_DB.DatabaseExists())
{
_DB.Rows.DeleteOnSubmit(table);
_DB.SubmitChanges();
this.Items.Remove(table);
}
}
catch (Exception e)
{
return false;
}
return true;
}
public bool UpdateData(MyTable source, MyTable dest)
{
try
{
var tables = from item in this.Items where (int)item.Index == source.Index select item;
foreach (MyTable mt in tables)
{
mt.Name = dest.Name;
mt.Age = dest.Age;
mt.Gen = dest.Gen;
break;
}
MyTable table = _DB.Rows.GetOriginalEntityState(source);
table.Name = dest.Name;
table.Age = dest.Age;
table.Gen = dest.Gen;
_DB.SubmitChanges();
}
catch (Exception e)
{
return false;
}
return true;
}
- WP7.1原生数据库介绍
- wp7.1 使用本地数据库
- wp7.1 使用本地数据库
- wp7.1 使用本地数据库
- [wp7数据存储] wp7.1 使用本地数据库
- WP7入门-XAML语法介绍
- wp7工程目录含义介绍
- WP7 Toolkit LoopingSelector 控件 介绍
- WP7开发之SQLite数据库
- WP7中的本地数据库支持
- wp7.1 联系人
- wp7学习日记-1
- wp7
- WP7 性能分析工具FProfile介绍
- 创建使用本地数据库的WP7应用程序
- wp7——sqlite数据库操作
- WP7开发中的数据库系统选择
- 浅谈WP7 本地数据库的选择
- C#实现跑马灯效果
- 手机CPU之各型号CPU比较
- SHEMOX的结构
- 手机、平板、TV大融合中的创业机遇暨Smart TV沙龙
- 是否将网址设置为主页 的代码实现?
- WP7.1原生数据库介绍
- 冬练三九,夏练三伏
- Asp.net FMS 开发视频网站
- 博客开通
- Adaptec 1200A 在Win7下驱动
- Android 学习论坛博客及网站推荐
- 双色球软件设计思路及初步源码
- JQuery控件
- 《Web Load Testing For Dummie》读书笔记