![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=1738940037-jwNcMUEytACeBv8fzmnFSWBP1QDFZZKb-0-2d4aa1e7037d811785485e935c53b472)
建立数据库的连接主要通过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=1738940037-TmjZP1Y5mR4NtqSWEwIqtbGGYO7mPPJk-0-d6fa14daf2f101dfd9787bbb468ecdc9)
关闭数据库连接主要通过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=1738940037-pcs2TwqHIkaYaSPQTLz2m2GImMRqtEa3-0-cbea392c49aee5154da19b761f20154a)
因为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=1738940037-Gj54WJu72L3GXQi661pN7UQyxUXnHvpc-0-562f79f424787c20ac5cb5c3fcd83072)
本系统向数据库中读/写数据是以参数形式实现的。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=1738940037-qf5iPJD3XuqKhCf5T6rYJjAnNwpGumDM-0-f8e81b16f186ba911f38e103c63c28a2)
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=1738940037-StxesRbthlsU9dsAwUEgMyDJ5WtLlCwf-0-066116074aabe24736c17c0a6bb51cd0)
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=1738940037-yjxCrDTNg90dqCzigG5qEMwN0a5JukTg-0-88ce49931775baad28593b5a28259d62)
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=1738940037-6YcnUxprEtour4bhkWJLjYYy9dP4gU4V-0-a45d4337bec647f31960a8f9d56e3535)
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=1738940037-Sj4DEZnd3pHiwldWet9JNUSiH2p40q7U-0-ecc5166574de860eacd69b2420ceb50c)
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=1738940037-OR9A4ORNv5430S2ZnYsVQt5a4g91ofL9-0-b47ed3134b475c5cff4cded1c0dc75ce)
validateNum方法用来验证输入的字符串是否为数字,其实现代码如下:
例程11 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33295.jpg?sign=1738940037-ArA1HH4B39M73D3brAKHwlxnKbNI7YLe-0-c06f96ede3dc203170167b2180060f0f)
说明
验证邮编、电话号码、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=1738940037-IGayGPYcI95xpA32oIcQFbqBqv6PZBNJ-0-2fc746e227ab399398aadb90891e549e)
dlBind方法主要用来将数据库的数据绑定到DataList控件并进行分页显示,其实现代码如下:
例程13 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P135_33298.jpg?sign=1738940037-Uu6uxeMiSAVIt3LCediG3Ae951Zq1fMq-0-64fe182a9674c595f3e05487d8b89eca)
SubStr方法主要用来根据用户输入的参数截取指定长度的字符串,其实现代码如下:
例程14 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P136_33301.jpg?sign=1738940037-rjkz37KkS6BxBKNFgfS6c8xfBbmmSCdN-0-6220637b705d7d2b3aafe06539e06766)
strFont方法主要用来设置第三方组件FreeTextBox中的字体,其实现代码如下:
例程15 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P136_33303.jpg?sign=1738940037-AyC4hgdiet9YLMtyr8mO1UrXvwoYvkLZ-0-4588085637af738d730d002bdeb9d591)
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=1738940037-iX2M8WDSadsiJ4hsInqdCQ8kw1icASAZ-0-6cac6b9c3ea3b01ffa2ae5c5e2db4a38)
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P138_33305.jpg?sign=1738940037-0Bw6Yn0IGGqJfv9QAuGNbvP8RszQ791m-0-a863bbcf8169d9435e038dbc1069ca46)
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P139_33306.jpg?sign=1738940037-JI7Gh4Op3tpfBGhK51xxYttH0S2GrO6f-0-1a1e60ffcc66ad816a5383d7d0b6f361)
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=1738940037-J57pKsZm8I2FpVD8oWUQRyHp1Yu7DRwH-0-38b6dc570a3a4c48f630178e44bfc006)
UpdateUser方法主要实现修改用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程18 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P140_33311.jpg?sign=1738940037-q26Fh0PlAwuMGMAyQ2O1UIf4GCiBtZg9-0-af932f1c7ad3a98613340d3b91536118)
DeleteUser方法主要实现根据编号删除用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程19 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
![](https://epubservercos.yuewen.com/60F777/15253385804108706/epubprivate/OEBPS/Images/Figure-P141_33315.jpg?sign=1738940037-YfksQClrJSSaVKqwKpKuS1bP2EPuC5fG-0-ba94240978041bb636cf6490bef63790)
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=1738940037-s8EtFoOb7B0f7UFi3kjylQ2x5BvA3PEs-0-c11bf05a3cb650336caf907ae8cbd4ae)
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=1738940037-gVBX9hMUw6ni6tcKv1z3OfdfXxP0EbuS-0-b98b2404bb94e8b57c0afe0b0076191c)