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

 


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值