标签:
先构建一个结构与用户请求数据结构相同的DataTable,然后将用户的请求数据填充到构建好的DataTable中,最后将DataTable添加到DataSet中。
DataTable,,DataColumn,DataRow 深入研究
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=‘活动‘";
在我们编写代码的时候从数据库里取出数据,填充到dataset里,再根据表的名字,实例化到 datatable 中。其实使用 dataset 相当于所使用数据库中数据的副本,保存在服务器的内存中。
●注意如下 Ado.net 关系:
Connection_____Command____DataAdapter____Dataset _____Datareader
● DataSet 是放在内存中的,对DataSet中数据的修改并不直接反应到数据库,要通过 DataAdapter 的 Update 方法更新回数据库
● DataSet相当你用的数据库; DataTable相当于你的表。一个 DataSet 可以包含多个 DataTable
DataSet 由表、关系和约束的集合组成。在 ADO.NET 中,DataTable对象用于表示DataSet 中的表。DataTable 表示一个内存内关系数据的表;
按名称引用DataSet中的表和关系是区分大小写的。一个DataSet 中可以存在两个或更多个名称相同但大小写不同的表或关系。例如,可以有 Table1 和 table1。在这种情况下,对其中一个表的按名称引用必须精确匹配该表名称的大小写,否则会引发异常。例如,如果 DataSet myDs 包含表 Table1 和 table1,则会按名称将 Table1 当作 myDS.Tables[ "Table1"] 来引用,而将 table1 当作 myDS.Tables ["table1 "] 来引用。如果试图将其中任一个表当作 myDS.Tables ["TABLE1 "] 来引用,则会生成异常。
如果只存在一个具有特定名称的表或关系,则区分大小写规则不适用。也就是说,如果 DataSet 中没有其他任何表或关系对象匹配该特定表或关系对象的名称,那么即使大小写不同,仍可以按采用任何大小写的名称来引用该对象,而不会引发异常。例如,如果 DataSet 只包含 Table1,则可以使用 myDS.Tables[ "TABLE1"] 来引用它。
标签:
原文地址:http://www.cnblogs.com/xumingyang/p/4571828.html