DataSet,DataTable,DataColumn,DataRow的常用操作

时间:2022-07-01 08:26:40

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,"列名");