![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=1738930072-YSXPyOtqiZ1wsOYFeMRrAzoNzc2bKA6w-0-09b3a780d6e66519ae421dc0783acf41)
建立数据库的连接主要通过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=1738930072-xBmYGrUpglYJdE3XuPH80XSv64y8IXcj-0-31e9cb9604e25711ce10b6858e0f30c3)
关闭数据库连接主要通过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=1738930072-F51qhZk596SFOt0HmS1XFj5PNmZJGJbN-0-cf7c025491aef665ba363e4a19fe28cd)
因为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=1738930072-956cZiwCvsiFaqj8f1yjfZgco42EUtow-0-03065864e31417665a94a44f84d046b3)
本系统向数据库中读/写数据是以参数形式实现的。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=1738930072-yGkWnLa8KBQ80MJZXm8Zik1fprgSstrX-0-f93d42b368dbb369eb1424fc5dce7c1b)
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=1738930072-qTQ0MKgMZ4xgFqkxeSOGJscO3BAgsKje-0-0163589784826dc914a6ac5acad15152)
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=1738930072-DZXrpZWgNZIYTQPb262SBX2BNYB1MQW3-0-30a7142a7e98c50219852705a754cf3b)
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=1738930072-80fGzUSrTe4Q6crDvM2zpe7XLq7hpYnO-0-43ffe834d9d5b12b890a132884a7f606)
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=1738930072-8HNQ55U6P9JbdJhcYAiijYJsy2WQSrEh-0-a3e36a812f5021e822f3cdd07cf56e2c)
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=1738930072-V2RS9UOBzV7dnX7xo6Jwg6FLtTWgrW0R-0-a8ddf7e145067892e4b8cede1aa678fd)
validateNum方法用来验证输入的字符串是否为数字,其实现代码如下:
例程11 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33295.jpg?sign=1738930072-YW59LTX4d66Nk2BMmzsiWBHSQxGw1Zoh-0-5d433cabebacbc23c783b42ffc7ff3df)
说明
验证邮编、电话号码、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=1738930072-KrInhg1Iya8sIrtkwLg0SU7ifD7YHcAU-0-f6d7303226ed0a2008243baeea79d191)
dlBind方法主要用来将数据库的数据绑定到DataList控件并进行分页显示,其实现代码如下:
例程13 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33298.jpg?sign=1738930072-mpNQQiI4hX8R256BNkb3N3tpjpn4i20E-0-6e7dd04571b9adf4559fcfe6e6785897)
SubStr方法主要用来根据用户输入的参数截取指定长度的字符串,其实现代码如下:
例程14 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P136_33301.jpg?sign=1738930072-zgRRK5vmCGEtASi6WcDD7v1ZYaoQ8hiN-0-0a2fff503cabdecd4a0788434908f3af)
strFont方法主要用来设置第三方组件FreeTextBox中的字体,其实现代码如下:
例程15 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P136_33303.jpg?sign=1738930072-9bcgW72N0crLEkBDvzaCHd9S5FfqDILZ-0-c306d80dfacb092e5cc2317d4ddbcfe1)
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=1738930072-xYqTsTkINn0bVpPhrXMxzHZ633PsBZyT-0-69e81a4485641738a2ea1e3cde83d0ff)
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P138_33305.jpg?sign=1738930072-fzp7533AOIWmSuetjb8lHUf14cLe0A3c-0-ff70e7c68eefa2a390b0a24b6c448040)
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P139_33306.jpg?sign=1738930072-Rs8wXBU12IB2rjfK6XWkmizHYFoTbo3g-0-621d947590d0e58b64a7f643bc56b4e7)
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=1738930072-46mNTsRCn71ZCH3kHeJPg3N7LfnaU0E7-0-9259f1771afa39525f2d7500bb5f7ca1)
UpdateUser方法主要实现修改用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程18 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P140_33311.jpg?sign=1738930072-PbTg4ojkGHtYtY9YkOwFydwO3uxcNjwr-0-25e673ab601a6e14ba56659a6c5e4ede)
DeleteUser方法主要实现根据编号删除用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程19 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P141_33315.jpg?sign=1738930072-zbRdzoXI4bAx8ZZeFiXaQDfW99oMC07D-0-a18b8b3c726cc6e5ab6a7015b7698523)
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=1738930072-zHeIfzwxvg1X3BFuInZ7J9HaBX93pdxX-0-4f056ebd7ebde19b59dcaec5f1402f16)
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=1738930072-wdmjIDqh528lTL5rWnXx8sjMTO8i26Ai-0-a9352a7ea16d9c9485d6cbe6ebe73805)