zoukankan      html  css  js  c++  java
  • DataSet和DataTable详解

    先构建一个结构与用户请求数据结构相同的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='活动'";

  • 相关阅读:
    日期时间检查(格式为:YYYY-MM-DD HH:MM:SS)
    日期合法性验证(格式为:YYYY-MM-DD或YYYY/MM/DD )
    [转]Attribute在.net编程中的应用
    WCF
    [转]使用C#开发ActiveX控件
    在 IIS 中承载 WCF 服务
    [转]一个完整的Installshield安装程序实例
    反射
    特性
    迭代器
  • 原文地址:https://www.cnblogs.com/eaysun/p/4138018.html
Copyright © 2011-2022 走看看