C# 熟悉的DataTable用法详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SweetyoYY/article/details/79774038

* 过去

       最早接触DataTable是机房重构的时候,那时的datatable用于接收数据库返回的数据,当时的自己还在纠结,是要用datatable 还是泛型。现在想想,这些在好笑的同时又很感动,想想也是,过去所做的那些事情,正是自己现在可以依靠的东西。
   这是之前我们使用datatable的方式,sqlHelper那部分,没有贴出来,如果有需要的小伙伴,可以留言,

 public DataTable SelectByNewsId(string newsId)
        {
            DataTable dt = new DataTable();
            string sql = "select * from comment where newsId =@newsId";
            SqlParameter[] paras = new SqlParameter[]{
               new SqlParameter ("@newsId",newsId)
           };
            dt = sqlhelper.ExecuteQuery(sql, paras, CommandType.Text);
            return dt;
        }

* 可以不访问数据库吗

       我们处理一些逻辑,往往的操作是通过sql语句,直接返回我们想要的数据格式和内容,通过表的外链接,group by之类的,当然这也还可以。不过,有的时候,涉及到循环的逻辑,我们循环的对一个表进行操作,这就有些过分了吧,它的体验是很不友好的;有的时候,我们需要返回这样的一个属性,他是不存在与数据库中的字段,那么需要经过一些运算,将他计算出来,同时这个属性,也恰恰是前台我们要显示的,这是怎么操作呢?

   方案一:我们仍直接操作数据库,数据库中既然不是么有那个字段吗?好的,我们添加一个,因为这个字段是其他两个字段运算得来的,那好,我们每次添加新的内容时可以先group by,然后再运算两个字段,将结果赋值。这里我们的操作实时插入和更新。

   方案二:我们返回datatable ,对datable进行操作,这里涉及到,增加列,增加行,还有相关的赋值运算,这里强调一点是,对数据库只进行了一次操作,其余操作我们转移到了datatable 上。

* datatable操作

       是一个临时保存数据的网格虚拟表,一个内存内关系数据的表,可以独立创建和使用。

3.1 datatable自定义

       1.创建datatable

//创建一个空表  
DataTable dt = new DataTable();  
//创建一个名为"Table_New"的空表  
DataTable dt = new DataTable("Table_New"); 

    当然我们可以在一个datatable的基处上创建,这里仅创建表结构:

//创建一个空表  
DataTable dt = new DataTable();
//克隆表结构
dt=mydata.Clone();

       2.创建列

//1.1 创建空列    
dt.Columns.Add("column0");  
//1.2 创建空列
DataColumn dc = new DataColumn();  
dt.Columns.Add(dc);
//2.创建带列名和类型名的列(两种方式任选其一)  
dt.Columns.Add("column0", System.Type.GetType("System.String"));  
dt.Columns.Add("column0", typeof(String));  

       3.创建行

//1.1创建空行  
DataRow dr = dt.NewRow();  
dt.Rows.Add(dr);  
//1.2创建空行  
dt.Rows.Add();  
//2.1 对行赋值
dt.Rows.Add("张三",DateTime.Now);//Add里面参数的数据顺序要和dt中的列的顺序对应  
//2.2 行赋值
DataRow dr = dt.NewRow();
dr("column0")="张三";
dr("column1")="男";
dt.Rows.Add(dr);//这里参数的顺序可以不与dt对应
//4.通过复制dt2表的某一行来创建  
dt.Rows.Add(dt2.Rows[i].ItemArray);//两个表结构,要一致

    提问:我们上面创建行的方式是:DataRow dr = dt.NewRow(); 那么这样可以吗? DataRow dr=new DataRow();[ ^1]1.

[ ^1]: DataRow dr = new DataRow()
       4.删除行,列

//删除行
//使用DataTable.Rows.Remove(DataRow)方法  
dt.Rows.Remove(dt.Rows[0]);  
//使用DataTable.Rows.RemoveAt(index)方法  
dt.Rows.RemoveAt(0);  
//使用DataRow.Delete()方法  
dt.Row[0].Delete();  
dt.AcceptChanges(); 
//删除列
//使用DataTable.Columns.Remove("列名");
dt.Columns.Remove("ColumnName");

3.2 datatable 排序

       有的时候我们对于dataTable有一些特殊的操作,例如多次的排序,筛选,这里我们可以在sql中执行通过的语句,也可以用在这里。

       1.筛选行

//选择column1列值为空的行的集合  
DataRow[] drs = dt.Select("column1 is null");  
//选择column0列值为"李四"的行的集合  
DataRow[] drs = dt.Select("column0 = '李四'");  
//筛选column0列值中有"张"的行的集合(模糊查询)  
DataRow[] drs = dt.Select("column0 like '张%'");//如果的多条件筛选,可以加 andor  
//筛选column0列值中有"张"的行的集合并按column1降序排序  
DataRow[] drs = dt.Select("column0 like '张%'", "column1 DESC"); 

       2.自定义排序

//按照age列的升序排序
dt.DefaultView.Sort = "Age ASC";
dt = dt.DefaultView.ToTable();

* end

       对datatable的合理使用,可以提高处理速度和效率。我们也要在不断的使用中去发现它的更多优点,我们的最终目的是服务于项目,使客户满意,带来更棒的用户体验。


  1. 这种写法是不正确的,首先我们不明确dr的结构,这样去new的话是不是没有什么太大的意义,运行的时候回报错的,当然,如果你感到好奇或是心有疑虑可以试一下的。

猜你喜欢

转载自blog.csdn.net/SweetyoYY/article/details/79774038
今日推荐