
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

建立数据库的连接主要通过SqlConnection类实现,并初始化数据库连接字符串,然后通过State属性判断连接状态,如果数据库连接状态为关闭,则打开数据库连接。实现打开数据库连接Open方法的代码如下:
例程02 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs

关闭数据库连接主要通过SqlConnection对象的Close方法实现。自定义Close方法关闭数据库连接的代码如下:
例程03 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs

因为DataBase类使用System.IDisposable接口,IDisposable接口声明了一个方法Dispose,所以在此应该完善IDisposable接口的Dispose方法,用来释放数据库连接资源。实现释放数据库连接资源的Dispose方法的代码如下:
例程04 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs

本系统向数据库中读/写数据是以参数形式实现的。MakeInParam方法用于传入参数,MakeParam方法用于转换参数。实现MakeInParam方法和MakeParam方法的完整代码如下:
例程05 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs

RunProc方法为可重载方法,其中,RunProc(string procName, SqlParameter[] prams)方法主要用于执行数据的添加、修改和删除操作;RunProc(string procName)方法用来直接执行SQL语句,比如数据库备份与恢复等操作。实现可重载方法RunProc的完整代码如下:
例程06 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs

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

CreateDataAdaper方法用来将带参数SqlParameter的命令文本添加到SqlDataAdapter中,并执行命令文本。CreateDataAdaper方法的完整代码如下:
例程08 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs

CreateCommand方法用来将带参数SqlParameter的命令文本添加到SqlCommand中,并执行命令文本。CreateCommand方法的完整代码如下:
例程09 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataBase.cs

3.5.2 DataOperate类
DataOperate(基础数据操作类)类主要实现的功能有自动生成编号、对字符串进行各种验证、上传图片、对DataList控件进行数据绑定并分页、截取指定长度的字符串和设置第三方组件FreeTextBox中的字体等,下面给出基础数据操作类中各方法的源代码,并且进行详细介绍。
getID方法用来根据数据库中已经存在的记录自动生成编号,其实现代码如下:
例程10 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

validateNum方法用来验证输入的字符串是否为数字,其实现代码如下:
例程11 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

说明
验证邮编、电话号码、E-mail地址和网址的实现的方法与验证数字类似,只是正则表达式有所不同,这里不再一一列举。
UpPhoto方法主要用来实现上传图片并在Image控件中显示上传图片的功能,其实现代码如下:
例程12 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

dlBind方法主要用来将数据库的数据绑定到DataList控件并进行分页显示,其实现代码如下:
例程13 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

SubStr方法主要用来根据用户输入的参数截取指定长度的字符串,其实现代码如下:
例程14 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

strFont方法主要用来设置第三方组件FreeTextBox中的字体,其实现代码如下:
例程15 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

3.5.3 UserOperate类
UserOperate(用户操作类)类主要用来实现企业门户网站中用户和管理员的添加、修改、删除、查询和登录等功能。
用户操作类中的方法主要提供给陈述层调用,从编码的角度出发,该类中方法的实现是建立在数据层(数据库操作类DataBase.cs)基础上,下面将详细介绍。
在用户操作类中,首先定义用户信息的数据结构,代码如下:
例程16 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs



AddUser方法主要实现添加用户信息功能,实现关键技术:创建SqlParameter参数数组,通过DataBase.cs(数据库操作类)中的MakeInParam方法将参数值转换为SqlParameter类型,存储在数组中,最后调用DataBase.cs(数据库操作类)中的RunProc方法执行命令文本,代码如下:
例程17 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

UpdateUser方法主要实现修改用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程18 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

DeleteUser方法主要实现根据编号删除用户信息功能,其实现关键技术与AddUser方法类似,代码如下:
例程19 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

UserOperate(用户操作类)类中定义了4种查找用户信息的方法,方法名称分别为FindUserByName、FindResult、FindUserByMarker和GetAllUser,其中,FindUserByName方法用来根据用户姓名找到用户信息;FindResult方法用来根据用户姓名和密码问题找到密码答案;FindUserByMarker方法用来根据标识找到用户信息;GetAllUser方法用来得到所有用户信息。查找用户信息方法的实现代码如下:
例程20 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs

UserLogin和AdminLogin方法分别用来实现用户登录和管理员登录功能,其实现关键技术与AddUser方法类似,代码如下:
例程21 代码位置:资源包\TM\03\EnterpriseWeb\App_Code\DataOperate.cs
