zoukankan      html  css  js  c++  java
  • DataSet,DataTable,DataColumn,DataRow的常用操作

    DataSet

    这个玩意没什么好讲的,当ado.net查询出有多张表集合的数据返回时,这个时候就会使用到DataSet.

    DataTable

    //表之间直接赋值 dt2=dt1; 两者指向同一内存空间
    //表克隆 DataTable dt2=dt1.Clone(); 复制架构和约束,但不复制数据
    //表复制 DataTable 2=dt1.Copy 复制架构和数据,但不复制约束

    DataTable table2 = table.Clone();
    table.Merge(table2);  //合并两表

    DataTable dt3=new DataTable("表名");

    DataTable dt3=new DataTable();

    DataColumn

    DataColumn 是用来模拟物理数据库中的列。DataColumn 的组合组成了 DataTable 中列的架构。生成 DataTable 架构的方法就是向 DataColumnCollection 中添加DataColumn 对象来生成架构。同物理数据库一样,列是有类型的,比如 varchar, datatime, int 等, DataColumn 有 DataType 属性表示这一列所存储的数据种类。由于 DataTable 所包含的数据通常合并回其原始数据源,因此必须使其数据类型与数据源中的数据类型匹配。

    DataTable table = new DataTable();
    table.Columns.Add(new DataColumn("columns1",System.Type.GetType("System.String")));  //为DataTable添加列方法一
    table.Columns.Add(new DataColumn("columns2",typeof(int)));  //为DataTable添加列方法二

    DataColumn colu = new DataColumn();
    colu.ColumnName = "";
    colu.DataType = typeof(int);
    table.PrimaryKey = new DataColumn[] {colu};   //将列设为主键

    colu.AutoIncrement = true;  //将列设为自增
    colu.AutoIncrementSeed = 1;  //自增起始数
    colu.AutoIncrementStep = 1;  //每次自增数

    循环表列示列

    public static string[] GetColumnsByDataTable(DataTable dt)
           {
               string[] strColumns = null;


               if (dt.Columns.Count > 0)
               {
                   int columnNum = 0;
                   columnNum = dt.Columns.Count;
                   strColumns = new string[columnNum];
                   for (int i = 0; i < dt.Columns.Count; i++)
                   {
                       strColumns[i] = dt.Columns[i].ColumnName;
                   }
               }

               return strColumns;
           } 

    DataRow

    DataRow 模拟的是数据库中的一行。使用 HasVersion 和 IsNull 属性确定特定行值的状态。

    DataRow[] rows = table.Select(); //获得表的所有行数据

    DataRow[] rowsTwo = table.Select("id>2"); //带条件获取所有行数据

    DataRow[] rows = table.Select(); //获得表的所有行数据

    DataTable dx = new DataTable();
    dx.ImportRow(row); //将DataRow 复制到DataTable 中,保留任何属性设置以及初始值和当前值。

    table.Rows.Add(new object { }); //添加行

    DataView

    DataView dv = table.DefaultView;
    DataView dv2 = new DataView();
    DataView dv3 = new DataView(table);

    一旦你有了DataView对象,你可以利用它的属性来建立你希望用户见到的数据行集。一般,你可以使用下列属性:

    • RowFilter
    • Sort

    前者可以定制视图中可见数据应匹配的规则。而后者通过表达式来进行排序。当然你可以使用这两者的任意组合。

    设置过滤 RowFilter是一个可读写的属性,用来读取和设置表过滤的表达式。

    public virtual string RowFilter {get; set;}
    你可以用列名,逻辑和数字运算符和常量的任意合法组合组成表达式。以下是一些例子:

    dv.RowFilter = "Country = 'USA'";
    dv.RowFilter = "EmployeeID >5 AND Birthdate < #1/31/82#"
    dv.RowFilter = "Description LIKE '*product*'"

    让我们来看一下过滤器的基本规则和运算符。
    过滤字符串是表达式的逻辑连接。可以用AND,OR,NOT来连接成一个较短的表达式,也可以使用圆括号来组成子句,指定优先的运算。
    通常包含列名的子句同字母、数字、日期或另一个列名进行比较。这里,可以使用关系运算符和算术运算符,如>=, <, >, +, *, % (取模)等等。
    如果要选取的行并不能方便地通过算术或逻辑运算符表达,你可以使用IN操作符。以下代码显示如何选取一个随机行:

    dv.RowFilter = "employeeID IN (2,4,5)"

    你也可以使用通配符*和%,它们同LIKE运算符一起使用时显得更有用。它们都表示任意数量的字符,可以相互替代使用。
    请注意,如果在LIKE子句中已经有了*或%字符,你必须用方括号将其括起,以免歧义。如果很不幸,字符串中方括号本身也存在了,那么它也必须用将本身括起。这样,匹配语句会如下所示:

    dv.RowFilter = "Description LIKE '[[]*[]]product[[]*[]]"

    通配符只允许在过滤字符串的开头或结尾处使用,而不能在字符串中间出现。例如,下列语句会产生运行时错误:

    dv.RowFilter = "Description LIKE 'prod*ct"

    DataView去重 ToTable()

    dv.ToTable(true,"列名");

  • 相关阅读:
    关于软件设计中遇到的问题
    关于power shell
    如果TChart的发生异常
    重温gof版《设计模式》中的创建型模式
    如何更好的使用cvs
    存储过程返回临时表的问题
    关于bugzilla与svn结合的配置注意事项
    VC知识点:如何用vc6调试CGI程序
    如何让应用程序托盘化
    符号表
  • 原文地址:https://www.cnblogs.com/Xanthus/p/9468529.html
Copyright © 2011-2022 走看看