一、思维导图

二、知识点描述

(1)构造函数

DataTable()

不带参数初始化DataTable类的新实例

DataTable(string tableName)

用指定的表名初始化DataTable类的新实例

DataTable(string tableName, string tableNamespace)

用指定的表名和命名空间初始化DataTable类的新实例

(2) 常用属性

CaseSensitive

指示表中的字符串比较是否区分大小写

ChildRelations

获取此DataTable的子关系的集合

Columns

获取属于该表的列的集合

Constraints

获取由该表维护的约束的集合

DataSet

获取此表所属的DataSet

DefaultView

获取可能包括筛选视图或游标位置的表的自定义视图

HasErrors

获取一个值,该值指示该表所属的DataSet的任何表的任何行中是否有错误

MinimumCapacity

获取或设置该表最初的起始大小。该表中行的最初起始大小。默认值为 50。

Rows

获取属于该表的行的集合

TableName

获取或设置DataTable的名称

(3)常用方法

AcceptChanges()

提交自上次调用AcceptChanges()以来对该表进行的所有更改

RejectChanges()

方法被调用时,仍处于编辑模式的任何行将取消其编辑。新行被移除。已修改的和已删除的行返回到其原始状态(DataRowState.Unchanged)

GetChanges()

获取DataTable  的副本,该副本包含自上次加载以来或自调用AcceptChanges  以来对该数据集进行的所有更改。

BeginInit()

开始初始化在窗体上使用或由另一个组件使用的DataTable。初始化发生在运行时

Clear()

清除所有数据的DataTable

Clone()

克隆DataTable的结构,包括所有DataTable架构和约束

Copy()

复制,具有与该 DataTable相同的结构(表架构和约束)和数据。

注意如果这些类已经过派生,则副本也具有相同的派生类

EndInit()

结束在窗体上使用或由另一个组件使用的DataTable的初始化。初始化发生在运行时

ImportRow(DataRow row)

将DataRow复制到DataTable中,保留任何属性设置以及初始值和当前值。

Merge(DataTable table)

将指定的DataTable与当前的DataTable合并

合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表,则需要分别合并每个子表

NewRow()

创建与该表具有相同架构的新DataRow

三、示例代码

添加引用

using System.Data;

创建表

DataTable dt = new DataTable();//创建一个空表
DataTable dt = new DataTable("Table_New");

创建列

//1.创建空列
DataColumn dc = new DataColumn();
dt.Columns.Add(dc);
//2.创建带列名和类型名的列(两种方式任选其一)
dt.Columns.Add("column0", System.Type.GetType("System.String"));
dt.Columns.Add("column0", typeof(String));
//3.通过列架构添加列
DataColumn dc = new DataColumn("column1",System.Type.GetType("System.DateTime"));
DataColumn dc = new DataColumn("column1", typeof(DateTime));
dt.Columns.Add(dc);

创建行

//1.创建空行
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
//2.创建空行
dt.Rows.Add();
//3.通过行框架创建并赋值
dt.Rows.Add("张三",DateTime.Now);//Add里面参数的数据顺序要和dt中的列的顺序对应
//4.通过复制dt2表的某一行来创建
dt.Rows.Add(dt2.Rows[i].ItemArray);

赋值和取值

//新建行的赋值
DataRow dr = dt.NewRow();
dr[] = "张三";//通过索引赋值
dr["column1"] = DateTime.Now; //通过名称赋值
//对表已有行进行赋值
dt.Rows[][] = "张三"; //通过索引赋值
dt.Rows[]["column1"] = DateTime.Now;//通过名称赋值
//取值
string name=dt.Rows[][].ToString();
string time=dt.Rows[]["column1"].ToString();

筛选行

//选择column1列值为空的行的集合
DataRow[] drs = dt.Select("column1 is null");
//选择column0列值为"李四"的行的集合
DataRow[] drs = dt.Select("column0 = '李四'");
//筛选column0列值中有"张"的行的集合(模糊查询)
DataRow[] drs = dt.Select("column0 like '张%'");//如果的多条件筛选,可以加 and 或 or
//筛选column0列值中有"张"的行的集合并按column1降序排序
DataRow[] drs = dt.Select("column0 like '张%'", "column1 DESC");

删除行

//使用DataTable.Rows.Remove(DataRow)方法
dt.Rows.Remove(dt.Rows[]);
//使用DataTable.Rows.RemoveAt(index)方法
dt.Rows.RemoveAt();
//使用DataRow.Delete()方法
dt.Row[].Delete();
dt.AcceptChanges(); //-----区别和注意点-----
//Remove()和RemoveAt()方法是直接删除
//Delete()方法只是将该行标记为deleted,但是还存在,还可DataTable.RejectChanges()回滚,使该行取消删除。
//用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。
//如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。
for (int i = dt.Rows.Count - ; i >= ; i--)
{
  dt.Rows.RemoveAt(i);
}

复制表

//复制表,同时复制了表结构和表中的数据
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
//复制表
DataTable dtNew = dt.Copy(); //复制dt表数据结构
dtNew.Clear() //清空数据
for (int i = ; i < dt.Rows.Count; i++)
{
if (条件语句)
{
dtNew.Rows.Add(dt.Rows[i].ItemArray); //添加数据行
}
}
//克隆表,只是复制了表结构,不包括数据
DataTable dtNew = new DataTable();
dtNew = dt.Clone();
//如果只需要某个表中的某一行
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
dtNew.Rows.Clear();//清空表数据
dtNew.ImportRow(dt.Rows[]);//这是加入的是第一行

表排序

DataTable dt = new DataTable();//创建表
dt.Columns.Add("ID", typeof(Int32));//添加列
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Age", typeof(Int32));
dt.Rows.Add(new object[] { , "张三" ,});//添加行
dt.Rows.Add(new object[] { , "李四" ,});
dt.Rows.Add(new object[] { , "王五" ,});
DataView dv = dt.DefaultView;//获取表视图
dv.Sort = "ID DESC";//按照ID倒序排序
dv.ToTable();//转为表

四、效果截图

ADO.net中DataTable的应用的更多相关文章

  1. 第八周学习笔记-ADO.Net中DataTable的应用

    ADO.Net中DataTable的应用  一.知识点描述 1.概述:DataTable是一个临时保存数据的网格虚拟表(表示内存中数据的一个表),是ADO.Net库中的核心对象. 2.DataTabl ...

  2. ADO.NET中DataTable类的使用

    DataTable类将关系数据表示为表格形式.在创建DataTable之前,必须包含System.Data名称空间.ADO.NET提供了一个DataTable类来独立创建和使用数据表.它也可以和Dat ...

  3. ADO.NET中的五个主要对象

    Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的.Close和Dispose的区别,Close以后还可以Open,Dispose以后则不 ...

  4. 【转】ADO.NET中的五个主要对象

    Connection 物件    Connection 对象主要是开启程序和数据库之间的连结.没有利用连结对象将数据库打开,是无法从数据库中取得数据的.这个物件在ADO.NET 的最底层,我们可以自己 ...

  5. 第九周学习笔记-ADO.Net中DataSet的应用

    一.知识点描述 1.含义:DataSet是ADO.Net的断开式结构的核心组件,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据.DataSet包含一个或多个DataTable ...

  6. [No0000BC]ADO.NET中的几个主要对象

    ADO 指 ActiveX 数据对象(ActiveX Data Objects). 从一个 ASP 页面内部访问数据库的通常的方法是: 创建一个到数据库的 ADO 连接 打开数据库连接 创建 ADO ...

  7. [转载]ADO.NET中的五个主要对象

    Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的.Close和Dispose的区别,Close以后还可以Open,Dispose以后则不 ...

  8. ADO.NET中的5个主要对象

    1.Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的. Close和Dispose的区别,Close以后还可以Open,Dispose以 ...

  9. 存储过程分页查询和在ado.net中的使用,返回查询总数

    1.创建查询分页的存储过程 CREATE PROCEDURE PageQuery @tableName VARCHAR(),-- 表名 @strWhere VARCHAR(),-- 查询条件 @col ...

随机推荐

  1. Jinja2 简明使用手册

    @Jinja2 简明使用手册(转载) 介绍 Jinja是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker和velocity. 运行需求 Jinja2需要 ...

  2. python第一课——关于python的一些概念

    day01(上午): 1.学习方法(建议): 1).不要依赖于我的视频,绝对不要晚上将视频全部在过一遍 2).上课不要记笔记,而且不要用纸质的笔记本去整理笔记 3).不要只看不敲,代码方面我们需要做到 ...

  3. git使用,在ubuntu中

    #安装sudo apt install git要先到github官网建一个账号. #配置 你的github git config --global user.name "fanbrightu ...

  4. 1898: [Zjoi2005]Swamp 沼泽鳄鱼

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1582 Solved: 870 [Submit][S ...

  5. HBase学习之路 (九)HBase phoenix的使用

    HBase phoenix的下载 下载地址http://mirror.bit.edu.cn/apache/phoenix/ 选择对应的hbase版本进行下载,测试使用的是hbase-1.2.6版本

  6. 基于AppDomain的"插件式"开发

    很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...

  7. Usaco2008 Jan

    [Usaco2008 Jan] https://www.luogu.org/problemnew/show/P2419 题目描述 N (1 ≤ N ≤ 100) cows, conveniently ...

  8. 一个牛公司的关于oracle数据的面试题

    我也忘记是从哪里download的了,为了加深记忆,也为了完成我的博客,我决定写进博客里,如果有错误,欢迎大家指正,谢谢. 问题一. 解释一下sum的作用? 答:求符合条件的记录某数值字段的和. 问题 ...

  9. POJ 1151 Atlantis 矩形面积求交/线段树扫描线

    Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...

  10. u-boot-1.1.6实现自定义命令

    学习目标: 1.了解u-boot-1.1.6中命令的实现机制 2.掌握如何在u-boot-1.1.6中添加自定义命令 1.命令的实现机制 uboot运行在命令行解析模式时,在串口终端输入uboot命令 ...