有了System.Data.IDataReader,一切皆成数据

    使用ADO.NET读取数据时,可以采用DataReader的方式来读取数据,针对不同类型的数据库连接类型使用不同的DataReader,比如针对 SqlConnection 则使用 SqlDataReader,对于 OleDbConnection使用 OleDbDataReader,大家稍加观察,可以看到这些不同类型的DataReader之间最大的共同点就是实现了 System.Data.IDataReader,这样在应用程序中坚持使用 System.Data.IDataReader则可以大大减少程序对特定类型的数据库的依赖。使用System.Data.IDataReader可以在数据结构不变的情况下读取不同类型的数据库而无需修改代码。例如在读取数据的函数的参数类型可以为 System.Data.IDataReader而不是特定类型的SqlDataReader或OleDbDataReader。

    更进一步,我们可以自己编写一个对象来实现System.Data.IDataReader来提供数据,可以说是自定义的ADO.NET数据提供者,这样更能提高程序的灵活性,例如数据一般是来源自关系型数据库中的,但有时需要从非关系型数据库中获得数据,比如逗号分隔的文本文件,网络中的某个XML文件,甚至特定格式的二进制文件或某个流,只要我们针对这些数据源编写一些解析器,这些解析器实现了System.Data.IDataReader,则上层程序就不会追究这些数据从哪里来而按照原来的方式使用。此时能简化接口。

    由于这些解析器能编写得可以解析一切,所以一切皆成数据。至于如何编写解析器则根据实际需要,在这里我提供了一个演示程序,该程序实现了三种自定义的数据读取器,可以从文件系统,程序对象和XML文档读取数据。

    文件系统数据读取器类型为FileSystemDataReader,她使用 System.IO.FileInfo和System.IO.DirectoryInfo来获得文件系统对象的信息,包括名称,类型,属性,创建以及修改时间。此外还扩展了一下,可以获得文件编码类型,文本内容,二进制内容和MD5编码,她由一个文件夹的名称进行初始化。可以使用DataReader的方式获得初始文件夹下所有的文件和子目录的信息。在本演示中使用 C:\winnt 来初始化对象

    程序对象数据读取器类型为ObjectDataReader,她使用反射机制来获得对象数据,并在可能的情况下使用委托来加速数据的读取,有点对象序列化的意思。在本演示中使用 C:\winnt 加载的 System.IO.FileInfo数组来初始化对象

    XML数据读取器类型为 XMLDataReader, 她使用XPath从一个XML文档获得数据,将XML表示的树状结构根据需要转换为一个二维表格。本演示中就使用程序所在的CS工程文件来加载数据

    演示程序为一个命令行程序,运行在.NET框架1.1版本下,程序运行结果保存在工程目录下的 data.html中。

     演示程序下载地址 https://files.cnblogs.com/xdesigner/DataReader.rar

posted @ 2006-02-13 13:36  blueKnight  Views(811)  Comments(1Edit  收藏  举报