AppleSeeker's Tech Blog
Welcome to AppleSeeker's space
posts - 104,  comments - 773,  trackbacks - 6

这篇文章主要介绍在设备中访问本地数据库的一种方法,通过使用SqlCeResultSet方式来更快、更有效的访问数据库。

 

通过使用数据源来操作数据库访问,一般使用DataSet和SqlCeResultSet

到底选择哪一个更好呢?

 

DataSet和SqlCeResultSet都能作为数据源用在数据绑定,或者就直接作为操作数据库的一种方法,到底它们有哪些差异呢?DataSet对象的功能非常丰富,而且可以将数据存储在不同的DataTable中,其中每一个都由Column组成,而每行数据则由DataRow来描述。DataSet还能用于对应表的数据约束(是否为空等),还可以描述表之间的关系(主外键对应),类似于一个关系型的数据库。能够保存所有从数据库来的数据,并且可以将改变的值保存起来,并由行状态来区别,可以临时保存数据。

 

相对而言,SqlCeResultSet有很大不同,它不存储数据,可以直接读取数据、也可以直接更新数据,所以说是一个轻量型的数据访问对象。

 

DataSet应用可以用作分布式程序、离线访问程序,用来数据传递。

在内存有限的设备中,访问本地的数据库,使用DataSet就很大的浪费资源了,此时SqlCeResultSet就有了很好的用武之地了。可以将SqlCeResultSet看成为一个功能的组合:DataSet 的可更新性和可滚动性以及与 SqlCeDataReader 类似的性能。

 

程序演示:

通过Get Data来读取数据,然后可以New、Update、Delete数据。

效果如下:

新增了1条SysNo为12的记录。

选择了SysNo为6的一行,按Update,然后该行的Qty和Price已发生变化。

选择SysNo为9的记录,按Delete,这该行被删除。

 

演示效果很简单,代码也很简单。

选择一个本地数据库,然后在工程中添加一个DataSet,选择好访问的表。在工程界面,选择好DataSet的XSD文件,然后在属性界面,修改Custom Tool(自定义工具)改为MSResultSetGenerator,这样DataSet就会改为SqlCeResultSet了,非常方便。而且生成的SqlCeResultSet为强类型的。

 

在Form_Load事件中先将对象实例化,传入连接字符串和操作方式。

1 private void Form1_Load(object sender, EventArgs e)
2 {
3     orderSet = new DeviceSQLDemo2.DBResultSets.OrdersResultSet(connString, ResultSetOptions.Scrollable | ResultSetOptions.Sensitive | ResultSetOptions.Updatable);
4 }

 

在绑定数据源时,只需要用SqlCeResultSet绑定一个数据源,在绑定到控件即可。

1 BindingSource bs = new BindingSource();
2 orderSet.Bind(bs);
3 this.dataGrid1.DataSource = bs;

 

新增时,只需要使用Add表名Record即可,修改和删除时,先要使用ReadAbsolute方法,先将游标移到对应行。

修改操作只需要对SqlCeReusltSet对象的属性修改即可,然后使用update方法,就会立刻更新数据库。

删除操作则使用Delete方法就可以删除游标所在行了。

 

本文主要介绍SqlCeResultSet的使用方法,使得大家能够在操作本地数据库时,提供程序的性能。

 

代码下载:DeviceSQLDemo2.rar

开发环境:VS2008+WM6.0

 

Author:AppleSeeker
Date:2008-08-12

posted on 2008-08-12 10:45 AppleSeeker(冯峰) 阅读(...) 评论(...) 编辑 收藏