上一期为大家介绍了DataProvider中对SQL SERVER与Oracle数据库的操作,这一期将为大家介绍对文件系统的支持。
在DataProvider中,不仅支持对SQL SERVER与Oracle的操作,还支持对文件的操作。对于文件目前内置3中支持对象:XML、TEXT、CONFIG文件,分别位于类库XMLProvider、TextProvider、SuitConfigProvider中,大家可以自己调用,文件操作大多使用静态操作。
1.对config文件的操作
这里还要介绍一SuitConfigProvider类库中的GetItem、GetSection、AppendItem、RemoveElement方法,这几个方法可以快速获得we.config中的Item、节点内容,以及增加、移除节点,例如有个Item信息如下:
<add key="NameABC" value="test " />
使用SuitConfigProvider.GetItem("NameABC ") 语句就可以立即获得该Item内容,SuitConfigProvider类中的方法实现为静态,用户可以直接调用.
2.对文本文件操作:
项目中有很多时候需要对文本文件进行操作,可能会涉及到文件的创建、内容追加、删除等,在IsLine类库中封装了这些操作,使用者可以方便调用方法实现这些功能,IsLine类库会自动进行错误判断、资源调优等操作。方法说明如下:
● static string GetContent(string Fileinfo):该方法具有2次重载,获得文件内容
● static bool CreateFile(string FileInfo):该方法创建一个文件,参数就是文件路径与文件名
● static bool AppendFile(string str, string FileInfo):该方法具有2次重载,追加文件内容
以上的方法很常用,并且已经经过一些优化处理,比如在使用者调用AppendFile方法时,IsLine类库会自动判断所操作的文件是否存在,如果不存在会首先创建一个文件,然后在进行内容追加,这就避免了一些因为文件不存在而造成的错误。
3.对XML文件操作:
XML文件是各位编写程序中最常用的一种文件了,它以简明的结构化体制深受大家的喜爱,IsLine类库封装了对于这种文件的日常操作,以下是方法列表。
● static List<Hashtable> GetContent(string FileInfo, string SingleNode):该方法具有2次重载,获得文件内容。传入文件为文件路径和根节点名称,每个节点信息储存在HashTable中,并以泛型List<Hashtable>形式返回
● static bool CreateFile(string SingleNode, string FileInfo):该方法创建一个文件,传入文件为文件路径和根节点名称
● static bool AppendFile(string SingleNode, string Element, List<Hashtable> Lht, string FileInfo):该方法2次重载,追加文件内容,传入文件为根节点内名称、追加节点名称、追加内容结构和追加文件信息。其中追加内容结构为List<Hashtable>,Hashtable的键名为追加后XML的节点名。
另外,在Web.config中还可以使用一些支援信息,对DataProvider进行配置,这些配置决定了用于反射的数据库工厂的位置、多数据库连接信息等。
支援信息(选择配置)如下:
键名:IsLine.Provider.DataProvider.CfgDllName
作用:反射的数据库工厂DLL位置
键名:IsLine.Security.Configuration.TokenKey
作用:加密使用的种子(字符串)
键名:IsLine.Data.Configuration.DBConnectString
作用:数据库连接信息
键名:IsLine.Data.Configuration.TextProviderFileInfo
作用:默认文件位置
键名:IsLine.Data.Configuration.SqlServerConnectString
作用:SQL数据库连接信息
键名:IsLine.Data.Configuration.OracleConnectString
作用:Oracle数据库连接信息
关于IsLine.Data.ContainerDefiner命名空间的缓存支援:
这里要提一下该命名空间下类的缓存支援信息,这些信息位于IsLine.Data.ContainerDefiner命名空间下。
该类共实现 ISqlContainer, IOracleContainer, IFileContainer, IDisposable四个接口,包括了常见的ADO.Net数据对象,例如DataSet、Reader等,利用OracleProvider或SqleProvider中相关方法获得的数据对象,可以直接赋值给ContainerDefine类下的对应对象,ContainerDefine会将对象缓存。
请大家注意,在声明ContainerDefine时,构造函数有2个参数,第一个是开启HttpRuntime缓存,第二个参数是缓存的名字,这样cd中的DataSet对象被赋值后,会自动缓存,下次在调用cd.DataSet对象时,将自动从缓存中读取,不需要OracleProvider().ExecuteDataSet()方法重新取数据了,目前缓存支持.Net运行时缓存和上下文缓存,当然缓存策略默认是关闭的,当构造函数接收到上述参数时,才会开启缓存。
有关缓存的详细说明,请参看后面的文章“IsLine.HttpContent.HttpContentProvider命名空间系列” 。
DataProvider没介绍的内容还有很多,这里就不一一介绍了,关于DataProvider Database方法大全,由于篇幅较长,这里就不占用宝贵的版面了,有兴趣的朋友可以通过访问作者博客获得相关信息。
另外,关于使用这个命名空间处理数据事务,可以对其进行扩展,但须遵循一系列的接口契约,为其提供数据库工厂,按照以下方式部署该工厂的库文件,这样,ILFW运行前会使用私有方法DbProviderFormating()对用户提供的工厂进行反射。用户提供的规范如下:
● DLL部署路径:IsLineFrameWork\IsLine.Provider.DataProvider.CfgDllName,其中IsLine.Provider.DataProvider.CfgDllName为web.config配置的dll名称。
●工厂所在命名空间:IsLine.Provider.DataProvider
●工厂类名称: DBFactory
●方法类型DbProviderFactory
●方法名称:GetDbProvider()
DataProvider中还有一个类“DBProvider”,这个Provider可以不指明是SQLSERVER还是Oracle数据库或是其他数据库,你需要提前遵守上文中提到的相关接口契约,实现为Configution.dll,并放置于约定位置(这个位置在web.config中配置),程序就会自动反射并使用其中的方法了。将来你更改数据库时,只需要更换这个DLL就可以了,不需要修改主程序。
“DBProvider”还封装了微软的DbProviderFactory,这个大家一定知道,我就不多介绍了,调用方法名称与方式与以上介绍的都一样。
至此为止,数据访问层已经完全介绍完成,在下一讲,我们将开始讲解如何进行日志操作。
此文已在《软件报》同步发布,任何个人媒体不得转载。