您的位置:首页 > 数据库

DataSet和DataTable

2016-07-27 10:55 281 查看
刚开始学习C#时,老是搞不清楚DataSet和DataTable有什么区别,查了资料终于大致有了了解。

DataSet包含了多个DataTable,以及DataTable之间的约束关系。DataSet可以把它看成数据库,而DataTable就是数据库里的一个表。这就是最基本,最直观的解释。

DataTable是内存中的一个关系数据表,可以独立创建使用,也可以作为DataSet的一个成员使用!

如何将DataTable作为DataSet的一个成员使用:

首先创建一个DataTable对象,其次通过使用Add方法将其添加到DataSet对象的Tables集合中

示例:

DataSet dsClass = new DataSet();   //创建一个新的空班级DataSet

DataTable dtClass = new DataTable("Class"); //创建班级表

dsClass.Tables.Add(dtClass);  //将班级表添加到DataSet中

如果没有指定DataTable名称时把DataTable添加到DataSet中,该表会得到一个从“0”开始递增的默认表名

刚开始创建的表没有表结构,要定义表的结构,必须创建DataColumn对象并将其添加到表的Columns集合中。在为DataTable定义了结构之后,通过DataRow对象将数据添加到表的Rows集合中

 

 

DataColumn

DataColumn是创建DataTable的基础,通过向DataTable中添加一个或多个DataColumn对象来定义DataTable的结构。DataColumn有一些常用属性用于对输入数据的限制,例如:数据类型,数据长度,默认值。

DataColumn的常用属性

AllowDBNull   是否允许空值

ColumnName    存储的数据类型

DataType      存储的数据类型

MaxLength     获取或设置文本列的最大长度

DafaultValue  默认值

Table        所属的DataTable的名称

Unique       DataColumn的值是否唯一

定义DataColumn有两种方法,

方法一:

//创建班级名称列

DataColumn className = new DataColumn();

className.ColumnName = "ClassName";

className.DataType = System.Type.GetType("System.String");

className.MaxLength = 50;

//创建班级名称列

DataColumn className = new DataColumn("ClassName",typeof(string));

className.MaxLength = 50;

 

 

DataRow

DataRow表示DataTable中包含的实际数据,我们可以通过DataRow将数据添加到用DataColumn定义好DataTable中。

//创建班级名称列

DataColumn className = new DataColumn("ClassName",typeof(string));

className.MaxLength = 50;

//创建一个新的数据行

DataRow drClass = dtClass.NewRow();

drClass["className"] = this.txtClassName.Text.Trim();

 

 

如何自定义DataSet

1.创建DataSet对象

2.创建DataTable对象

3.创建DataColumn对象构建表结构

4.将创建好的表结构添加到表中

5.创建DataRow对象新增数据

6.将数据插入到表中

7.将表添加到DataSet中

示例:

//创建一个新的空班级DataSet

DataSet dsClass = new DataSet();

//创建班级表

DataTable dtClass = new DataTable("Class");

//创建班级名称列

DataColumn dcClassName = new DataColumn("ClassName",typeof(string));

className.MaxLength = 50;

//创建年级ID列

DataColumn dcGradeID = new DataColumn(GradeID",typeof(int));

//将定义好列添加到班级表中

dtClass.Columns.Add(dcClassName);

dtClass.Columns.Add(dcGradeID);

//创建一个新的数据行

DataRow drClass = dtClass.NewRow();

drClass["className"] = this.txtClassName.Text.Trim();

drClass["gradeID"] = objGrade.GetGradeIDByGradeName(this.cboGrade.Text.Trim());

//将新的数据行插入班级表中

dtClass.Rows.Add(drClass);

//将班级表添加到DataSet中

dsClass.Tables.Add(dtClass);

如何获取DataSet中的数据

从DataSet中获取数据有两种方式:

1.第一种方式是通过指定DataSet中的具体DataTable的某行某列来获取数据。

    步骤:

        1.通过表名,从DataSet中获取指定的DataTable

        2.通过索引,从DataTable中获取指定的DataRow

        3.通过列名,从DataRow中获取指定列的数据

例:

//得到班级名称

dsClass.Table["Class"].Row[0]["ClassName"];

//得到年级ID

dsClass.Tables["Class"].Row[0]["GradeID"]

2.另一种方式是将DataSet中的数据直接绑定到数据展示控件上。

 

我们一般都需要对从DataSet中提取出来的数据做一些简单的修饰,如隐藏特定列,按照某列排序。其实很简单,.net为我们提供了一个DataView对象,它可以像数据库中的视图一样帮助我们建立DataSet中数据对应的不同视图。(一个DataTable可以动态生成多个DataView)

DataView

DataView为我们提供DataTable的动态视图,并可以对动态生成的视图中的数据进行排序、笪选等操作,它与数据库中的视图类似,唯一不同的是它无法提供关联DataTable的视图,它不能排除原表中存在的列,也不能向原表中追加不存在的列

示例:

//过滤掉用户状态为非活动的学员

//对过过滤后的学员信息以学员名称降序排序

DataSet dsStudent = new DataSet();

DataView dvStudent = new DataView();

dvStudent.Table = dsStudent.Tables["studentTable"];

dvStudent.RowFilter = "UserState = '活动'";

dvStudent.Sort = "StudentName DESC";

DataView几个常用的属性:

Table        用于获取或设置源DataTable

Sort          获取或设置DataView的一个或多个排序列以及排序顺序

RowFilter     获取或设置用于筛选在DataView中查看哪些行的表达式

Count          在应用RowFilter后,获取DataView中的行数

 

经验:

在开发中如果需要对DataGrigView展示的数据进行动态筛选或排序时,我们最好使用DataTable的DefaultView(默认视图)属性来得到DataTable的视图,这样我们就可以减少实例化DataView对象的步骤,以及获取DataView对象原DataTable的过程。

DataTable dtStudent = (DataTable)dataGridView.DataSource;

dtStudent.Tables["studentTable"].DefaultView.RowFilter = "UserState='活动'";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息