在做机房的时候经常用到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的一些使用技巧的更多相关文章

  1. DataTable使用技巧总结【转】

    一.DataTable简介 ()构造函数 DataTable() 不带参数初始化DataTable 类的新实例. DataTable(string tableName) 用指定的表名初始化DataTa ...

  2. C#中DataTable使用技巧

    在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...

  3. (转载)DataTable使用技巧总结

    在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结.         一.Da ...

  4. Datatable.Compute小技巧

    在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表.那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据.还记得在第一遍机房收费系统的过程中用的是for 循环,但是 ...

  5. DataTable使用技巧:DataRowState

    DataGridView:获取 DataRow 对象的状态,共有5个枚举值. Added 该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用. Deleted ...

  6. 关于Linq对DataTable和List各自的两个集合筛选的相关操作技巧

    项目中用到了对两个集合的帅选等操作,简单总结下 1.Linq操作多个Datable 可以通过AsEnumerable()方法对DataTable进行Linq操作 //获取数据表所有数据 DataTab ...

  7. ToolStripComboBox的DataSource和DataTable使用技巧

      可以使用Items属性private void GetData() //一下数据均为测试{toolStripComboBox1.Items.Clear();            DataTabl ...

  8. 【其他-小技巧-Uipath】VB语法操作DataTable分组并求和

    需要对DataTable分组求和的语法:VB.net 和C#中还有点不太一样.最后试了好多方法,要这么写 我的dataTabel数据: (From p In dataTabel.AsEnumerabl ...

  9. 4.5 .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

随机推荐

  1. 转化为用欧几里得算法判断互质的问题D - Wolf and Rabbit

    Description There is a hill with n holes around. The holes are signed from 0 to n-1. A rabbit must h ...

  2. 字符设备驱动1:新的方式添加cdev + 在open函数中将文件私有数据指向设备结构体

    本例中,驱动入口处,使用cdev_add添加驱动,这点也可与字符设备驱动0:一个简单但完整的字符设备驱动程序对比一下. 另外主要讲xx_open实现文件私有数据指向设备结构体. 引子: 偶然看到,在j ...

  3. eclipse+tomcat+maven debug的时候总是出现source not found /Edit lookup path...的问题解决方案

    eclipse+tomcat+maven debug的时候总是出现source not found /Edit  lookup path...的问题解决方案 这个问题纠结好久好久.... 问题出现的环 ...

  4. Tcl语言笔记之二

    1,表达式 1.1 操作数 TCL表达式的操作数通常是整数或实数.整数一般是十进制的, 但如果整数的第一个字符是0(zero),那么TCL将把这个整数看作八进制的,如果前两个字符是0x则这个整数被看作 ...

  5. CF(435D - Special Grid)dp

    题目链接:http://codeforces.com/problemset/problem/435/D 题意:求三角形个数,三个点必须的白点上,而且三条边必须是横线,竖线或对角线,三条边上不同意出现黑 ...

  6. SICP中sqrt(开方)的实现(附C#实现)

    #lang racket (define (square x) (* x x)) (define (sqrt-iter guess x) (if (good-enough? guess x) gues ...

  7. DH11数字温湿度传感器

    DH11数字温湿度传感器是一种集温度.湿度一体的复合传感器,它能把温度和湿度物理量通过温.湿度敏感元件和相应电路转化成方便计算机.PLC.智能仪表等数据采集设备直接读取的数字量.DHT11由电阻式感湿 ...

  8. win7(64位)php5.5-Apache2.4-环境安装

    一.安装配置Apache2.4.7(httpd-2.4.7-win64-VC11.zip ) 1.解压下载的安装包:httpd-2.4.12-x64-vc11-r2.zip将其放到自己的安装目录(我的 ...

  9. 深入windows的关机消息截获-从XP到Win7的变化

    之前写了一个软件用于实验室的打卡提醒,其中一个重要的功能是在关机之前提醒当天晚上是否已经打卡.之前我是在WM_ENDSESSION中弹出一个模态对话框来提醒,在XP中基本工作正常,在Win7中大多数时 ...

  10. CCIE路由实验(8) -- QoS

    1.查看端口缺省的队列机制2.配置CB-WFQ3.配置CB-LLQ4.配置CB-Shapping在以太接口下5.配置CB-Shapping在FR接口下6.配置帧中继流量整形FRTS7.配置CB-Pol ...