在机房重构时。我们常常会用到ConvertHelper。
它把从数据库中查询到的dateTable(也是一个暂时表)转化为泛型,然后再填充到DataGridView控件中。
ConvertHelper类有两点体现了面向对象的思想。一是由于它是常常被使用而被封装起来的类。二是由于它的返回值是泛型集合,泛型集合使存储数据时灵活而安全,也体现了面向对象的思想。
ConvertHelper与sqlHelper
下面是各个命名空间的含义。
System
包括用于定义经常使用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。其它类提供支持下列操作的服务:数据类型转换,方法參数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。
System.Data
包括组成大部分 ADO.NET 结构的类。ADO.NET 结构使您能够生成可用于有效管理来自多个数据源的数据的组件。在断开连接的方案(如 Internet)中。ADO.NET 提供了一些能够在多层系统中请求、更新和协调数据的工具。ADO.NET 结构也能够在client应用程序(如 Windows 窗口)或 ASP.NET 创建的 HTML 页中实现。
System.Configuration
命名空间包括具有下面用途的类型:处理配置数据,如计算机或应用程序配置文件里的数据。子命名空间包括具有下面用途的类型:配置程序集,编写组件的自己定义安装程序。支持用于在client和server应用程序中加入或删除功能的可插入模型。
System.Collections
包括定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。
System.Collections.Generic
包括定义泛型集合的接口和类;泛型集合同意用户创建强类型的集合,这样的集合在类型安全和性能上均优于非泛型强类型集合。
ConvertHelper返回的是泛型集合。所以我们要引用System.Collections.Generic,大大提高效率和安全性能
泛型集合
代码
Imports System.Collections.Generic '加入反省集合的命名空间 Imports System.Reflection '加入反射的命名空间 Public Class ConvertHelper '将DataTable转化为泛型集合 Public Shared Function ConvertTolist(Of T As New)(ByVal dt As DataTable) As IList(Of T) Dim myList As List(Of T) = New List(Of T)() '定义放回的集合 Dim myType As Type = GetType(T) '得到实体类的类型名 Dim tempName As String = String.Empty '定义一个暂时变量 Dim dr As DataRow '定义行集 '遍历DataTable的全部数据行 For Each dr In dt.Rows Dim myT As New T '创建一个实体类的对象 Dim arrayPi As PropertyInfo() = myT.GetType().GetProperties() '定义属性集合 Dim pi As PropertyInfo '遍历pi对象的全部属性 For Each pi In arrayPi tempName = pi.Name '将属性名称复制给暂时变量 '检查DataTable是否包括此列(列名==对象的属性名) If (dt.Columns.Contains(tempName)) Then '将此属性与DataTable里的列名比較 '推断此属性是否有setter If (pi.CanWrite = False) Then '推断此属性是否可写。假设不可写,跳出本次循环 Continue For End If Dim value As Object = dr(tempName) '定义一个对象型的变量来保存列的值 '假设非空。则赋给对象的属性 If (value.ToString() <> DBNull.Value.ToString()) Then pi.SetValue(myT, value, Nothing) End If End If Next myList.Add(myT) '加入到集合 Next Return myList '返回实体集合 End Function End Class