泛型 VS Data Table

一、前言

        机房重构的时候,自己最开始的时候用的是Datatable,只到自己的登录敲完之后,跟师哥交流,发现如果这个时候我们用泛型会更好的。之前写过一篇这样的博客,不过自我认为上一篇博客有些太不够具体,今天我想从我的认识去说一下他。


二、Datatable

2.1认识

        Data Table是临时保存数据的一个表,无须代码就可以简单的绑定数据库(让我想起来dategrideview控件,很轻易的绑定datatable,常见的是dategrideview.source = datatable; )。使用Data Table对象包括,DataSet 和DataView,今天我用的是DateSet,以下是一个sqlHelper:

 public static DataTable GetDatable(string cmdtxt, CommandType cmdType, SqlParameter[] paras) //datatable 内存中的数据表
        {
            //连接
            SqlConnection conn = new SqlConnection(Connstring);
            //定义命名变量
            SqlCommand cmd = default(SqlCommand);  //这里是默认的,没有参数的时候也可以执行,
            //定义数据适配器,dataset内存中的数据缓存
            DataSet dataset = null;
            // 数据连接,叔据适配器 填充dataset 的
            SqlDataAdapter adapter = default(SqlDataAdapter);
            //实例化命名变量
            cmd = new SqlCommand(cmdtxt, conn);
            //命令执行的类型
            cmd.CommandType = cmdType;
            //命令执行的参数
            cmd.Parameters.AddRange(paras);
            //初始化新实例
            adapter = new SqlDataAdapter(cmd);
            dataset = new DataSet();

            try
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                adapter.Fill(dataset); //填充数据
            }


            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }

            //获取dataset表的集合
            return dataset.Tables[0];
        }

2.2转泛型

        泛型是把同一个对象的类放在一起,可以理解成编队。基于这个理解,datatable可以顺利的转换成泛型,自己之前写过一篇泛型的博客,大家多多指点:http://blog.csdn.net/sweetyoyy/article/details/54251485那么,datatable是如何转换成泛型的,一下是自己采用的一个方法:还有很多的方法,大家多一起分享一下,不断的学习。

  public class ReturnList<Y> where Y : new()
    {
        public static IList<Y> Returnlist(IList<Y> list)
        {
            return list;
        }
    }

   public  class CovertHelper<T> where T :new()
    {
       public static IList<T> ConvertToModel(DataTable table)
       {
           //定义集合
           IList<T> ts = new List <T>();

           //获得此模型的类型
           Type type = typeof(T);
           string tempName = "";

           foreach (DataRow dr in table.Rows)
           {
               T t = new T();
               //获得模型的公共属性
               PropertyInfo[] propertys = t.GetType().GetProperties();

               foreach (PropertyInfo pi in propertys)
               {
                   tempName = pi.Name; //检查datatable是否包含此列

                   if (table .Columns.Contains(tempName))
                   {
                       //判断此属性是否有Setter
                       if (!pi.CanWrite) continue;
                       object value = dr[tempName];

                       if (value != DBNull.Value)
                           pi.SetValue(t, value, null);

                   }
               }
               ts.Add(t);
           }
           return ts;

       }
    }

三、泛型

        我们使用泛型,一定是他有很多好处,不然我们也不会如此周折。我们今天就来分析分析。


3.1三层

        我们常说,使用datatable会破会三层,为啥会破坏三层或七层呢?之前我也是在想使用泛型只不过是换汤不换药吧,其实不是这样的。我们可以想想,各层之间的信息传递交流,靠的是什么,是实体啊~可是用了datatable呢?我们就悄悄的把实体仍在了一边,不去管实体了。知道我们返回U层的使用,使用着datatable.rows(i).item(j),你想想是不是呢?那对比泛型呢?我们泛型是强制转换类型的,我们相当于把实体装进了list中,我们传递信息还是依赖的实体。

3.2各司其职

  • 如果是datatable的话,负责U层的开发者,那他就好熟悉数据库的结构,他要明确字符串在数据库中的位置。,不然的话,字符串就会不对应。
  • 利用泛型,我们相当于把实体对象集封装成了一个泛型集合,这样负责某一层的人不必知道数据结构是如何的,只要了解实体的属性,根据实体的属性就可以成功完成参数的传递。
  • 在后期的维护中,极大地降低了维护成本和维护时间,三层是引用实体的,比对照数据库要效率高很多的。

四、结语

        datatable 和泛型,都很好,都是智慧的结晶,都有其存在的价值,我们用的时候根据自己的需要选择最合适的来我们的程序服务。

评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值