![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=1738829350-GHByQEURNTkQdYSOd3pHOMdQo6OlkJGy-0-27d2f1ccc7ed43ccbd24292ece3fb0f8)
建立数据库的连接主要通过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=1738829350-A6eNlD1TPXVZxuO8Q2QTKylPd412WLc1-0-5a4b6581fc4311c1e6716576959b64c0)
关闭数据库连接主要通过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=1738829350-cw86cDFOmztk9qQQO8Dt4ZQdacBV13Zq-0-5ae680a231f150dc8aacc4ea26bf393b)
因为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=1738829350-1Af8Mmw4vGHDdnj3XQ4bZPE4xJ9ZQkN8-0-eaaf83c4d83edffa6501ecc942a6c631)
本系统向数据库中读/写数据是以参数形式实现的。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=1738829350-64m48FZYuDblxWBxz0APe0n3AohTvOL1-0-d2fd83bb673e8e99246268cfdcf1f882)
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=1738829350-vpVsMaIksGo08HaRgcU7otkt2ZpjYiEo-0-543c34f72089a322ed67ed0c8b54f509)
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=1738829350-j4ExnyBIRJvPJjTM6EyeqwoI9TZWVtDm-0-5151d20e4588e9b5cbfb92a275a356b0)
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=1738829350-eTHb1zpPa43tWFkJCzWrVxIkq87RQI9D-0-76a3e120303cbd3137da81cb32a64311)
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=1738829350-CjYh7CwK17cIzz3qGFH3u9MDKbtMy2io-0-215a694e075ab19a91fee627aaa9d1a7)
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=1738829350-DLapmm5cbo1TFVYSzSSRWeCQvZcMxcSm-0-b622923ce1a501f5637cb8764cf15ed6)
validateNum方法用来验证输入的字符串是否为数字,其实现代码如下:
例程11 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33295.jpg?sign=1738829350-D1Q07tt7s6uuy09EXUjNB9HuVoAn2ALb-0-1ee53c290be3fc13c359808a523df175)
说明
验证邮编、电话号码、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=1738829350-jl1pC1WFF2misTkWq1JOAnNumRZMRAiM-0-88deb7aca53135367158de3319587269)
dlBind方法主要用来将数据库的数据绑定到DataList控件并进行分页显示,其实现代码如下:
例程13 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33298.jpg?sign=1738829350-lyO5bLha6ibgS327RLcqbpvtpGdhBknL-0-5383898995292462eafe091aad036166)
SubStr方法主要用来根据用户输入的参数截取指定长度的字符串,其实现代码如下:
例程14 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P136_33301.jpg?sign=1738829350-jlcJvcZrv7KTLQ6UzPmOPKyvweygqgZs-0-b068967f3730c2c5a1d000b058c7a847)
strFont方法主要用来设置第三方组件FreeTextBox中的字体,其实现代码如下:
例程15 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P136_33303.jpg?sign=1738829350-BQ8BIwsKEm5Ei9k1YfYrPQu3hmkmLkrb-0-8b2d55eafa53305d68b6310a27cac6bb)
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=1738829350-62PsXsJNjvGK1rlpqojQmBMO9pFSdxFs-0-0e2f1d0318a7e7688d141652525cf0d3)
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P138_33305.jpg?sign=1738829350-kUJl7WEF3azbB8Z7BWDuQgVJzSRbMtq6-0-216370df88e5379e73a903df31639adf)
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P139_33306.jpg?sign=1738829350-YNjUY7677HX6xlaYoyNcPj0REKbRKeZj-0-a884808c3abac91f9fc9265495168dc5)
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=1738829350-P1gHs9XYQmnBGsfMDkgPDd4ubKrKnzZb-0-4e2061328cb927a74adad7e4ea224f3a)
UpdateUser方法主要实现修改用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程18 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P140_33311.jpg?sign=1738829350-1cVFq4glmReV3MIfjZFSVUyFY7Uwua0P-0-f4708bf97252cea9a514be19b56bd52b)
DeleteUser方法主要实现根据编号删除用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程19 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P141_33315.jpg?sign=1738829350-G5EGKMX1j40xBxjt9Wjq68oUnlRaGX9B-0-bc49fefff3af646e3d883f51ea4fc009)
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=1738829350-vb9EcmZXmjBze4RlH2VNbO8QCwe0k5si-0-33fea159a666aa85fd6dff3296839cf7)
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=1738829350-yaFFBtD5rXxVcVljh7dyzfrr2QCsKE5R-0-2700ec4c941d8d8deda0d6e460173cf9)