![C#项目开发全程实录(第4版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/544/24172544/b_24172544.jpg)
2.5 公共类设计
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P66_19218.jpg?sign=1738879143-o9Cu655hPIqBM5kBNpptpa31G4KCROyW-0-bd86edad8d424706fef39d79763e8439)
视频讲解
在开发项目中以类的形式来组织、封装一些常用的方法和事件,不仅可以提高代码的重用率,也大大方便了代码的管理。本系统中创建了BaseOperate.cs和OperateAndValidate.cs两个公共类,其中BaseOperate类主要用来访问SQL Server数据库和返回基本的ADO.NET对象,OperateAndValidate类主要用来执行控件绑定和数据验证等功能。在程序开发时,窗体只需调用相应方法即可,下面就分别对这两个类进行介绍。
2.5.1 程序文件架构
主文件架构如图2.14所示。
我方信息管理和统计分析文件架构分别如图2.15和图2.16所示。
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P66_52221.jpg?sign=1738879143-vg9sfvAh6ZIRszMRVEziwISVmwuboUcT-0-d2abb1b2c6b7b411c7aa025462c6d918)
图2.14 主文件架构图
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P66_52222.jpg?sign=1738879143-7Bd1qkzaXkeaJH24S0dx2HpG0dKltwhC-0-9de2d603ed0e97a2370589e8488579a7)
图2.15 我方信息管理文件架构图
资料管理和用户管理文件架构分别如图2.17和图2.18所示。
系统维护和帮助文件架构分别如图2.19和图2.20所示。
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P67_52223.jpg?sign=1738879143-8Q5pONrC5qTD8OPTpNKdVPqEPBXenfW4-0-9d6ca1ff08129edecc5e63ac8a6a882e)
图2.16 统计分析文件架构图
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P67_52224.jpg?sign=1738879143-xjTIBDsAYtCmdGltvAw9oESQnLQ28TZ7-0-be79279bfe4d6cf6b342e69325d885fc)
图2.17 资料管理文件架构图
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P67_52225.jpg?sign=1738879143-LWKXLczYSaoPZ208j4aIUnvBubAiVgLq-0-560e74de57bcebc0d4f8525cb580491b)
图2.18 用户管理文件架构图
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P67_52226.jpg?sign=1738879143-CsQ4zIE6QSZQOasdPIrgrG8sLT0YPUII-0-7140b8956b8f766f5300bf42a3fc2a70)
图2.19 系统维护文件架构图
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P67_52227.jpg?sign=1738879143-UVWAX6UuBYRJyvjY0IZumIsIygXKvVsD-0-460241320daf0761309bf494f068b941)
图2.20 帮助文件架构图
2.5.2 BaseOperate类
BaseOperate.cs类文件中,在命名空间区域引用using System.Data.SqlClient命名空间,用来连接数据库和进行有关数据库的操作。主要代码如下:
例程01 代码位置:资源包\TM\02\CRM\BaseClass\BaseOperate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P67_52233.jpg?sign=1738879143-hsU6aSowlfdQhL3qc3L5DgGJ6VeLnHK2-0-06ff8ab56361e981c5c0eadaccc0916a)
1.getcon()方法
getcon()方法是返回值为SqlConnection类型的自定义方法,它主要用来建立数据库连接。实现代码如下:
例程02 代码位置:资源包\TM\02\CRM\BaseClass\BaseOperate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P67_52235.jpg?sign=1738879143-5jqaYyDr9xIlHFxj781EUXV9iamiYtbL-0-c2d916ca138fd5ac0cc8814cbbd09b38)
代码贴士
❶ 定义SQL Server 2014连接字符串,用户在使用时,需要将Data Source改为自己的SQL Server 2014服务器名。
❷ SqlConnection类用来连接数据库。
2.getcom()方法
getcom()方法为无返回值类型的自定义方法,它主要用来执行SQL语句。实现代码如下:
例程03 代码位置:资源包\TM\02\CRM\BaseClass\BaseOperate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P68_52239.jpg?sign=1738879143-z1SiVFHvqTI7KpszJlA1Gv6AcaZB62Cp-0-741ef8c1cae07e5da5be35b7ad480531)
代码贴士
❶ SqlConnection类的Open()方法用来打开数据库连接。
❷ SqlCommand类表示要对SQL Server数据库执行的一个SQL语句或存储过程。
❸ SqlCommand类的ExecuteNonQuery()方法用来执行SqlCommand命令。
❹ SqlCommand类的Dispose()方法用来释放SqlCommand对象占用的资源。
❺ SqlConnection类的Close()方法用来关闭数据库连接。
3.getds()方法
getds()方法用来执行SQL语句,并返回一个DataSet类型的数据集对象。在此方法中,首先调用本类中的getcon()方法实现数据库连接,然后使用SqllDataAdapter类对象填充DataSet数据集。实现代码如下:
例程04 代码位置:资源包\TM\02\CRM\BaseClass\BaseOperate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P68_52242.jpg?sign=1738879143-jaH8H9CNjGW6BptYjLNdGNt0Axm7xcN2-0-d655e40ddda260099ffab449e107670f)
代码贴士
❶ SqlDataAdapter类表示用于填充DataSet和更新SQL Server数据库的一组数据命令和一个数据库连接。
❷ DataSet是数据的内存驻留表示形式,它表示一个数据集。
❸ SqlDataAdapter类的Fill()方法用来填充DataSet或DataTable数据集。
4.getread()方法
getread()方法主要用来生成一个SqlDataReader类对象,以便从数据表中读取数据。该方法中,首先,使用SqlCommand类对象执行SQL语句,然后调用SqlCommand类的ExecuteReader()方法生成SqlDataReader类的一个对象,并返回该对象。getread(string M_str_sqlstr)方法实现代码如下:
例程05 代码位置:资源包\TM\02\CRM\BaseClass\BaseOperate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P69_52247.jpg?sign=1738879143-nOXD8m1tHHGSPW0eTyfyCtdOwmWBTqVe-0-5598b45bfba0bde4769e7fd9136c601a)
2.5.3 OperateAndValidate类
OperateAndValidate.cs类文件中,首先在命名空间区域添加如下命名空间:System.Data.SqlClient、System.Text.RegularExpressions和CrystalDecisions.CrystalReports.Engine,它们分别用来进行数据库操作、自定义正则表达式和进行有关的报表操作,然后生成BaseOperate类的一个对象,通过类对象调用类中的功能方法。实现代码如下:
例程06 代码位置:资源包\TM\02\CRM\BaseClass\OperateAndValidate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P69_52249.jpg?sign=1738879143-EkTYXPnN4eRhc6b2meokmbwtPiX7Hlbj-0-42d766e0ddc26c37ab19722ffaab37cf)
1.cboxBind()方法
cboxBind()方法无返回值,它主要用来执行SQL语句,并将执行结果绑定到ComboBox控件中。实现代码如下:
例程07 代码位置:资源包\TM\02\CRM\BaseClass\OperateAndValidate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P70_52251.jpg?sign=1738879143-3XxfLbiZViUb9VaiOGmz9z3fPqongtN3-0-02df412284ddd4244b86c5121e576e25)
代码贴士
❶ 调用BaseOperate类中的getds()方法生成一个DataSet数据集对象。
❷ DataSource属性用来获取或设置ComboBox控件的数据源。
❸ DisplayMember属性用来获取或设置要为ComboBox控件显示的属性。
2.validateNum()方法
validateNum()方法无返回值,它主要用来验证输入字符串是否为数字。实现代码如下:
例程08 代码位置:资源包\TM\02\CRM\BaseClass\OperateAndValidate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P70_52254.jpg?sign=1738879143-2xmROOUmPfOhdkitRBSieAR5eGeBnaeD-0-511329304bba9ec4e864e54e11b640fb)
代码贴士
❶ 使用Regex类的IsMatch()方法验证一个字符串是否为数字,IsMatch()方法用于指示正则表达式在输入字符串中是否找到匹配项。
3.autoNum()方法
autoNum()方法无返回值类型,该方法主要用来根据数据表中记录自动生成编号。实现代码如下:
例程09 代码位置:资源包\TM\02\CRM\BaseClass\OperateAndValidate.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P70_52257.jpg?sign=1738879143-fRqkzlsrSMj2eDtH3dEh86sMM832mzcg-0-47989315b88c7f0d0c72e8f66221d573)
代码贴士
❶ DataSet对象的Tables属性用来获取包含在DataSet对象中的表的集合,Count属性用来获取DataSet数据集中记录数。
❷ Convert.ToString()方法用来将输入文本转换成字符串格式。
❸ Convert.ToString()方法用来将输入文本转换成Int类型,SubString()方法用来从字符串的指定位置截取指定长度的字符。
说明
由于篇幅有限,有关OperateAndValidate类中的其他方法请参见本书资源包。