【转】C# DataTable使用方法详解

在项目中常常常使用到DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。

1、添加引用

1

using System.Data;

2、创建表

1

2

3

4

//创建一个空表

DataTable dt = new DataTable();

//创建一个名为"Table_New"的空表

DataTable dt = new DataTable("Table_New");

3、创建列

1

2

3

4

5

6

7

8

9

10

//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);

4、创建行

1

2

3

4

5

6

7

8

9

//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);

5、赋值和取值

1

2

3

4

5

6

7

8

9

10

//新建行的赋值

DataRow dr = dt.NewRow();

dr[0] = "张三";//通过索引赋值

dr["column1"] = DateTime.Now; //通过名称赋值

//对表已有行进行赋值

dt.Rows[0][0] = "张三"//通过索引赋值

dt.Rows[0]["column1"] = DateTime.Now;//通过名称赋值

//取值

string name=dt.Rows[0][0].ToString();

string time=dt.Rows[0]["column1"].ToString();

6、筛选行

1

2

3

4

5

6

7

8

//选择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");

7、删除行

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

//使用DataTable.Rows.Remove(DataRow)方法

dt.Rows.Remove(dt.Rows[0]);

//使用DataTable.Rows.RemoveAt(index)方法

dt.Rows.RemoveAt(0);

//使用DataRow.Delete()方法

dt.Row[0].Delete();

dt.AcceptChanges();

 

//-----区别和注意点-----

//Remove()和RemoveAt()方法是直接删除

//Delete()方法只是将该行标记为deleted,但是还存在,还可DataTable.RejectChanges()回滚,使该行取消删除。

//用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。

//如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。

for (int i = dt.Rows.Count - 1; i >= 0; i--)

{

  dt.Rows.RemoveAt(i);

}

8、复制表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//复制表,同时复制了表结构和表中的数据

DataTable dtNew = new DataTable();

dtNew = dt.Copy();

//复制表

DataTable dtNew = dt.Copy(); //复制dt表数据结构

dtNew.Clear() //清空数据

for (int i = 0; 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[0]);//这是加入的是第一行

9、表排序

1

2

3

4

5

6

7

8

9

10

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[] { 1, "张三" ,20});//添加行

dt.Rows.Add(new object[] { 2, "李四" ,25});

dt.Rows.Add(new object[] { 3, "王五" ,30});

DataView dv = dt.DefaultView;//获取表视图

dv.Sort = "ID DESC";//按照ID倒序排序

dv.ToTable();//转为表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python求组合数c_科学网—Python 组合函数 C(n,m) - 杨玠的博文

Python 中组合函数 C(n,m) n!/(m!*(n-m)!) 有两个&#xff1a; 1.itertools.combinations 返回一个对象&#xff0c;其自带指针函数 因此有可以使用 for&#xff0c;例如 a [1,2,3,4] c itertools.combinations(a,2) for i in c: print i 其返回结果为 (1, 2) (1, 3) (1, 4)…

Qt undefined reference to,Error 255,找不到库函数的解决办法

本人Qt新手&#xff0c;使用Qt5在windows上写一个拨号程序时需要用到一个库librasapi32.a&#xff0c;RAS功能&#xff08;远程访问服务&#xff09;&#xff0c;用来拨号&#xff0c;说明一下这是和VC编程中的静态链接库一样的&#xff0c;只不过名字是Qt重新起的。然后虽然包…

LeetCode每日打卡 - 汉明距离

位异或运算&#xff08;^&#xff09; 运算规则是&#xff1a;两个数转为二进制&#xff0c;然后从高位开始比较&#xff0c;如果相同则为0&#xff0c;不相同则为1。 比如&#xff1a;8^11. 8转为二进制是1000&#xff0c;11转为二进制是1011.从高位开始比较得到的是&#xff…

this指针不全等于对象地址

一般情况下都说this指针等于对象地址&#xff0c;当对象调用类的成员函数时&#xff0c;对象会传给成员函数一个this指针&#xff0c;也就是自己的地址来引用、标识自己。 正是在这个思想下&#xff0c;导致我调试一个问题调试了整整一天。也许是本人学艺不精&#xff0c;但是…

【转】Task和async/await详解

一、什么是异步 同步和异步主要用于修饰方法。当一个方法被调用时&#xff0c;调用者需要等待该方法执行完毕并返回才能继续执行&#xff0c;我们称这个方法是同步方法&#xff1b;当一个方法被调用时立即返回&#xff0c;并获取一个线程执行该方法内部的业务&#xff0c;调用者…

LeetCode每日打卡 - 反转每对括号间的子串

题解中有个更好的思路&#xff0c;stack存入的不是(的坐标&#xff0c;存入每次到左括号的字符串&#xff0c;拿到右括号就对其进行反转&#xff0c;更妙一些。 import java.util.Stack; class Solution {public String reverseParentheses(String s) {Stack<Integer> s…

iar stm32_树莓派玩转STM32开发(一)——介绍篇

01—树莓派树莓派(Raspberry Pi)听起来让人流口水&#xff0c;但它的确不是吃的(身为非吃货的我第一次也以为它是食物……)。树莓派是基于ARM架构的Linux卡片电脑&#xff0c;由英国树莓派基金会开发&#xff0c;目的是以低价硬件以及自由软件来促进学校的基本电脑科学教育。树…

JavaScript面向对象的理解

前言 1. 本文默认阅读者已有面向对象的开发思想&#xff0c;最好是使用过c、java&#xff0c;本人Java不太熟悉&#xff0c;所以例子都是用C来写的。 2. 本人不是专业网站开发人员&#xff0c;接触javascript一年多&#xff0c;自己也编写调试了一些代码&#xff0c;本文完全根…

【转】C# 彻底搞懂async/await

关键&#xff1a; 异步方法&#xff1a;在执行完成前立即返回调用方法&#xff0c;在调用方法继续执行的过程中完成任务。 async/await 结构可分成三部分&#xff1a; &#xff08;1&#xff09;调用方法&#xff1a;该方法调用异步方法&#xff0c;然后在异步方法执行其任务的…

LeetCode每日打卡 - 汉明距离总和

有点慢&#xff0c;两层循环也可以完成&#xff0c;就是换个方向&#xff0c;外层遍历32大小的bits数组&#xff0c;里层遍历nums的数字每次右移一位&#xff0c;计算方法类似。 class Solution {public int totalHammingDistance(int[] nums) {//int 是4byte &#xff0c; 每…

python编写代码_用 Python 编写干净、可测试、高质量的代码

用 Python 编写干净、可测试、高质量的代码Noah Gift 2010 年 12 月 20 日发布简介 编写软件是人所承担的最复杂的任务之一。AWK 编程语言和 "K and R C" 的作者之一 Brian Kernigan 在 Software Tools 一书中总结了软件开发的真实性质&#xff0c;他说&#xff0c;“…

cout怎么读

意思是控制台输出&#xff0c;所以应该是console out&#xff0c;而不是c out。

【转】WebApi中的C#await / async,重点是什么?

有人知道这样做的目的是什么&#xff1f; private async Task<bool> StoreAsync(TriviaAnswer answer) { ... } [ResponseType(typeof(TriviaAnswer))]public async Task<IHttpActionResult> Post(TriviaAnswer answer){var isCorrect await StoreAsync(answer);r…

阿里云服务器被[kthreaddi]挖矿病毒攻击

首先我根本https://blog.csdn.net/weixin_41599103/article/details/115403332这个博客试了下并没有成功&#xff0c;所以应该是被侵入的程序不一样 先去阿里云里看一下详情 明确告诉了是通过docker被攻击了&#xff0c;先将wordpress容器停止并删除容器和镜像 kill掉进行&am…

python canvas画弧度_python画一朵玫瑰给你

听说 python 还能画画&#xff1f;是的&#xff0c;今天亲手画一朵玫瑰给你。turtle 是 python 中一个强大的绘制图像的库&#xff0c;可以用来绘制各种图像&#xff0c;使用起来很方便。但是需要计算各种角度、距离等&#xff0c;所以要想完成一幅复杂的图像还是有一定的难度的…

通俗彻底解读批处理的延迟变量

先说环境变量 一个批处理可以看成是一个程序&#xff0c;它的环境变量就是自己的全局变量。操作系统可以看成是一个大程序&#xff0c;它的环境变量同样也是全局变量&#xff0c;只不过为了和程序的环境变量区别&#xff0c;就叫做全局环境变量了&#xff0c;既然为了区别&…

LeetCode每日打卡 - 4的幂

不使用循环来今天解题 public boolean isPowerOfFour(int n) {return n > 0 && (n & (n-1)) 0 && n % 31;}首先去做了2的幂这道题&#xff0c;并了解了n&(n-1)的过程&#xff0c;然后思考一下这道题:求二进制中1的个数&#xff0c;理解了n&(n-…

【转】探索c#之Async、Await剖析

阅读目录&#xff1a; 基本介绍基本原理剖析内部实现剖析重点注意的地方总结 基本介绍 Async、Await是net4.x新增的异步编程方式&#xff0c;其目的是为了简化异步程序编写&#xff0c;和之前APM方式简单对比如下。 APM方式&#xff0c;BeginGetRequestStream需要传入回调函数…

时间计算题100道_小学数学专项练习:计算题200道,趁早打印给孩子,期末考试拿100分!...

点击上方「升学的秘诀」关注我们&#xff01;获取更多教育经验、方法、学习资料等&#xff0c;每天中午12点与您相约&#xff01;▼说到我们数学学习过程中最重要的是什么&#xff1f;毋庸置疑那就是我们的一个计算能力&#xff0c;计算可以说是贯穿了我们整个数学学习体系&…

批处理for命令各开关的含义

for基本使用方法是&#xff08; 也就是不加功能扩展开关 。&#xff09; FOR %variable IN (set) DO command [command-parameters] 功能扩展开关有&#xff1a; /d 、 /r 、 /f 、 /l 要是死记其功能的话头都大了。巧记的方法是&#xff1a; d &#xff1a;英文为&am…