本文共 3078 字,大约阅读时间需要 10 分钟。
机房重构的时候,自己最开始的时候用的是Datatable,只到自己的登录敲完之后,跟师哥交流,发现如果这个时候我们用泛型会更好的。之前写过一篇这样的博客,不过自我认为上一篇博客有些太不够具体,今天我想从我的认识去说一下他。
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]; }
泛型是把同一个对象的类放在一起,可以理解成编队。基于这个理解,datatable可以顺利的转换成泛型,自己之前写过一篇泛型的博客,大家多多指点:那么,datatable是如何转换成泛型的,一下是自己采用的一个方法:还有很多的方法,大家多一起分享一下,不断的学习。
public class ReturnListwhere Y : new() { public static IList Returnlist(IList list) { return list; } } public class CovertHelper where T :new() { public static IList ConvertToModel(DataTable table) { //定义集合 IList ts = new List (); //获得此模型的类型 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; } }
我们使用泛型,一定是他有很多好处,不然我们也不会如此周折。我们今天就来分析分析。
我们常说,使用datatable会破会三层,为啥会破坏三层或七层呢?之前我也是在想使用泛型只不过是换汤不换药吧,其实不是这样的。我们可以想想,各层之间的信息传递交流,靠的是什么,是实体啊~可是用了datatable呢?我们就悄悄的把实体仍在了一边,不去管实体了。知道我们返回U层的使用,使用着datatable.rows(i).item(j),你想想是不是呢?那对比泛型呢?我们泛型是强制转换类型的,我们相当于把实体装进了list中,我们传递信息还是依赖的实体。
datatable 和泛型,都很好,都是智慧的结晶,都有其存在的价值,我们用的时候根据自己的需要选择最合适的来我们的程序服务。
转载地址:http://nxexi.baihongyu.com/