• 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
    
    

     

  • 相关阅读:
    团队介绍及项目介绍
    2017年秋季个人阅读计划
    软件需求分析阅读笔记
    Cookie学习总结
    暑期兴趣班第二天学习总结
    暑期兴趣班第一天学习总结
    个人总结
    第十六周工作总结
    第十五周工作总结
    第十四周工作总结
  • 原文地址:https://www.cnblogs.com/pangblog/p/3292019.html
Copyright © 2020-2023  润新知