
Visual C# 2005是Microsoft公司开发的新一代编程语言包,由于其内嵌在.NET Framework中,所以不仅包含了ADO.NET这一功能强大的数据库开发组件,而且更具有“显示逻辑同业务逻辑分离”这一特性。由于其具有功能强大,使用方便的特点,已成为数据库编程必不可少的工具。
本书以面向对象思想和设计模式为指导,通过大量实例,详细介绍了ADO.NET、基于数据库应用的通用模块、数据库系统综合实例设计和开发、数据库的移植升级、项目打包发布和安装等方面的应用技术,内容包括数据库开发的诸多技术和数据库模块的设计理念,用户登录、邮件管理、报表设计、图片管理、在线投票信息发布和管理等通用功能模块,Blog和在线购物项目案例,C#应用程序的打包发布和安装,数据库以及项目案例的升级。
本书不仅适用于使用Visual C# 2005进行软件开发的具有编程经验的广大软件开发人员,也适合高等院校师生学习和参考使用,特别对高等院校计算机及相关专业的学生进行毕业设计具有非常好的参考价值,也可以作为广大计算机编程爱好者的自学与参考用书。
前 言
Visual C# 2005是Microsoft公司开发的最新一代编程语言包,由于其内嵌在.NET Framework中,所以程序员在用其开发应用程序时,一方面能方便地使用.NET Framework中的ADO.NET组件,高效快捷地开发基于数据库访问的应用代码,另一方面能利用其“显示逻辑同业务逻辑分离”的良好编程特性,从架构的层次上,分离窗体类的代码和业务功能类的代码,从而提高所开发项目的可维护性和可重用性(即可移植性)。
另外,从软件工程的角度来讲,由于在开发新项目时,要尽可能地重用现有的功能模块,所以在开发具有各功能的业务模块时,要尽量把其设计并构造成一个通用的组件。并且,由于应用项目会时常面临需求变更以及功能维护的工作,所以,在编写应用项目的代码前,有必要在分析其潜在变更点的前提下,合理地设计项目的架构以及功能模块的布局,为项目提供架构层次的维护和扩展空间。
本书在合理利用Visual C# 2005编程语言的优势基础上,以数据库应用技术为主线,以面向对象和设计模式等优秀设计理念为指导,综合分析C#数据库应用方面的知识和实例。本书共分为13章,各章内容如下:
第1章主要介绍了面向对象思想的各要素,以及如何根据面向对象思想设计C#的数据库访问模块的架构。
第2章围绕ADO.NET中的两种数据提供者(Data Provider),在详细介绍其中Connection、Command、DataAdapter、DataReader和DataSet类的基础上,综合讲述基于DataGrid控件的ADO.NET综合应用技术。
第3章在ADO.NET组件的基础上,除了讲述XML和存储过程等数据库高级应用技术外,还结合数据库应用代码,给出能指导项目设计的设计模式原则。特别是DAO模式更能提高代码可移植性和重用性。
第4~9章详细介绍基于数据库应用的通用功能模块。其中,第4章介绍了用户登录模块,第5章介绍了邮件发送管理模块,第6章介绍了生成水晶报表和Excel报表模块,第7章介绍了基于Windows和Web的两种版本的图片管理模块,第8章介绍了在线投票模块,第9章介绍了信息发布和管理模块。请读者们注意这些模块中的数据库访问代码。在第4章是直接把ADO.NET写在业务逻辑里,经不断改进,在第9章则是根据DAO原则设计通用的数据库访问模块,读者能从这个过程中体验到设计模式给项目开发带来的便利。
第10章和第11章分别讲述了Blog和在线购物系统这两个综合应用项目,其中不仅包含了面向ADO.NET的数据库应用,而且重用了前文给出的各功能模块。
第12章以一个基于Windows的项目为例,讲述C#项目的打包、发布和安装的详细步骤。
第13章模拟客户对在线购物系统提出的“数据库迁移”、“功能升级”和“模块维护”等要求,根据“代码重用”和“架构维护”等原则,通过实例讲述代码升级、数据库迁移及项目维护的实施理念和步骤。
本书不仅注重模块的通用性和代码的实践性,更着重分析了根据面向对象思想和设计模式,来优化模块的设计和提高代码质量的目的、思考方式与实现步骤。本书的读者对象可以是具有Visual C#编程经验的软件开发人员,也可以是高等院校的师生。特别对高等院校计算机及相关专业的学生进行毕业设计具有一定的参考价值。此外,本书也可以作为广大计算机编程爱好者的自学和参考用书。
本书由吴晨、胡书敏和蔡威执笔,在编写本书文稿和代码的过程中,得到了大连理工大学孟宪福先生的大力支持和指导,在此表示衷心的感谢。此外,还要感谢上海师范大学的梅晓东同学和上海畅想电脑有限公司的奚亦扬先生,他们参与了校对本书全部文稿和代码的工作。再者,蒋忠、沈学兵、韩建国、杨树平、孔凡、曹丽、严明志、华剑、朱伯芳、秦智育、尤鲲、许杨道、赵小燕、钱云、孙志新等同志在本书的编写过程中也做了大量工作,在此也表示感谢。
由于时间仓促,加之作者水平有限,书中不足之处在所难免,敬请读者批评指正。
编 者
2007年3月
目 录
第1章 面向对象思想与C#数据库开发 1
1.1 面向对象思想的需求背景 1
1.1.1 编程语言发展历程 1
1.1.2 面向过程语言的缺陷 2
1.2 面向对象思想概述 2
1.2.1 封装与细节屏蔽 3
1.2.2 继承与扩展 7
1.2.3 事件与多态 9
1.3 面向对象思想与数据库访问模块 12
1.3.1 数据库访问模块的设计目标 12
1.3.2 通用数据库访问模块的逻辑
代码 12
1.4 本章小结 13
第2章 C#与数据库访问技术 15
2.1 ADO.NET概述 15
2.1.1 ADO.NET体系结构 15
2.1.2 ADO.NET对象模型 16
2.2 Connection对象与数据库连接 17
2.2.1 Connection对象的常用属性 17
2.2.2 Connection对象的
连接字符串 18
2.2.3 Connection对象的常用方法 20
2.2.4 Connection对象连接数据源
代码示例 21
2.3 Command对象与查询语句 22
2.3.1 Command对象的常用属性 22
2.3.2 Command对象的常用方法 23
2.3.3 Command对象创建SQL
语句代码示例 25
2.4 DataReader对象与数据获取 27
2.4.1 DataReader对象的常用属性 27
2.4.2 DataReader对象的常用方法 27
2.4.3 DataReader对象访问数据库
代码示例 29
2.5 DataAdapter对象 30
2.5.1 DataAdapter对象的常用属性 30
2.5.2 DataAdapter对象的常用方法 31
2.5.3 DataAdapter对象代码示例 33
2.6 DataSet对象 34
2.6.1 DataSet对象概述 35
2.6.2 DataSet对象模型 35
2.6.3 DataColumn和DataRow对象 37
2.6.4 使用DataSet对象访问数据库 41
2.7 ADO.NET代码综合示例 42
2.7.1 使用OLE DB .NET Provider 42
2.7.2 使用SQL Server.NET Provider 43
2.7.3 数据库访问综述 44
2.8 DataGrid控件与数据库
访问技术 44
2.8.1 DataGrid控件与数据绑定 45
2.8.2 DataGrid代码示例 45
2.9 本章小结 47
第3章 数据库管理高级技术 49
3.1 存储过程 49
3.1.1 什么是存储过程 49
3.1.2 使用Command对象执行存储
过程 51
3.1.3 使用DataAdapter对象执行存储
过程 51
3.2 ADO.NET访问XML文件 51
3.2.1 XML概述 52
3.2.2 使用DataSet对象
操作XML文件 53
3.3 存储过程和XML综合示例
代码 58
3.3.1 准备数据库环境 58
3.3.2 创建Windows项目 59
3.3.3 主窗体界面设计 59
3.3.4 编写主窗体的业务逻辑代码 60
3.3.5 执行存储过程的界面设计 61
3.3.6 编写执行存储过程的业务
逻辑代码 62
3.3.7 创建XML文件的界面设计 65
3.3.8 编写创建XML文件的业务
逻辑代码 66
3.3.9 读取XML文件的界面设计 67
3.3.10 编写打开XML文件的业务
逻辑代码 68
3.3.11 执行示例 69
3.4 设计模式与数据库访问模块 71
3.4.1 设计模式概述 71
3.4.2 使用工厂模式屏蔽创建细节 73
3.4.3 使用桥接(Bridge)模式实现
代码扩展 75
3.4.4 使用DAO模式分离访问动作
与实现逻辑 77
3.4.5 外观(Facade)模式和代理
(Proxy)模式 82
3.4.6 设计模式与项目管理 83
3.5 本章小结 84
第4章 通用登录模块 85
4.1 需求分析与设计 85
4.1.1 需求分析 85
4.1.2 文件功能设计 86
4.1.3 数据库设计 87
4.2 建立ASP.NET项目 90
4.3 用户登录模块 91
4.3.1 界面设计 91
4.3.2 业务逻辑设计 92
4.4 用户注册模块 95
4.4.1 界面设计 96
4.4.2 业务逻辑设计 97
4.5 后台管理员模块 100
4.5.1 界面设计 101
4.5.2 业务逻辑设计 101
4.6 系统运行示例 104
4.6.1 用户登录 104
4.6.2 用户注册 104
4.6.3 后台管理 105
4.7 本章小结 106
第5章 邮件发送管理模块 107
5.1 需求分析与设计 107
5.1.1 需求分析 107
5.1.2 模块设计 108
5.1.3 数据库设计 109
5.2 .NET与SMTP协议 110
5.2.1 SMTP协议概述 111
5.2.2 .NET对SMTP协议的支持 112
5.3 建立.NET的窗体项目 113
5.4 数据库管理模块 114
5.5 邮件发送系统的主窗体 117
5.5.1 窗体界面设计 117
5.5.2 编写业务逻辑 118
5.6 通讯录管理窗体 119
5.6.1 设计通讯录管理主窗体的
界面 119
5.6.2 编写通讯录主窗体的业务
逻辑代码 120
5.6.3 设计编辑通讯录信息
的界面 124
5.6.4 编写编辑通讯录信息界面
的业务逻辑代码 125
5.6.5 设计新增通讯录信息的界面 127
5.6.6 编写添加通讯录信息界面
的业务逻辑代码 128
5.7 邮件群发界面 130
5.5.1 邮件群发主界面设计 130
5.5.2 编写邮件群发主界面
的业务逻辑 131
5.5.3 邮件群发执行界面设计 137
5.5.4 编写群发邮件的业务逻辑 138
5.8 普通的发送邮件界面 141
5.8.1 窗体界面设计 141
5.8.2 编写业务逻辑代码 143
5.9 模块功能演示 147
5.9.1 通讯录管理功能演示 147
5.9.2 群发邮件功能演示 148
5.10 本章小结 149
第6章 数据报表模块 151
6.1 需求分析与设计 151
6.1.1 需求分析 151
6.1.2 模块设计 152
6.1.3 数据库设计 153
6.2 建立Windows项目 153
6.3 报表生成主模块 154
6.3.1 设计主窗体界面 154
6.3.2 编写业务逻辑 155
6.4 数据库管理模块 156
6.4.1 通用的数据库访问代码 156
6.4.2 通讯录相关的数据库
访问代码 161
6.5 Excel文件生成模块 161
6.5.1 设计“普通Excel导出”
的界面 161
6.5.2 编写“普通Excel导出”模块
的业务逻辑 163
6.5.3 设计“高级Excel导出”
的界面 165
6.5.4 编写“高级Excel导出”模块
的业务逻辑 165
6.6 水晶报表生成模块 167
6.6.1 水晶报表概述 167
6.6.2 “push模型水晶报表”
的界面设计 168
6.6.3 编写以push产生模型水晶报表
的业务逻辑 172
6.6.4 “pull模型水晶报表”
的界面设计 172
6.6.5 编写以pull产生模型水晶报表
的业务逻辑 174
6.7 报表生成演示 174
6.7.1 数据预览 174
6.7.2 生成Excel报表 175
6.7.3 生成水晶报表 176
6.8 本章小结 176
第7章 图片管理系统模块 177
7.1 需求分析 177
7.1.1 Web图片管理系统需求分析 177
7.1.2 Windows图片管理系统
需求分析 178
7.2 Web版本的系统设计 179
7.2.1 图片管理系统设计 179
7.2.2 图片管理系统数据库设计 181
7.2.3 编写数据库存储过程
代码 182
7.3 建立.NET的网站WEB项目 183
7.4 数据库管理模块 184
7.5 Web图片管理系统的主窗体 186
7.5.1 窗体界面设计 186
7.5.2 编写业务逻辑 187
7.6 上传图片窗体 192
7.6.1 设计上传图片窗体的界面 192
7.6.2 编写上传图片窗体的
业务逻辑代码 193
7.7 新建界面 194
7.7.1 新建界面设计 195
7.7.2 编写新建界面的
业务逻辑 195
7.8 修改界面 196
7.8.1 修改界面设计 197
7.8.2 编写修改界面的
业务逻辑代码 197
7.9 Web图片管理系统模块演示 198
7.10 Windows版本的系统设计 202
7.11 建立.NET的窗体项目 202
7.11.1 Windows图片管理系统
界面设计 203
7.11.2 Windows图片管理系统
业务逻辑 204
7.12 Windows图片管理系统
模块演示 206
7.13 本章小结 207
第8章 在线投票模块 209
8.1 需求分析与设计 209
8.1.1 需求分析 209
8.1.2 模块设计 210
8.1.3 数据库设计 210
8.2 建立ASP.NET项目 213
8.3 数据库管理模块 214
8.4 登录模块 221
8.4.1 界面设计 222
8.4.2 编写业务逻辑 222
8.5 在线投票主模块 223
8.5.1 界面设计 224
8.5.2 编写业务逻辑 225
8.6 投票模块 228
8.6.1 界面设计 228
8.6.2 编写业务逻辑 230
8.7 程序运行示例 233
8.8 本章小结 234
第9章 信息发布模块 237
9.1 需求分析与设计 237
9.1.1 需求分析 237
9.1.2 模块设计 238
9.1.3 数据库设计 239
9.2 建立ASP.NET项目 242
9.3 数据库管理模块 242
9.4 信息发布系统的登录模块 248
9.4.1 界面设计 248
9.4.2 编写业务逻辑 249
9.5 信息发布的主界面 250
9.5.1 信息发布界面设计 250
9.5.2 编写信息发布主界面
的业务逻辑 252
9.5.3 显示详细信息的界面设计 254
9.5.4 编写显示详细信息
的业务逻辑 255
9.6 信息发布模块 256
9.6.1 界面设计 257
9.6.2 编写信息发布主界面
的业务逻辑 258
9.7 信息修改模块 259
9.7.1 界面设计 259
9.7.2 编写信息发布主界面的
业务逻辑 260
9.8 系统运行示例 262
9.8.1 登录 262
9.8.2 进入信息发布主界面 262
9.8.3 查看信息的详细内容 263
9.8.4 编辑信息 263
9.8.5 发布信息 264
9.9 本章小结 265
第10章 创建和发布自己的Blog网站 271
10.1 需求分析 267
10.1.1 怎样建立一个好
的Blog网站 267
10.1.2 需求分析 268
10.2 设计Blog模块 269
10.2.1 模块设计 269
10.2.2 数据库设计 272
10.2.3 项目设计 282
10.3 数据库管理模块 283
10.3.1 重用数据库访问模块
的代码 283
10.3.2 编写Blog文章相关的
数据库访问模块 284
10.3.3 编写日志相关的数据库
访问模块 286
10.3.4 编写Blog用户管理相关
的数据库访问模块 288
10.3.5 编写Blog评论相关的
数据库访问模块 289
10.3.6 编写照片管理的数据库
访问模块 290
10.4 通用模块设计 292
10.4.1 设计Logo界面 292
10.4.2 编写“最新注册博客”
的界面实现和功能 294
10.4.3 编写“最新更新博客”
的界面实现和功能 296
10.4.4 编写“博客搜索”的界面
实现和功能 297
10.4.5 编写日历界面实现和功能 299
10.4.6 显示个人 Blog标题 299
10.4.7 编写“最新评论”的界面
实现和功能 301
10.4.8 编写“最新日志”的界面
实现和功能 303
10.4.9 编写“图片显示”的界面
实现和功能 304
10.5 日志管理与发布模块 305
10.5.1 添加、删除和修改日志
模块的界面设计 305
10.5.2 添加、删除和修改日志
模块的业务逻辑 309
10.5.3 日志显示模块的界面设计 315
10.5.4 日志显示模块的业务逻辑 318
10.6 博客首页设计 319
10.6.1 界面设计 319
10.6.2 编写业务逻辑 323
10.7 登录管理模块 324
10.7.1 通过重用,设计登录模块
的界面 324
10.7.2 通过重用,编写登录模块
的业务逻辑 326
10.7.3 通过重用,设计注册模块
的界面 327
10.7.4 通过重用,编写注册模块
的业务逻辑 329
10.8 精确搜索模块 331
10.8.1 界面设计 331
10.8.2 编写业务逻辑 333
10.9 在本地发布运行Blog 334
10.9.1 使用IIS发布Blog 334
10.9.2 Blog网站首页 337
10.9.3 注册与登录 339
10.9.4 个人Blog空间 340
10.9.5 浏览日志 340
10.9.6 照片管理 340
10.9.7 精确搜索 341
10.10 发布Blog 342
10.10.1 虚拟主机 342
10.10.2 定购主机 344
10.10.3 申请域名 345
10.10.4 域名管理 346
10.10.5 上传博客文件 347
10.11 本章小结 348
第11章 在线购物系统 349
11.1 在线购物系统的需求分析 349
11.1.1 在线购物系统的设计理念 350
11.1.2 在线购物系统
的功能需求点 350
11.2 项目设计 351
11.2.1 模块设计 351
11.2.2 数据库设计 353
11.2.3 创建在线购物项目 358
11.3 数据库管理模块 358
11.3.1 通用的数据库访问模块 358
11.3.2 商品管理业务逻辑相关
的数据库访问模块 359
11.3.3 订单管理逻辑相关的
数据库访问模块 361
11.3.4 商品种类管理的数据库
访问模块 363
11.3.5 用户管理的数据库访问
模块 364
11.4 编写通用功能模块的代码 365
11.4.1 登录模块 365
11.4.2 搜索模块 369
11.4.3 商品分类模块 373
11.4.4 购物系统的标题模块 374
11.4.5 用户对象设计 376
11.4.6 订单对象设计 378
11.5 用户注册模块 381
11.5.1 界面设计 381
11.5.2 逻辑代码 385
11.6 在线购物系统的首页 386
11.6.1 界面设计 387
11.6.2 逻辑代码 388
11.7 商品介绍模块 395
11.7.1 界面设计 395
11.7.2 逻辑代码 396
11.8 购物车管理 397
11.8.1 界面设计 398
11.8.2 逻辑代码 399
11.9 订单查询模块 402
11.9.1 界面设计 402
11.9.2 逻辑代码 404
11.10 项目扩展与维护 405
11.10.1 扩展需求及其对策 405
11.10.2 数据迁移需求及其所用
技术 406
11.11 在线购物系统效果演示 407
11.11.1 在线购物首页 407
11.11.2 用户注册 408
11.11.3 查看商品的详细信息 409
11.11.4 查看分类商品的信息 410
11.11.5 搜索商品 411
11.11.6 购买商品 412
11.11.7 查看购物车 413
11.11.8 订单查询 413
11.12 本章小结 414
第12章 新生报到注册系统 415
12.1 需求分析与设计 415
12.1.1 需求分析 415
12.1.2 模块设计 415
12.1.3 数据库设计 416
12.2 建立Windows项目 417
12.3 数据库管理模块 418
12.3.1 共通的数据访问模块 419
12.3.2 新生注册相关业务的
数据库实现模块 421
12.4 注册主模块 423
12.4.1 设计主窗体界面 425
12.4.2 编写业务逻辑 426
12.5 新生注册 427
12.5.1 设计新生注册界面 427
12.5.2 编写业务逻辑 429
12.6 注册查询 430
12.6.1 设计注册查询的界面 431
12.6.2 编写业务逻辑 432
12.7 修改新生信息 433
12.7.1 设计修改新生信息
的界面 433
12.7.2 编写业务逻辑 434
12.8 打包发布本项目 436
12.9 本系统效果演示 442
12.9.1 系统首页 442
12.9.2 新生注册 443
12.9.3 注册修改 444
12.9.4 注册查询 445
12.10 本章小结 446
第13章 项目移植与代码重用技术 447
13.1 项目移植与维护总体需求 447
13.1.1 移植工作要做点什么 447
13.1.2 如何进行系统维护 449
13.1.3 通过代码重用来减轻
工作量 450
13.2 项目维护与重构理论 451
13.2.1 代码重构概述 451
13.2.2 OCP原则与代码重构 452
13.2.3 SRP原则与代码维护 453
13.2.4 DIP原则与基类稳定 453
13.3 迁移在线购物系统的数据库
系统 455
13.3.1 迁移到SQL Server 2005
数据库 456
13.3.2 迁移到Oracle数据库 463
13.3.3 SQL Server迁移到MySQL
数据库 470
13.4 升级在线购物系统 474
13.4.1 变更需求点分析 475
13.4.2 迁移业务逻辑点 475
13.4.3 关于“添加报表功能”
的需求分析 480
13.4.4 实现“添加报表功能”
的升级工作 480
13.5 功能维护后的成果演示 482
13.5.1 添加投票项 482
13.5.2 在线投票 482
13.5.3 查看投票结果 483
13.6 本章小结 483