![ASP.NET项目开发全程实录(第4版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/589/26793589/b_26793589.jpg)
3.5 公共类设计
在网站项目开发中以类的形式来组织、封装一些常用的方法和事件,将会在编程过程中起到事半功倍的效果。本系统创建了两个公共类文件,分别为DataBase.cs(数据库操作类)和DataOperate.cs(基础数据操作类),而DataOperate.cs公共类文件中又包括DataOperate(基础数据操作类)、UserOperate(用户操作类)、ProductOperate(产品操作类)、NewsOperate(公告及新闻操作类)、LinkOperate(友情链接操作类)、LeaveWordOperate(留言簿操作类)、RevertOperate(回复留言操作类)和EngageOperate(招聘信息操作类)8个类,由于篇幅所限,而且各个操作类的实现原理大致相同,下面主要对DataBase(数据库操作类)、DataOperate(基础数据操作类)和UserOperate(用户操作类)3个公共类进行讲解,其他类及其方法请参见本书附带的资源包。
3.5.1 DataBase类
DataBase(数据库操作类)类主要实现的功能有打开数据库连接、关闭数据库连接、释放数据库连接资源、传入参数并且转换为SqlParameter类型、执行参数命令文本(无返回值)、执行参数命令文本(有返回值)、将命令文本添加到SqlDataAdapter和将命令文本添加到SqlCommand。下面给出所有的数据库操作类源代码,并且进行详细介绍。
在命名空间区域引用using System.Data.SqlClient命名空间。为了精确地控制释放未托管资源,必须实现DataBase类的System.IDisposable接口,IDisposable接口声明了一个方法Dispose,该方法不带参数,返回Void。相关代码如下:
例程01 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P129_33276.jpg?sign=1739280118-NcvdA8XiJBKpQ1dAKUOVPT2hYe2vFFvo-0-5d9b85f45b4901a10fa8fe1d14f4d81e)
建立数据库的连接主要通过SqlConnection类实现,并初始化数据库连接字符串,然后通过State属性判断连接状态,如果数据库连接状态为关闭,则打开数据库连接。实现打开数据库连接Open方法的代码如下:
例程02 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P130_33278.jpg?sign=1739280118-fkdX9GoYV4ot1S7xwOOGcuFnElOiF6yW-0-6e32a1f1e1e449314503f7c029d95fe8)
关闭数据库连接主要通过SqlConnection对象的Close方法实现。自定义Close方法关闭数据库连接的代码如下:
例程03 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P130_33279.jpg?sign=1739280118-EZfOviaMIzn6kirzD11y9oOvPUHMM70P-0-edad3b3abb11dbc3dbdc581078db46e0)
因为DataBase类使用System.IDisposable接口,IDisposable接口声明了一个方法Dispose,所以在此应该完善IDisposable接口的Dispose方法,用来释放数据库连接资源。实现释放数据库连接资源的Dispose方法的代码如下:
例程04 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P131_33280.jpg?sign=1739280118-H0u8lobjYmHsHEoOSquzZsNAFxFwsGc8-0-c72de51318c5eccef08b164c2d7580ab)
本系统向数据库中读/写数据是以参数形式实现的。MakeInParam方法用于传入参数,MakeParam方法用于转换参数。实现MakeInParam方法和MakeParam方法的完整代码如下:
例程05 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P131_33282.jpg?sign=1739280118-WwpbRSAUWwjXUYZlUjdCQA5iU9pvD68P-0-95b22bc18877c491b7d4d719c7ade673)
RunProc方法为可重载方法,其中,RunProc(string procName, SqlParameter[] prams)方法主要用于执行数据的添加、修改和删除操作;RunProc(string procName)方法用来直接执行SQL语句,比如数据库备份与恢复等操作。实现可重载方法RunProc的完整代码如下:
例程06 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P132_33284.jpg?sign=1739280118-7s8dS5xvEAwgdHg5dfo0OeJGT5mdpPzg-0-13a5d652b0c642ec80b5e8279e861ea9)
RunProcReturn方法为可重载方法,返回值为DataSet类型,其中,RunProcReturn(string procName,SqlParameter[] prams,string tbName)方法主要用于执行带参数SqlParameter的查询命令文本;RunProcReturn(string procName, string tbName)用于直接执行查询SQL语句。可重载方法RunProcReturn的完整代码如下:
例程07 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P132_33286.jpg?sign=1739280118-4Yz4ENzH08jxBZLiPjQakBCVBnkaFGrS-0-0f1d4c716ecdf2539569c9f745efdb30)
CreateDataAdaper方法用来将带参数SqlParameter的命令文本添加到SqlDataAdapter中,并执行命令文本。CreateDataAdaper方法的完整代码如下:
例程08 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P133_33289.jpg?sign=1739280118-btxgqNXfvmereObAccyJ0g8PuSvK9byc-0-7d77a1614606622fabefb7bfaa19f8d0)
CreateCommand方法用来将带参数SqlParameter的命令文本添加到SqlCommand中,并执行命令文本。CreateCommand方法的完整代码如下:
例程09 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P133_33291.jpg?sign=1739280118-8c9W7vZgP6iBNlRIVhf0AemlTyiwulQ6-0-2396d1a5eb8b29e1fc2f7bbadef4513b)
3.5.2 DataOperate类
DataOperate(基础数据操作类)类主要实现的功能有自动生成编号、对字符串进行各种验证、上传图片、对DataList控件进行数据绑定并分页、截取指定长度的字符串和设置第三方组件FreeTextBox中的字体等,下面给出基础数据操作类中各方法的源代码,并且进行详细介绍。
getID方法用来根据数据库中已经存在的记录自动生成编号,其实现代码如下:
例程10 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P134_33294.jpg?sign=1739280118-sc8dx7bSv0vccySHYDrYTPYXKr1p6vvJ-0-a9e8177d70817e4895415f75c5cfa2aa)
validateNum方法用来验证输入的字符串是否为数字,其实现代码如下:
例程11 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33295.jpg?sign=1739280118-oDj8P1c7EXXHfgiYApIUSymVBItWlRKF-0-eb10b65df65facf38ea0f6ec1aeeb594)
说明
验证邮编、电话号码、E-mail地址和网址的实现的方法与验证数字类似,只是正则表达式有所不同,这里不再一一列举。
UpPhoto方法主要用来实现上传图片并在Image控件中显示上传图片的功能,其实现代码如下:
例程12 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33297.jpg?sign=1739280118-fKFP19AcCXFnRRcB1siGAdmOO0vsOHDJ-0-8816adaf97c6fc10a6f9d2b2715904d7)
dlBind方法主要用来将数据库的数据绑定到DataList控件并进行分页显示,其实现代码如下:
例程13 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33298.jpg?sign=1739280118-xnrqVQYxfOz17VQ4oPlE4ykGtNiHoLQ9-0-7169ed1f48c1dcd0d7869fbbb3d08d6a)
SubStr方法主要用来根据用户输入的参数截取指定长度的字符串,其实现代码如下:
例程14 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P136_33301.jpg?sign=1739280118-VCh0iTo5bDyq5EFOWcGBqhPk2a25LKrV-0-e16f1c8084187b7e1e4366634968f6d5)
strFont方法主要用来设置第三方组件FreeTextBox中的字体,其实现代码如下:
例程15 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P136_33303.jpg?sign=1739280118-ORdQQI4A9R6EnNIwtEJatAol4MO65yKo-0-46e5cf0eab1fe3a21ca5533b28976a29)
3.5.3 UserOperate类
UserOperate(用户操作类)类主要用来实现企业门户网站中用户和管理员的添加、修改、删除、查询和登录等功能。
用户操作类中的方法主要提供给陈述层调用,从编码的角度出发,该类中方法的实现是建立在数据层(数据库操作类DataBase.cs)基础上,下面将详细介绍。
在用户操作类中,首先定义用户信息的数据结构,代码如下:
例程16 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P137_33304.jpg?sign=1739280118-guq8rpjGDOwNmJ1togg69ZahuLDWd3hW-0-f0861abd64428dacb13bafb85fe2d1d0)
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P138_33305.jpg?sign=1739280118-jnaF0uJcPCCYJWVz8WG1akj6xoReYP9e-0-7a674edd42754f3407788bfbdaeed1a7)
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P139_33306.jpg?sign=1739280118-oqErpsE5mg5xPdfVyPNdY0Vuq8gafJjG-0-8642b65bd9faa4aae24fc8f00a8608ec)
AddUser方法主要实现添加用户信息功能,实现关键技术:创建SqlParameter参数数组,通过DataBase.cs(数据库操作类)中的MakeInParam方法将参数值转换为SqlParameter类型,存储在数组中,最后调用DataBase.cs(数据库操作类)中的RunProc方法执行命令文本,代码如下:
例程17 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P140_33309.jpg?sign=1739280118-pgBr6PGB966o4yFC2fGHdmAx2EqROLEF-0-e70a5f48025901f645b6bb105924111a)
UpdateUser方法主要实现修改用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程18 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P140_33311.jpg?sign=1739280118-ewDQPKrGiE9kCPJUDECCYkkFJb6wfYfz-0-38e85c38975561e43e0347b161e3bca8)
DeleteUser方法主要实现根据编号删除用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程19 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P141_33315.jpg?sign=1739280118-FB6FLYjkI1y1Y5S7pQGt9blOAmJ3lnsM-0-934a6140cdd5f0702b46ba6de78f71e6)
UserOperate(用户操作类)类中定义了4种查找用户信息的方法,方法名称分别为FindUserByName、FindResult、FindUserByMarker和GetAllUser,其中,FindUserByName方法用来根据用户姓名找到用户信息;FindResult方法用来根据用户姓名和密码问题找到密码答案;FindUserByMarker方法用来根据标识找到用户信息;GetAllUser方法用来得到所有用户信息。查找用户信息方法的实现代码如下:
例程20 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P141_33316.jpg?sign=1739280118-cB9e7VyQDRU59nTefOfhBEkWrSIvL4gX-0-7f8787722a6f83e15b6a0cbd3651744d)
UserLogin和AdminLogin方法分别用来实现用户登录和管理员登录功能,其实现关键技术与AddUser方法类似,代码如下:
例程21 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P142_33318.jpg?sign=1739280118-apQwSw8OV3cxKdf9z62joNx4bx9Ffrku-0-bbd9c8e619dfa0b04c517ec25707c544)