一、思维导图

二、知识点描述

(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. rabbitmq的万能安装和外网访问(NC版)

    先去这个http://www.rabbitmq.com/releases/下载erlang环境和rpm(erlang的尽量高点,rabbitmq版本差不多就可以了,) erlang-19.0.4-1. ...

  2. Java并发编程--7.Java内存操作总结

    主内存和工作内存 工作规则 Java内存模型, 定义变量的访问规则, 即将共享变量存储到内存和取出内存的底层细节  所有的变量都存储在主内存中,每条线程有自己的工作内存,工作内存中用到的变量, 是从主 ...

  3. 关于SpringApplication包无法导入报错问题

    问题描述:一直再报红线,包始终无法导入,参考过好几个博友分享的解决方案,依然没有效果,对了补充一点SprinBoot版本为2.0.3. 问题解决:目前通过更换版本得到解决1.5.6或者1.5.8都可以 ...

  4. JVM(二)GC算法和垃圾收集器

    前言 垃圾收集器(Garbage Collection)通常被成为GC,诞生于1960年MIT的Lisp语言.上一篇介绍了Java运行时区域的各个部分,其中程序计数器.虚拟机栈.本地方法栈3个区域随线 ...

  5. python logging模块按天滚动简单程序

    简单日志按天滚动,加入apsheduler,用crontab模式按小时运行测试: import logging from logging.handlers import TimedRotatingFi ...

  6. 以代码爱好者角度来看AMD与CMD(转)

    随着浏览器功能越来越完善,前端已经不仅仅是切图做网站,前端在某些方面已经媲美桌面应用.越来越庞大的前端项目,越来越复杂的代码,前端开发者们对于模块化的需求空前强烈.后来node出现了,跟随node出现 ...

  7. 1549: Navigition Problem (几何计算+模拟 细节较多)

    1549: Navigition Problem Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 256 Mb     Su ...

  8. Linux进程管理——fork()和写时复制

    写时复制技术最初产生于Unix系统,用于实现一种傻瓜式的进程创建:当发出fork(  )系统调用时,内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程.这种行为是非常耗时的,因为它需要: · ...

  9. 考虑写一个不抛出异常的swap函数

    我们可以调用std下的swap函数,这是一个模板函数:既可以: ; ; std::swap(a,b); cout<<"a = "<<a<<&qu ...

  10. Activiti6.0 工作流引擎 websocket即时聊天发图片文字 好友群组 SSM源码

    即时通讯:支持好友,群组,发图片.文件,消息声音提醒,离线消息,保留聊天记录 (即时聊天功能支持手机端,详情下面有截图) 工作流模块---------------------------------- ...