DataTable的一些使用技巧
在做机房的时候经常用到DataTable,发现如果DataTable使用的好的话,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果。现在对我知道的一些技巧做个总结,虽然都是一些简单的,但是发现真的挺好用的。
首先我们对DataTable有了简单的了解:
(1)概念:DataTable 是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO.net 库中的核心对象。——百度的解释
(2)常用方法 :
AcceptChanges()提交自上次调用AcceptChanges()以来对该表进行的所有更改。
BeginInit()开始初始化在窗体上使用或由另一个组件使用的DataTable。初始化发生在运行时。
Clear()清除所有数据的DataTable。
Clone()克隆DataTable 的结构,包括所有DataTable 架构和约束。
EndInit()结束在窗体上使用或由另一个组件使用的DataTable 的初始化。初始化发生在运行时。
ImportRow(DataRow row)将DataRow 复制到DataTable 中,保留任何属性设置以及初始值和当前值。
Merge(DataTable table)将指定的DataTable 与当前的DataTable 合并。
NewRow()创建与该表具有相同架构的新DataRow。
从概念中我们知道DataTable是一个临时而且是虚拟的表,只要是表我们就可以对它进行常见的增删改查的操作,
这样就可以减少我们与数据库的交互次数。
1. 添加列。在DataTable对象中添加列在DataTable对象中添加列的最常用的方法是通过DataTable对象的Column
属性中的Add方法。添加后的每一列都是一个DataColumn对象。
2. 添加行。在DataTable对象中创建行DataTable对象的每一行都是一个DataRow对象,所以创建行时可以先利用
DataTable对象的NewRow方法创建一个DataRow对象,并设置新行中各列的数据,然后利用Add方法将DataRow对
象添加到表中。
例子:
//创建一个Customers数据表
DataTable CustomersTable = new DataTable("Customers ");
//创建一个新的数据行
DataRow arow = CustomersTable.NewRow();
//设置行的值
arow[ColumnName] = DataValue;
//把数据行添加创建的Customers数据表中
CustomersTable.Rows.Add(arow);
3.通过DateAdapter对象的Fill方法将SQL Server数据库中的表填充到DataTable对象中。
下面实在网上找的例子:
//使用DataAdapter的Fill方法向Customers表中填充数据
string connectionString =
"Data Source= local;Initial Catalog=Northwind;Integrated Security=True; UserID=sa;Password=";
string commandString = "Select * from Customers";
SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);
DataSet customers = new DataSet();
dataAdapter.Fill(customers, "Customers");
4 在DataTable实现类似sql语句的查询功能。在脱离数据库的DataSet实现类似sql语句的查询。也就是(select ... from tablename where ...)这样的功能。将从DataSet中查询出来的数据以行的形式保存到arow中。
实现代码如下所示:
DataSet ds= new DataSet();
DataRow[] arow = ds.Tables[TableName].Select("" + ColumnsName+ "='" + DataValue + "'");
代码说明:
TableName:数据集ds中的表名。
ColumnsName:TableName表中的某一列名。
DataValue:和列名对应参数的值。
功能说明:
上面语句功能相当于sql语句中的查询语句:Select * From TableName where ColumnsName= DataValue
5. DataTable中数据记录的统计。
我们可以根据DataTable中的数据进行一些数据处理,比如求某列的和或者平均数。
6.datatable复制表结构:我们可以使用.clone()方法;
DataTable oldDT = GetDataTable();
DataTable newDT = oldDT.Clone();
7.把datatable中的所有信息复制到一个新的datatable,包括结构和数据:
DataTable oldDT = GetDataTable();
DataTable newDT = oldDT.Copy();
8.复制datatable中的某一行:我们可以使用.ImportRow()方法;
DataTable oldDT = GetDataTable();
DataTable newDT = new DataTable();
newDT.ImportRow(oldDT.Rows[1]);//把原来datatable中的第二行数据复制到新的datatable中。
9.我们做项目的时候经常需要合并两个DataTable,就可以使用DataTable.Merge这个方法。
这些都是DataTable的一些常用方法,都是前人总结出来的,我们可以灵活应用,比如做机费收费系统时使用,我
们需要按时间段查询学生充值记录、按是否结账查询、按充值教师查询,这时候我们就可以使用DataTable类似sql语
句的查询功能,先把所有的充值记录查出来放到DataTable中,然后对DataTable的数据进行操作,这样就可以减少D
层和B的方法。还有我们计算充值总额的时候,也直接直接使用DataTable.Compute("sum("列名")", "TRUE")进行计算
下面是我做结账的时候对删选和求和的应用:
''根据用户ID和未结账查询退卡信息
'enReback.rebackOperator = cmbUserID.Text
enReback.RebackisCheckOut = "否"
Dim btReback As DataTable
Dim btReback1 As DataTable
btReback = CardB.ReBackCardCheck(enReback)
'求总的退卡数
txtRemoveCardNum.Text = btReback.Rows.Count
'求出退还金额
txtRemoveMoney.Text = btReback.Compute("sum(退还金额)", "TRUE")
'筛选出该教师的购卡数
view.Table = btReback
view.RowFilter = "教师 = " & enReback.rebackOperator
btReback1 = view.ToTable()
dgvRemoveCard.DataSource = btReback1
DataTable的一些使用技巧的更多相关文章
- DataTable使用技巧总结【转】
一.DataTable简介 ()构造函数 DataTable() 不带参数初始化DataTable 类的新实例. DataTable(string tableName) 用指定的表名初始化DataTa ...
- C#中DataTable使用技巧
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...
- (转载)DataTable使用技巧总结
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.Da ...
- Datatable.Compute小技巧
在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表.那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据.还记得在第一遍机房收费系统的过程中用的是for 循环,但是 ...
- DataTable使用技巧:DataRowState
DataGridView:获取 DataRow 对象的状态,共有5个枚举值. Added 该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用. Deleted ...
- 关于Linq对DataTable和List各自的两个集合筛选的相关操作技巧
项目中用到了对两个集合的帅选等操作,简单总结下 1.Linq操作多个Datable 可以通过AsEnumerable()方法对DataTable进行Linq操作 //获取数据表所有数据 DataTab ...
- ToolStripComboBox的DataSource和DataTable使用技巧
可以使用Items属性private void GetData() //一下数据均为测试{toolStripComboBox1.Items.Clear(); DataTabl ...
- 【其他-小技巧-Uipath】VB语法操作DataTable分组并求和
需要对DataTable分组求和的语法:VB.net 和C#中还有点不太一样.最后试了好多方法,要这么写 我的dataTabel数据: (From p In dataTabel.AsEnumerabl ...
- 4.5 .net core下直接执行SQL语句并生成DataTable
.net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...
随机推荐
- 关于方法的ref
没有ref的方法时: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- CodeForces 508C Anya and Ghosts 贪心
做不出题目,只能怪自己不认真 题目: Click here 题意: 给你3个数m,t,r分别表示鬼的数量,每只蜡烛持续燃烧的时间,每个鬼来时要至少亮着的蜡烛数量,接下来m个数分别表示每个鬼来的时间点( ...
- BZOJ 1833: [ZJOI2010]count 数字计数( dp )
dp(i, j, k)表示共i位, 最高位是j, 数字k出现次数. 预处理出来. 差分答案, 对于0~x的答案, 从低位到高位进行讨论 -------------------------------- ...
- Oracle中的单引号问题
SELECT '<a href="javascript:void(0)" onclick="openWyl('''||a.aac001 FROM ac01 a; S ...
- C语言深度剖析--volatile(转载)
volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统,硬件或者其他线程等等.遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进 ...
- HDU 5025Saving Tang Monk BFS + 二进制枚举状态
3A的题目,第一次TLE,是因为一次BFS起点到终点状态太多爆掉了时间. 第二次WA,是因为没有枚举蛇的状态. 解体思路: 因为蛇的数目是小于5只的,那就首先枚举是否杀死每只蛇即可. 然后多次BFS, ...
- iOS XMPP之常见错误一:(<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>)
在XMPP开发中,使用XMPPStream进行连接服务器后,验证过程中,比较常见的一个错误是 <failure xmlns="urn:ietf:params:xml:ns:xmpp-s ...
- Sitemesh3的使用及配置
1 . Sitemesh 3 简介 Sitemesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter,类似于 ASP.NET 中的‘母版页’技术.参考:百度百科,相关类似技术:A ...
- 人人都用 Retina 屏幕的 MacBook Pro 笔记本电脑
自从今年年初 Apple 官网产品降价我立即买了 13 寸的 Retina 屏 MacBook Pro(rMBP)之后, 这款苹果的笔记本电脑就成了我在公司和家里的唯一电脑(就是这一款). 使用苹果的 ...
- 文件操作中的FLAG(O_RDONLY,O_WRONLY )的值
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> void main(void) { ...