您的位置:首页 > 其它

DataTable的一些使用技巧

2013-08-29 21:50 176 查看
在做机房的时候经常用到DataTable,发现如果DataTable使用的好的话,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果。现在对我知道的一些技巧做个总结,虽然都是一些简单的,但是发现真的挺好用的。

首先我们对DataTable有了简单的了解:

(1)概念:DataTable是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO.net库中的核心对象。——百度的解释

(2)常用方法:

AcceptChanges()提交自上次调用AcceptChanges()以来对该表进行的所有更改。

BeginInit()开始初始化在窗体上使用或由另一个组件使用的DataTable。初始化发生在运行时。

Clear()清除所有数据的DataTable。

Clone()克隆DataTable的结构,包括所有DataTable架构和约束。

EndInit()结束在窗体上使用或由另一个组件使用的DataTable的初始化。初始化发生在运行时。

ImportRow(DataRowrow)将DataRow复制到DataTable中,保留任何属性设置以及初始值和当前值。

Merge(DataTabletable)将指定的DataTable与当前的DataTable合并。

NewRow()创建与该表具有相同架构的新DataRow。

从概念中我们知道DataTable是一个临时而且是虚拟的表,只要是表我们就可以对它进行常见的增删改查的操作,

这样就可以减少我们与数据库的交互次数。

1.添加列。在DataTable对象中添加列在DataTable对象中添加列的最常用的方法是通过DataTable对象的Column

属性中的Add方法。添加后的每一列都是一个DataColumn对象。

2.添加行。在DataTable对象中创建行DataTable对象的每一行都是一个DataRow对象,所以创建行时可以先利用

DataTable对象的NewRow方法创建一个DataRow对象,并设置新行中各列的数据,然后利用Add方法将DataRow对

象添加到表中。

例子:

//创建一个Customers数据表
DataTableCustomersTable=newDataTable("Customers");
//创建一个新的数据行
DataRowarow=CustomersTable.NewRow();
//设置行的值
arow[ColumnName]=DataValue;
//把数据行添加创建的Customers数据表中
CustomersTable.Rows.Add(arow);

3.通过DateAdapter对象的Fill方法将SQLServer数据库中的表填充到DataTable对象中。

下面实在网上找的例子:
//使用DataAdapter的Fill方法向Customers表中填充数据
stringconnectionString=
"DataSource=local;InitialCatalog=Northwind;IntegratedSecurity=True;UserID=sa;Password=";
stringcommandString="Select*fromCustomers";
SqlDataAdapterdataAdapter=newSqlDataAdapter(commandString,connectionString);
DataSetcustomers=newDataSet();
dataAdapter.Fill(customers,"Customers");


4在DataTable实现类似sql语句的查询功能。在脱离数据库的DataSet实现类似sql语句的查询。也就是(select...fromtablenamewhere...)这样的功能。将从DataSet中查询出来的数据以行的形式保存到arow中。
实现代码如下所示:

DataSetds=newDataSet();
DataRow[]arow=ds.Tables[TableName].Select(""+ColumnsName+"='"+DataValue+"'");

代码说明:

TableName:数据集ds中的表名。

ColumnsName:TableName表中的某一列名。

DataValue:和列名对应参数的值。

功能说明:

上面语句功能相当于sql语句中的查询语句:Select*FromTableNamewhereColumnsName=DataValue

5.DataTable中数据记录的统计。

我们可以根据DataTable中的数据进行一些数据处理,比如求某列的和或者平均数。

6.datatable复制表结构:我们可以使用.clone()方法;

DataTableoldDT=GetDataTable();
DataTablenewDT=oldDT.Clone();

7.把datatable中的所有信息复制到一个新的datatable,包括结构和数据:

DataTableoldDT=GetDataTable();
DataTablenewDT=oldDT.Copy();

8.复制datatable中的某一行:我们可以使用.ImportRow()方法;

DataTableoldDT=GetDataTable();
DataTablenewDT=newDataTable();
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="否"
DimbtRebackAsDataTable
DimbtReback1AsDataTable
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





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: