当前位置:首页 > .net入门教程之:DataSet,DataTable,DateView的用法

.net入门教程之:DataSet,DataTable,DateView的用法

点击次数:3220  更新日期:2013-06-07

DataSet是不依赖于数据库的独立数据集合。


所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不在依赖于数据库链路。
DataSet就是一个临时的小仓库,通过sqlDataApert,可相当于卡车,将数据从数据库中通过适配器sqlDataApert放到DataSet中,所以即使断开了连接,也照样可以与数据库打交道,下面看一个例子:
public static DataSet Query(string sqlstr)
{
using(OleDbConnection conn=new OleDbConnection(CONNSTR))
{
try
{
DataSet ds = new DataSet()
OleDbDataAdapter da = new OleDbDataAdapter();
da.Fill(ds, ds);
return ds;
}
catch (OleDbException e)
{
throw new Exception(e.Message);
}
}
}
可以看出基本用法,通过OleDbDataAdapter的Fill方法将数据填充到DataSet中,其中
da.Fill(ds, ds); 后面的ds是表明,因为DataSet中包含很多表,其实我们就是把数据添加到DataSet的表中,这个在后面会讲到,如果不写,则以索引0开始
DataTable dt=ds.tables[ds]
DataTable dt=ds.tables[0];

编写代码创建DataTable对象

  ①、创建DataTable对象:DataTable tbl = new DataTable("TableName");

  ②、将DataTable添加到DataSet对象的Table集合

  DataSet ds = new DataSet();

  DataTable tbl = new DataTable("Customers");

  ds.Tables.Add(tbl);

  DataSet ds = new DataSet();

  DataTable tbl = ds.Tables.Add("Customers");

  DataTable对象只能存在于至多一个DataSet对象中。如果希望将DataTable添加到多个DataSet中,就必须使用Copy方法或Clone方法。Copy方法创建一个与原DataTable结构相同并且包含相同行的新DataTable;Clone方法创建一个与原DataTable结构相同,但没有包含任何行的新DataTable。


DataTable简介

 

         (1)构造函数
         DataTable()   不带参数初始化DataTable 类的新实例。
         DataTable(string tableName)  用指定的表名初始化DataTable 类的新实例。
         DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable类的新实例。
         (2) 常用属性
         CaseSensitive    指示表中的字符串比较是否区分大小写。
         ChildRelations   获取此DataTable 的子关系的集合。
         Columns             获取属于该表的列的集合。
         Constraints        获取由该表维护的约束的集合。
         DataSet               获取此表所属的DataSet。DataSet相关信息,可见我以前的一篇文章《数据访问(2)-DataSet》
         DefaultView       获取可能包括筛选视图或游标位置的表的自定义视图。
         HasErrors          获取一个值,该值指示该表所属的DataSet 的任何表的任何行中是否有错误。
         MinimumCapacity  获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。
         Rows                  获取属于该表的行的集合。
         TableName       获取或设置DataTable 的名称。

         (3)常用方法
         AcceptChanges()   提交自上次调用AcceptChanges() 以来对该表进行的所有更改。
         BeginInit()         开始初始化在窗体上使用或由另一个组件使用的DataTable。初始化发生在运行时。

         Clear()               清除所有数据的DataTable。
         Clone()              克隆DataTable 的结构,包括所有DataTable 架构和约束。
         EndInit()            结束在窗体上使用或由另一个组件使用的DataTable 的初始化。初始化发生在运行时。
         ImportRow(DataRow row)    将DataRow 复制到DataTable 中,保留任何属性设置以及初始值和当前值。
         Merge(DataTable table)  将指定的DataTable 与当前的DataTable 合并。
         NewRow()         创建与该表具有相同架构的新DataRow。


DataView类用来表示定制的DataTable的视图。


DataTable和DataView的关系是遵循著名的设计模式--文档/视图模式,其中DataTable是文档,而Dataview是视图。

在任何时候,你都可以有多个基于相同数据的不同的视图。更重要的是,你可以对每一个具有自己一套属性、方法、事件的视图作为独立的对象进行处理。这也代表了相对ADO一个巨大的飞跃。
创建DataView
public DataView();
public DataView(DataTable);
DataView只有同已经存在的、很可能是非空的DataTable对象连接后才可用。通常,这个连接在构造时就指定了。
DataView dv;
dv = new DataView(theDataSet.Tables["Employees"]);
但是,你也可以先创建一个新的视图,然后再用Table属性同表相关联。
DataView dv = new DataView();
dv.Table = theDataSet.Tables["Employees"];
DataView构造函数使你由DataTable中得到一个DataView对象。如果需要,反之亦可。事实上,DataTable对象的DefaultView属性返回一个该表的DataView对象。
DataView dv = dt.DefaultView;
一旦你有了DataView对象, 你可以利用它的属性来建立你希望用户见到的数据行集。一般,你可以使用下列属性:
RowFilter
Sort
前者可以定制视图中可见数据应匹配的规则。而后者通过表达式来进行排序。当然你可以使用这两者的任意组合。