C#DataTable使用方法详解
在项目中常常常使用到DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。
1、添加引用
|
1
2
|
using System.Data;using System.Data.SqlClient;//连接数据库
|
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();//转为表 |
C#DataTable使用方法详解的更多相关文章
- C# DataTable使用方法详解--删除表数据
在项目中常常常使用到DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 1.添加引用 1 u ...
- session的使用方法详解
session的使用方法详解 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器 ...
- Kooboo CMS - Html.FrontHtml[Helper.cs] 各个方法详解
下面罗列了方法详解,每一个方法一篇文章. Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解 Kooboo CMS - Html.FrontHtml.Posit ...
- HTTP请求方法详解
HTTP请求方法详解 请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源] GET方法用来请求已被URI识别的资源.指定 ...
- ecshop后台增加|添加商店设置选项和使用方法详解
有时候我们想在Ecshop后台做个设置.radio.checkbox 等等来控制页面的显示,看看Ecshop的设计,用到了shop_config这个商店设置功能 Ecshop后台增加|添加商店设置选项 ...
- (转)Spring JdbcTemplate 方法详解
Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- windows.open()、close()方法详解
windows.open()方法详解: window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...
- CURL使用方法详解
php采集神器CURL使用方法详解 作者:佚名 更新时间:2016-10-21 对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程 ...
随机推荐
- itextpdf中表格中单元格的文字水平垂直居中的设置
在使用itextpdf中,版本是5.5.6,使用Doucument方式生成pdf时,设置单元格中字体的对齐方式时,发现一些问题,并逐渐找到了解决方式. 给我的经验就是:看官网的例子才能保证代码的效果, ...
- "轻"量级 Java Web 服务框架漫谈
博文太长了, 还是先说下概要: 框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖的苗条框架; 2) 用户使用框架是否获得各种便利而无阻隔(&q ...
- VMWare虚拟机出现问题
软件版本:VMware ESXi 5.5.0 服务器型号: Dell R720 问题经过: 某天ssh登录其中一个虚拟机,报错:kernel:BUG: soft lockup - CPU#6 stuc ...
- MySQL数据库(二)--库相关操作、表相关操作(1)、存储引擎、数据类型
一.库相关操作 1.创建数据库 (1)语法 create database 数据库 charset utf8; (2)数据库命名规范 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用 ...
- javascript之DOM(三Element类型)
Element类型用于表现XML和HTML的元素,提供了对元素标签名.子节点及特性的访问. 要访问标签名可以使用nodeName和tagName属性,其返回值是一样的. <p id=" ...
- HTTP中分块编码(Transfer-Encoding: chunked)
转自: 妙音天女--分块传输编码~ 参考链接: HTTP MDN--HTTP协议 一.背景: 持续连接的问题:对于非持续连接,浏览器可以通过连接是否关闭来界定请求或响应实体的边界:而对于持续连接,这种 ...
- linux虚拟机获取不到ip的解决方法 --
问题描述: 在win10操作系统上,安装了centos7 虚拟机,安装后,用wifi网络可以获取ip,但是切换到手机热点或有线网络就获取不到ip 解决办法: 按照一般的修改ONBOOT =yes, 然 ...
- Git 游离态的一次问题解决
jie@mozq MINGW64 /d/0xcEdu/xcEduService01 ((20ce6a5...)) $ git branch -v * (HEAD detached at 20ce6a5 ...
- Anaconda3(5-1)程序编辑器 自带的spyder
1装好后自带spyder编辑器 2 打开软件 3 每次程序需要制定anaconda3中创建的虚拟环境对应 的python版本的路径 例如在我的电脑我创建了两个环境 而我的pytorch安装在pytho ...
- linux学习18 shell脚本基础-bash变量和逻辑运行
一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:ins ...