1.1.1 微软公司的梦想 3
1.1.2 .NET能做什么 3
第1篇 C#编程基础 3
第1章 C#与.NET Framework简介 3
1.1 什么是.NET Framework 3
1.1.3 认识.NET 4
1.2.1 C#与.NET 5
1.2 什么是C# 5
1.2.2 与其他语言的比较 6
1.2.3 C#的特点 7
1.3.1 Visual Studio.NET开发环境 8
1.3 第一个C#程序:Hello World 8
1.3.2 第一个Windows Console程序 9
代码1-1 控制台HelloWorld示例:HelloWorld.cs 10
1.3.3 第一个Windows Form程序 11
1.3.4 第一个ASP.NET程序 12
1.3.5 源代码简短分析 14
温故知新 15
2.1.1 值类型 17
第2章 C#程序设计基础 17
2.1 数据类型 17
2.1.2 引用类型 20
2.1.3 类型转换 21
2.1.4 装箱和拆箱 22
2.2.2 声明和使用变量 23
2.2 变量和常量 23
2.2.1 命名变量 23
2.2.3 声明和使用常量 24
2.3.3 赋值运算符 25
2.3 运算符 25
2.3.1 算数运算符 25
2.3.2 字符串运算符 25
2.3.6 其他运算符 26
2.3.4 逻辑运算符 26
2.3.5 位运算符 26
2.4.1 使用if语句实现分支 27
2.3.7 运算符的优先级 27
2.4 流程控制 27
代码2-1 if语句示例:Class 1.cs 28
2.4.2 使用switch语句实现分支 29
2.4.3 使用while语句实现循环 30
代码2-2 switch语句示例:Class 1.cs 30
2.4.4 使用for语句实现循环 31
代码2-3 while语句示例:Class 1.cs 31
2.4.5 使用break/continue控制循环 32
代码2-4 for语句示例:Class 1.cs 32
代码2-5 break continue语句示例:Class 1.cs 32
2.4.6 使用#define进行条件编译 33
2.5.1 用类搭建程序 33
2.5 程序的结构 33
代码2-6 #define语句示例:Class 1.cs 33
2.5.2 使用命名空间 35
代码2-7 namespace语句示例:Class 1.cs 35
2.6 异常处理 36
2.5.3 寻找程序的入口 36
代码2-8 try、catch和finally语句示例:Class 1.cs 37
温故知新 38
第3章 类 39
3.1.1 声明类 39
3.1 定义类 39
代码3-1 public和private示例:Class 1.cs 41
3.1.2 声明类的静态特征 41
3.1.3 声明类的动态行为 42
代码3-2 声明方法示例:Class 1.cs 42
3.1.4 创建类实例 43
3.1.5 继承类 43
3.2 Visual Studio.NET中的OOP工具 44
3.2.1 使用Class View窗口 44
代码3-3 类继承示例:Class 1.cs 44
3.2.2 使用Object Browser 45
3.3.1 域和属性 46
代码3-4 域和属性示例:Class 1.cs 46
3.3 属性详谈 46
3.3.2 静态属性 47
代码3-5 静态属性示例:Class 1.cs 47
3.3.3 重载属性 48
代码3-6 属性重载示例:Class 1.cs 48
3.4.1 方法的参数 49
3.4 方法详谈 49
代码3-7 使用ref传递引用参数示例:Class 1.cs 50
代码3-8 使用out传递输出参数示例:Class 1.cs 50
代码3-9 使用params传递多个参数示例:Class 1.cs 51
3.4.3 使用析构函数 52
3.4.2 使用构造函数 52
代码3-10 构造函数示例:Class 1.cs 52
3.4.4 使用静态方法 53
代码3-12 静态方法示例:Class 1.cs 53
代码3-11 析构函数示例:Class 1.cs 53
3.4.5 重载方法 54
代码3-13 方法重载示例:Class 1.cs 54
3.4.6 访问父类方法 55
代码3-14 访问父类方法示例:Class 1.cs 55
3.4.7 重载运算符 56
代码3-15 运算符重载示例:Class 1.cs 56
温故知新 57
第4章 抽象类、多态及接口 59
4.1 抽象类 59
4.1.1 什么是抽象类 59
4.1.2 声明抽象类 60
4.1.3 实现抽象方法 60
代码4-2 实现运动员抽象方法:Class 1.cs 60
代码4-1 定义运动员抽象类:Class 1.cs 60
4.2 多态 61
代码4-3 使用多态性示例:Class 1.cs 62
4.2.2 多态的实现 62
4.2.1 什么是多态 62
4.3.1 什么是接口 63
4.3.2 声明接口 63
4.3 接口 63
4.2.3 区分多态和重载 63
代码4-4 声明IShape接口:Class 1.cs 64
4.3.3 实现接口 64
代码4-5 继承IShape接口实现矩形类:Class 1.cs 65
代码4-6 使用接口实现多态示例:Class 1.cs 65
温故知新 66
第5章 调试和异常处理 67
5.1.1 使用Visual Studio.NET错误报告 67
5.1 程序调试技术 67
代码5-1 具有逻辑错误的代码示例:Class 1.cs 68
5.1.2 寻找逻辑错误 68
5.1.3 单步执行程序 69
5.1.4 设置断点 69
5.1.5 在哪里设置断点 70
代码5-2 未处理异常的代码示例 71
代码5-3 使用try-catch处理异常的代码示例 71
5.2.1 使用try-catch-finally 71
5.2 异常处理 71
代码5-4 结构良好的矩形类实现 72
5.2.2 使用系统日志 72
5.3 高质量编码标准 72
5.3.1 好的编码结构 72
5.3.2 好的注释风格 73
代码5-6 具有良好注释的矩形类实现 73
代码5-5 结构混乱的矩形类实现 73
5.3.3 好的命名规范 75
代码5-7 方法功能独立的矩形类实现 75
5.3.4 避免文件过大 75
代码5-8 方法功能混乱的矩形类实现 76
代码5-9 异常处理的方法示例 76
5.3.5 使用异常处理 76
温故知新 77
代码5-10 异常未处理的方法示例 77
第2篇 C#核心技术 81
第6章 C#.NET类库框架 81
6.1 .NET命名空间框架 81
6.2 编程基础命名空间 82
6.3 数据操作命名空间 82
6.4 Web应用命名空间 83
6.6 组件模型命名空间 84
6.5 Windows应用命名空间 84
6.8 安全控制命名空间 85
6.7 框架服务命名空间 85
6.10 工程配置命名空间 86
6.9 网络应用命名空间 86
6.11 全球/本地化命名空间 87
6.12 反射命名空间 87
温故知新 88
第7章 字符串操作 89
7.1 静态串String 89
7.1.1 比较字符串 90
代码7-1 使用Compare比较两个字符串示例:Class 1.cs 90
代码7-4 使用==和!=比较两个字符串示例:Class 1.cs 91
代码7-3 使用Equals比较两个字符串示例:Class 1.cs 91
7.1.2 定位字符和子串 91
代码7-2 使用CompareTo比较两个字符串示例:Class 1.cs 91
代码7-5 使用StartsWith判断首字符串示例:Class 1.cs 92
代码7-6 寻找子串位置示例:Class 1.cs 93
7.1.3 格式化字符串 93
代码7-7 设置字符串格式示例:Class 1.cs 93
7.1.4 连接字符串 94
代码7-10 使用“+”连接字符串示例:Class 1.cs 94
代码7-9 使用Join连接字符串示例:Class 1.cs 94
代码7-8 使用Concat连接字符串示例:Class 1.cs 94
7.1.5 分裂字符串 95
7.1.6 插入和填充字符串 95
代码7-11 使用Split分裂字符串示例:Class 1.cs 95
代码7-12 使用Insert插入字符串示例:Class 1.cs 95
代码7-14 使用Remove删除字符串示例:Class 1.cs 96
代码7-13 使用PadLeft填充字符串示例:Class 1.cs 96
7.1.7 删除和剪切字符串 96
代码7-15 使用Trim去掉首尾的特殊符号示例:Class 1.cs 97
代码7-16 使用Copy复制字符串示例:Class 1.cs 97
7.1.8 复制字符串 97
代码7-17 使用CopyTo复制字符串示例:Class 1.cs 97
7.2 动态串StringBuilder 98
代码7-18 使用Replace替换字符串示例:Class 1.cs 98
7.1.9 替换字符串 98
7.1.10 更改大小写 98
代码7-19 使用ToUpper更改字符串大小写示例:Class 1.cs 98
7.1.11 String小结 98
7.2.1 声明StringBuilder串 99
7.2.2 设置StringBuilder容量 99
7.2.3 追加操作 100
代码7-20 使用Append追加字符串示例:Class 1.cs 100
代码7-23 使用Remove删除字符串示例:Class 1.cs 101
7.2.4 插入操作 101
7.2.5 删除操作 101
7.2.6 替换操作 101
代码7-21 使用AppendFormat追加特定格式的字符串示例:Class 1.cs 101
代码7-22 使用Insert插入字符串示例:Class 1.cs 101
7.3.1 字符编码概述 102
代码7-24 使用Replace替换字符串示例:Class 1.cs 102
7.2.7 与String比较 102
7.3 字符串编码 102
7.3.2 使用字符编码类 103
代码7-25 显示编码形式示例:Class 1.cs 104
7.4 使用正则表达式 105
7.4.1 正则表达式简介 106
7.4.2 使用Regex类 106
7.4.3 构造正则表达式 107
代码7-26 验证电子邮件地址示例:Class 1.cs 107
7.4.4 示例:验证URL 109
代码7-27 验证URL示例:Class 1.cs 110
温故知新 110
8.1.1 数组的概念 111
第8章 数组 111
8.1 C#数组简介 111
代码8-1 输出数组元素:Class 1.cs 112
8.1.2 多维数组 112
8.1.3 创建C#数组 113
8.2 使用数组 114
8.2.1 System.Array类 114
8.2.2 访问数组元素 115
代码8-2 输出交错数组元素:Class 1.cs 116
代码8-3 使用GetValue输出二维数组元素示例:Class 1.cs 117
代码8-4 利用for语句遍历数组示例:Class 1.cs 117
8.2.3 遍历数组 117
8.2.4 同步数组 118
代码8-7 利用Sort排序数组示例:Class 1.cs 118
代码8-5 利用foreach遍历数组示例:Class 1.cs 118
代码8-6 利用lock同步数组示例:Class 1.cs 118
8.2.5 数组排序 118
代码8-8 利用Sort实现数组多关键字排序示例:Class 1.cs 119
8.2.6 查找元素 120
代码8-9 利用BinarySearch搜索数组元素示例:Class 1.cs 120
代码8-10 利用Contains判断数组是否包含某个元素示例:Class 1.cs 120
8.2.7 反转数组 121
代码8-11 利用Reverse反转数组示例:Class 1.cs 121
8.2.8 复制数组 122
代码8-12 利用Copy复制数组示例:Class 1.cs 122
8.2.9 动态创建数组 123
代码8-13 利用CopyTo复制数组示例:Class 1.cs 123
代码8-14 利用CreateInstance动态创建数组示例:Class 1.cs 123
8.2.10 综合示例 124
代码8-15 图书类Book的实现代码:Class 1.cs 125
代码8-16 按图书名显示图书实现代码:Class 1.cs 126
代码8-17 BookList类完整实现代码:Class 1.cs 126
代码8-18 Main函数:Class 1.cs 127
温故知新 128
第9章 集合 129
9.1 System.Collections命名空间 129
9.2 ArrayList类 130
9.2.2 添加元素 131
9.2.1 创建列表 131
代码9-2 向ArrayList中插入元素示例:Class 1.cs 132
9.2.3 插入元素 132
代码9-1 向ArrayList中添加元素示例:Class 1.cs 132
9.2.4 删除元素 133
代码9-3 从ArrayList中删除元素示例:Class 1.cs 133
9.2.5 简单排序 133
代码9-4 使用Sort方法对列表排序示例:Class 1.cs 134
9.2.6 复杂排序 134
代码9-5 使用Compare方法实现逆比较示例:Class 1.cs 134
代码9-6 使用BinarySearch方法查找元素示例:Class 1.cs 135
9.2.7 查找元素 135
代码9-7 使用foreach遍历列表示例:Class 1.cs 136
代码9-8 使用GetEnumerator遍历列表示例:Class 1.cs 136
9.2.8 遍历列表 136
9.3.1 创建队列 137
9.3 Queue类 137
9.3.2 元素入队 138
代码9-9 使用Enqueue元素入队示例:Class 1.cs 138
9.3.3 元素出队 138
代码9-10 使用Dequeue元素出队示例:Class 1.cs 139
9.4 Stack类 139
9.4.1 创建堆栈 139
9.4.2 元素入栈 140
代码9-11 使用Push元素入栈示例:Class 1.cs 140
9.4.3 元素出栈 140
代码9-12 使用Pop元素出栈示例:Class 1.cs 140
9.5 Hashtable类和SortedList类 141
9.5.1 Hashtable 141
9.5.2 构造普通散列表 142
代码9-13 使用Hashtable对象实现散列表示例:Class 1.cs 142
代码9-14 使用Hashtable对象实现散列表示例:Class 1.cs 143
代码9-15 搜索散列表示例:Class 1.cs 144
9.5.3 SortedList 144
9.5.4 搜索排序散列表 144
代码9-16 搜索散列表调用示例:Class 1.cs 146
温故知新 147
10.1.1 数据访问技术 149
第10章 数据操作 149
10.1 ADO.NET概述 149
10.1.2 System.Data命名空间 150
10.2 连接数据库 151
10.2.1 SqlConnection类 151
10.2.2 设置连接参数 152
10.2.3 创建SQL Server连接 152
代码10-1 创建SQL Server连接示例:Class 1.cs 153
代码10-2 关闭SQL Server连接示例:Class 1.cs 153
10.2.4 断开SQL Server连接 153
10.2.5 管理其他数据源连接 153
10.3 与数据库交互 154
10.3.1 使用SqlCommand提交增删改命令 154
代码10-3 使用SqlCommand对象修改数据示例:Class 1.cs 155
10.3.2 使用SqlCommand获取查询命令 155
代码10-4 使用SqlCommand对象查询数据示例:Class 1.cs 156
10.3.3 使用DataAdapter提交查询命令 156
代码10-5 使用SqlDataAdapter对象提交查询示例:Class 1.cs 157
10.4.1 了解数据集 157
10.4 管理内存数据 157
10.4.2 使用DataTable实现内存表 158
代码10-6 构造DataTable对象示例:Class 1.cs 160
代码10-7 输出DataTable对象中的数据示例:Class 1.cs 161
10.4.3 使用DataSet管理数据 162
代码10-8 使用DataSet管理内存数据示例:Class 1.cs 163
10.4.4 使用DataReader获取只读数据 164
代码10-9 输出DataSet中的DataTable示例:Class 1.cs 164
代码10-10 使用SqlDataReader查询数据示例:Class 1.cs 165
10.4.5 比较DataSet和DataReader 166
10.5.1 使用File对象操作文件 166
10.5 文件操作 166
代码10-11 使用File对象创建文件示例:Class 1.cs 167
代码10-12 使用File对象拷贝文件示例:Class 1.cs 167
10.5.2 使用StreamWriter写入文件 168
代码10-13 使用File对象移动文件示例:Class 1.cs 168
代码10-14 使用File对象删除文件示例:Class 1.cs 168
10.5.3 使用SteamReader读取文件 169
代码10-15 使用StreamWriter对象写文件示例:Class 1.cs 169
代码10-16 使用StreamReader对象读文件示例:Class 1.cs 170
温故知新 171
11.1.1 理解XML 173
第11章 XML编程 173
代码11-1 XML通讯录示例:\TestDocs\test.xml 173
11.1 .NET框架中的XML 173
11.1.2 XML文档对象模型(DOM) 174
11.1.3 System.Xml命名空间 175
代码11-2 使用XmlDocument对象读取XML示例:Class 1.cs 176
11.2 读取XML文档 176
11.2.1 使用XmlDocument读取XML 176
11.2.2 使用XmlReader读取XML 176
代码11-3 使用XmlTextReader对象读取XML示例:Class 1.cs 178
11.2.3 使用XmlNode读取节点 179
代码11-4 使用XmlDocument对象读取XML示例:Class 1.cs 181
11.3 使用XPath检索XML 181
11.3.1 基本XPath表达式 182
11.3.2 限定检索范围 182
11.3.3 使用函数设置检索条件 183
11.3.4 使用运算符设置检索条件 184
11.3.5 使用通配符模糊匹配 184
11.3.6 综合示例 185
11.4.1 创建新DOM节点 186
11.4 修改XML文档 186
11.4.2 为DOM节点创建属性 187
代码11-5 使用xpath插入XML节点示例:Class 1.cs 187
代码11-6 为DOM节点创建属性示例:Class 1.cs 187
代码11-7 修改XML节点值示例:Class 1.cs 188
11.4.3 修改DOM节点 188
代码11-8 删除XML节点值示例:Class 1.cs 189
11.4.4 删除DOM节点 189
11.5.1 使用DataSet加载XML数据 190
代码11-9 将DOM写入XML文档示例:Class 1.cs 190
代码11-10 将XML文档加载到DataSet示例:Class 1.cs 190
11.4.5 将DOM树写入XML文档 190
11.5 集成DataSet 190
11.5.2 使用XmlDataDocument加载关系数据 192
代码11-11 用XML加载关系数据表示例:Class 1.cs 192
温故知新 193
第3篇 开发网络程序 197
12.1 什么是ASP.NET 197
第12章 ASP.NET概述 197
12.1.1 页面从静态到动态 197
12.1.2 ASP.NET的诞生 199
12.1.3 ASP.NET能做什么 199
12.1.4 IIS管理ASPX页面 200
12.1.5 ASP.NET的优点 201
12.2 ASP.NET语法 202
12.2.1 剖析ASPX页面 202
12.2.2 使用〈%〉嵌入代码 202
代码12-1 使用〈%〉嵌入C#代码示例:Tag1 203
12.2.3 使用〈Script〉...〈/Script〉嵌入代码 204
代码12-2 使用〈Script〉嵌入C#代码示例:Tag2 204
代码12-3 使用控件示例:Example_Controls 206
12.2.4 使用Server控件 206
12.2.5 使用〈%--注释--%〉 207
12.2.6 ASP.NET 2.0新特性 207
12.2.8 使用〈%@Import%〉引入类库 208
12.2.7 用〈%@Page...%〉设置页面属性 208
12.3.2 使用〈%@CodeFile%〉绑定代码 209
代码12-4 ASPX页面的结构示例:HelloWorld_ASPNET 209
12.3 代码绑定技术 209
12.3.1 分离显示功能和逻辑功能 209
代码12-5 CS代码文件示例:HelloWorld_ASPNET 210
12.3.3 控件事件接收用户输入 211
温故知新 212
第13章 ASP.NET核心对象 215
13.1 Page类 215
13.1.1 Page类概述 216
13.1.2 重定位页面 217
13.2.1 向浏览器输出信息 219
13.2 ASP.NET核心对象 219
13.2.2 获取用户输入 220
13.2.3 获取服务器信息 223
13.3 共享数据 225
13.3.1 在程序级共享数据 225
13.3.2 在用户级共享数据 226
13.4 综合示例 228
13.4.1 输出文件内容 228
13.4.2 使用Global.asax 228
代码13-1 使用Global类成员示例 229
13.4.3 验证用户身份 230
温故知新 231
14.1 HtmlControls概述 233
第14章 HTML服务器控件 233
14.2 输入控件:HtmlInput 235
14.2.1 按钮:HtmlInputButton 235
14.2.2 单行文本框:HtmlInputText 237
14.2.3 多行文本框:HtmlTextArea 239
14.2.4 隐藏文本框:HtmlInputHidden 240
代码14-2 HtmlInputHidden控件示例:Button2_ServerClick方法 241
代码14-1 HtmlInputHidden控件示例:Button1_ServerClick方法 241
14.2.5 文件框:HtmlInputFile 241
14.2.6 复选框:HtmlInputCheckBox 243
代码14-3 HtmlInputFile控件示例:Button1_ServerClick方法 243
代码14-4 HtmlInputCheckBox控件示例:Button1_ServerClick方法 245
14.2.7 单选框:HtmlInputRadioButton 245
14.3.1 窗体:HtmlForm 246
14.3 容器控件:HtmlContainer 246
14.3.2 表格:HtmlTable 247
代码14-5 HtmlTable控件示例:Table1 249
14.3.3 列表框/下拉框控件:HtmlSelect 250
代码14-6 HtmlSelect控件示例:Button1_ServerClick方法 252
14.4 图像控件:HtmlImage 253
温故知新 255
代码14-7 HtmlImage控件示例:Button1_ServerClick方法 255
15.1 WebControls概述 257
第15章 Web服务器控件 257
15.2.1 按钮:Button 259
15.2 输入控件 259
代码15-1 Button控件Command事件示例:WebForm 1.aspx 261
代码15-2 Button控件Command事件示例:WebForm 1.aspx.cs 261
15.2.2 复选框:CheckBox 263
代码15-3 CheckBox控件示例:WebForm 1.aspx 264
代码15-4 CheckBox控件示例:WebForm 1.aspx.cs 264
15.2.3 单选框:RadioButton 265
15.2.4 超级链接:HyperLink 266
15.2.5 链接按钮:LinkButton 268
15.2.6 图像:Image 269
15.2.7 图像按钮:ImageButton 271
15.2.8 文本框:TextBox 271
15.2.9 图像地图:ImageMap 272
15.2.10 项列表:BulletedList 274
15.3 列表控件 276
15.3.1 下拉框:DropDownList 277
15.3.2 列表框:ListBox 279
代码15-5 DropDownList控件示例:WebForm 1.aspx.cs 279
15.3.3 复选框列表:CheckBoxList 281
代码15-6 ListBox控件示例:WebForm 1.aspx.cs 281
代码15-7 CheckBoxList控件示例:WebForm 1.aspx.cs 283
代码15-8 RadioButtonList控件示例:WebForm 1.aspx.cs 284
15.3.4 单选框列表:RadioButtonList 284
15.4.1 面板:Panel 285
15.4 容器控件 285
代码15-9 Panel控件示例:WebForm 1.aspx.cs 286
15.4.2 表格:Table 287
代码15-10 Table控件示例:WebForm 1.aspx.cs 289
代码15-11 Table控件示例:WebForm 1.aspx.cs 290
15.5 其他控件 291
15.5.1 广告栏控件:AdRotator 291
代码15-12 Table控件示例:WebForm 1.aspx.cs 291
代码15-13 AdRotator控件示例:adXm 1.xml 292
15.5.2 日历控件:Calendar 293
代码15-14 Calendar控件示例:WebForm 1.aspx.cs 295
15.6 用户控件 296
15.6.1 什么是用户控件 296
15.6.2 创建用户控件 296
15.6.3 定义用户控件属性 298
15.6.4 处理用户控件事件 299
温故知新 300
16.1 数据绑定概述 301
第16章 数据绑定技术 301
16.2 列表控件 302
16.2.1 绑定DataSet到DropDownList 302
代码16-1 DropDownList数据绑定:InitData@WebForm 1.aspx.cs 303
代码16-2 DropDownList数据绑定:Page_Load@WebForm 1.aspx.cs 304
16.2.2 绑定DataReader到ListBox 304
代码16-3 ListBox数据绑定:InitData@WebForm 1.aspx.cs 305
16.2.3 绑定DataTable到CheckBoxList 306
16.2.4 绑定HashTable到RadioButtonList 307
代码16-4 CheckBoxList数据绑定:InitData@WebForrn 1.aspx.cs 307
代码16-5 RadioButtonList数据绑定:GetHashTable@WebForm 1.aspx.cs 308
代码16-6 CheckBoxList数据绑定:InitData@WebForm 1.aspx.cs 309
16.3 网格视图:GridView 310
16.3.1 比较DataGrid和GridView 310
16.3.2 GridView概述 310
16.3.3 用GridView自动显示数据 313
16.3.4 用GridView定制显示数据 314
16.3.5 在GridView中修改、删除、选择数据 315
代码16-7 GridView数据绑定:WebForm 1.aspx 315
16.3.6 查看GridView详细数据 317
代码16-8 GridView:InitData@DetailInfo.aspx.cs 319
代码16-9 GridView:Page_Load@DetailInfo.aspx.cs 320
16.3.7 在GridView中分页浏览数据和排序数据 320
16.3.8 GridView和DetailsView实现主/详细视图 321
16.4.1 单个记录显示控件:FormView 323
16.4 其他数据绑定控件 323
16.4.2 数据列表:DataList 326
代码16-10 DataList示例:WebForm 1.aspx 329
16.4.3 循环控件:Repeater 330
代码16-11 Repeater示例:ItemCommand@WebForm 1.aspx.cs 331
温故知新 332
第17章 安全和验证策略 333
17.1 Web安全性概述 333
17.2 IIS安全机制 334
17.2.1 IIS用户验证机制 334
17.2.2 限制匿名用户 336
17.2.3 控制来访IP地址 337
17.2.4 使用SSL加密传递信息 338
17.3 ASP.NET验证控件 340
17.3.1 必填验证控件:RequiredFieldValidator 340
17.3.2 比较验证控件:CompareValidator 341
代码17-1 必填验证控件定义:WebForm 1.aspx 341
代码17-3 常数比较示例:WebForm 1.aspx 344
代码17-2 数据类型比较示例:WebForm 1.aspx 344
17.3.3 范围验证控件:RangeValidator 345
代码17-4 与控件比较示例:WebForm 1.aspx 345
17.3.4 正则表达式验证控件:RegularExpressionValidator 347
代码17-5 范围验证控件定义:WebForm 1.aspx 347
代码17-6 正则表达式验证控件定义:WebForm 1.aspx 349
17.3.5 自定义验证控件:CustomValidator 349
代码17-7 验证输入框示例:WebForm 1.aspx 350
代码17-8 验证输入框示例:WebForm 1.aspx.cs 351
代码17-9 验证单选框示例:WebForm 1.aspx.cs 352
代码17-10 验证单选框示例:WebForm 1.aspx.cs 352
17.3.6 综合示例:用户注册页面 353
温故知新 353
第18章 Web服务简述 355
18.1 Web服务概述 355
18.1.2 Web服务基础结构 356
18.1.1 Web服务简介 356
18.2 创建和使用Web服务 357
18.2.1 创建Web服务 358
代码18-1 Web服务类定义和实现:Service 1.asmx.cs 358
代码18-2 为Web服务类HelloWorld指定特性:HelloWorld.asmx.cs 359
18.2.2 创建Web服务类 359
18.2.3 创建Web服务方法 360
代码18-3 实现SayHello方法:HelloWorld.asmx.cs 361
代码18-4 实现Add方法:HelloWorld.asmx.cs 361
18.2.5 测试Web服务 362
18.2.4 部署Web服务 362
代码18-5 CallWebServiceTest页面HTML:WebForm 1.aspx 364
18.2.6 使用Web服务构造ASP.NET Web应用 364
代码18-6 调用Web服务中的SayHello方法:WebForm 1.aspx.cs 365
代码18-7 调用Web服务中的Add方法:WebForm 1.aspx.cs 365
18.3 使用ASP.NET核心对象 366
18.3.2 使用Application对象保存数据 367
18.3.1 使用Session对象保存数据 367
18.3.4 访问Request对象 368
代码18-8 Web服务中获取浏览器信息:WebForm 1.aspx.cs 368
18.3.3 访问Server对象 368
18.3.5 访问Response对象 369
代码18-9 Web服务中记录访问日志:WebForm 1.aspx.cs 369
温故知新 369
19.1 C#项目开发规范 373
第4篇 综合实例 373
19.1.1 规范化命名 373
第19章 C#编程规范 373
代码19-1 类命名示例 374
代码19-3 属性命名示例 375
代码19-2 私有成员命名示例 375
代码19-4 方法命名示例 376
代码19-6 接口命名示例 376
代码19-5 方法参数命名示例 376
19.1.2 规范化大括号和代码缩进 377
19.1.3 规范化小括号使用 377
代码19-7 代码文件级注释示例 378
19.1.4 规范化注释 378
代码19-9 代码功能块级注释示例 379
代码19-8 代码函数级注释示例 379
代码19-10 代码行级注释示例 380
19.1.6 实施标准 381
19.2.1 Web系统的三层结构 381
19.1.5 管理文档 381
19.2 Web系统的逻辑结构 381
19.2.2 示例NorthWind的整体架构 382
19.2.3 数据访问层 383
代码19-11 Database类实现:DataAccessLayer\Database.cs 384
19.2.4 业务逻辑层 387
代码19-12 Category类实现:BusinessLogicLayer\Category.cs 387
代码19-13 “查询”按钮单击事件:DataAccessLayer\Database.cs 389
19.2.5 页面显示层 389
温故知新 390
第20章 多用户聊天室 391
20.2.1 用户登录 391
20.1 系统目标 391
20.2 系统预览 391
20.2.3 浏览信息 392
20.2.2 发表信息 392
20.2.4 注销身份 392
20.3 数据库设计 393
20.3.1 设计数据库 393
20.2.5 工程文件一览 393
20.4.1 配置数据库连接 394
20.3.2 实现数据库 394
20.4 数据访问层 394
20.4.2 Database类成员一览 395
20.4.3 实现Database类 395
代码20-1 Database构造函数:\DataAccessLayer\Database.cs 395
代码20-3 Database.Dispose方法:\DataAccessLayer\Database.cs 396
代码20-2 Database析构函数:\DataAccessLayer\Database.cs 396
代码20-5 Database.Close方法:\DataAccessLayer\Database.cs 397
代码20-6 Database.ExecuteSQL方法:\DataAccessLayer\Database.cs 397
代码20-4 Database.Open方法:\DataAccessLayer\Database.cs 397
代码20-8 Database.GetDataRow方法:\DataAccessLayer\Database.cs 398
代码20-7 Database.GetDataSet方法:\DataAccessLayer\Database.cs 398
20.5.1 用户类User 399
20.5 业务逻辑层 399
代码20-9 User.LoadData方法:\BussinessLogicLayer\User.cs 400
代码20-10 User.Add方法:\BussinessLogicLayer\User.cs 401
20.5.2 消息类Message 401
代码20-11 Message.Add方法:\BussinessLogicLayer\Message.cs 402
代码20-12 Message.LoadTop10方法:\BussinessLogicLayer\Message.cs 402
20.6.1 用户登录Login.aspx 403
20.6 页面显示层 403
代码20-14 登录按钮单击事件:\WebLayer\Login.aspx.cs 404
代码20-13 登录页面控件定义:\WebLayer\Login.aspx 404
20.6.2 用户发言Speak.aspx 405
代码20-15 发言页面控件定义:\WebLayer\Speak.aspx 405
代码20-17 离开按钮单击事件:\WebLayer\Speak.aspx.cs 406
代码20-16 发言按钮单击事件:\WebLayer\Speak.aspx.cs 406
代码20-18 页面加载事件:\WebLayer\ShowMessage.aspx.cs 407
代码20-19 InitData:\WebLayer\ShowMessage.aspx.cs 407
20.6.3 浏览信息ShowMessage.aspx 407
代码20-20 主页面框架:\WebLayer\Main.aspx 408
20.6.4 主页面Main.aspx 408
温故知新 409
21.1 系统目标 411
第21章 开放论坛系统 411
21.2.1 用户注册及登录 411
21.2 系统预览 411
21.2.2 浏览主题列表 412
21.2.4 修改主题信息 413
21.2.3 发表新主题 413
21.2.6 删除主题 414
21.2.5 查看主题及回复 414
21.2.7 工程文件一览 415
21.3 数据库设计 415
21.3.1 设计数据库 415
21.3.2 实现数据库 416
21.4.1 配置数据库连接 417
21.4.2 Database类成员一览 417
21.4 数据访问层 417
21.4.3 实现Database类 418
代码21-1 Database.ExecuteSQL方法:\DataAccessLayer\Database.cs 418
代码21-2 Database.GetDataReader方法:\DataAccessLayer\Database.cs 420
代码21-3 Database.Insert方法:\DataAccessLayer\Database.cs 420
代码21-4 Database.Update方法:\DataAccessLayer\Database.cs 421
21.5 数据访问接口层 422
代码21-5 ValidateDataRow_S方法:\DataAccessHelper\GetSafeData.cs 423
21.5.1 得到安全数据 423
21.5.2 得到安全SQL语句 423
21.6 业务逻辑层 424
21.6.1 用户类User 424
代码21-6 GetQuotedString方法:\DataAccessHelper\SqlStringFormat.cs 424
代码21-7 User.LoadData方法:\BussinessLogicLayer\User.cs 425
代码21-8 User.Add方法:\BussinessLogicLayer\User.cs 426
代码21-9 HasUser方法:\BussinessLogicLayer\User.cs 426
21.6.2 主题类Topic 427
代码21-10 Topic.Add方法:\BussinessLogicLayer\Topic.cs 428
代码21-11 Topic.LoadData方法:\BussinessLogicLayer\Topic.cs 428
代码21-12 Topic.LoadData方法:\BussinessLogicLayer\Topic.cs 429
代码21-13 Topic.LoadData方法:\BussinessLogicLayer\Topic.cs 429
代码21-15 Topic.QueryReplies方法:\BussinessLogicLayer\Topic.cs 430
代码21-14 Topic.QueryTopics方法:\BussinessLogicLayer\Topic.cs 430
21.6.3 回复类Reply 431
代码21-16 Reply.Add方法:\BussinessLogicLayer\Topic.cs 431
21.7 页面显示层 432
代码21-17 登录页面控件定义:\WebLayer\Login.aspx 432
21.7.1 用户登录Login.aspx 432
代码21-19 “游客”按钮单击事件:\WebLayer\Login.aspx.cs 433
代码21-18 “登录”按钮单击事件:\WebLayer\Login.aspx.cs 433
代码21-20 用户注册页面控件定义:\WebLayer\Register.aspx 434
21.7.2 用户注册Register.aspx 434
代码21-21 “是否存在”单击事件:\WebLayer\Register.aspx.cs 435
代码21-22 “注册”按钮单击事件:\WebLayer\Register.aspx.cs 436
代码21-23 浏览主题页面GridView控件:\TopicList.aspx 437
21.7.3 浏览主题列表TopicList.aspx 437
代码21-25 InitData方法:\TopicList.aspx.cs 438
代码21-26 按钮列单击事件:\TopicList.aspx.cs 438
代码21-24 页面加载事件:\TopicList.aspx.cs 438
代码21-27 修改确认:\TopicList.aspx.cs 439
代码21-28 “确定”按钮单击事件:\WebLayer\TopicAdd.aspx.cs 440
21.7.4 添加主题TopicAdd.aspx 440
代码21-29 InitData:\WebLayer\TopicUpdate.aspx.cs 441
21.7.5 修改主题TopicUpdate.aspx 441
代码21-30 “确定”按钮单击事件:\WebLayer\TopicUpdate.aspx.cs 442
21.7.6 查看主题详细内容TopicDetail.aspx 442
代码21-31 InitData方法:\WebLayer\TopicDetail.aspx.cs 443
代码21-32 InitData方法:\WebLayer\TopicDetail.aspx.cs 444
代码21-33 “确定”按钮单击事件:\WebLayer\TopicReply.aspx.cs 444
21.7.7 回复主题TopicReply.aspx 444
21.7.8 拒绝非法用户 445
代码21-34 CheckUser()方法:\WebLayer\TopicReply.aspx.cs 445
代码21-35 CheckUser()方法:\WebLayer\TopicReply.aspx.cs 446
温故知新 446
第22章 电子商务系统 447
22.1 系统目标 447
22.1.1 用户行为分析 447
22.1.2 系统目标 448
22.2 系统预览 448
22.2.1 浏览、查询图书 448
22.2.2 查看图书详细信息 448
22.2.4 用户登录、注册 449
22.2.3 购买图书 449
22.2.6 图书管理 450
22.2.5 购物篮管理 450
22.2.7 图书销量统计 451
22.3.1 设计数据库 452
22.2.8 工程文件一览 452
22.3 数据库设计 452
22.3.2 实现数据库 453
22.4 数据访问层 454
22.5 数据访问接口层 455
22.4.2 数据库类实现 455
22.4.1 配置数据库连接 455
22.5.1 获取安全数据 456
代码22-1 ValidateDataReader_S:\DataAccessHelper\GetSafeData.cs 456
代码22-2 GetQuotedString方法:\DataAccessHelper\SqlStringFormat.cs 457
22.5.2 构造SQL语句 457
22.6.2 图书类Book 459
22.6 业务逻辑层 459
22.6.1 用户类User 459
代码22-4 Book.Update方法:\BussinessLogicLayer\Book.cs 461
代码22-3 Book.Add方法:\BussinessLogicLayer\Book.cs 461
代码22-6 Book.LoadData方法:\BussinessLogicLayer\Book.cs 461
代码22-5 Book.Delete方法:\BussinessLogicLayer\Book.cs 461
代码22-7 Book.QueryBooks(Hashtable):\BussinessLogicLayer\Book.cs 462
代码22-8 Book.QueryBooks(Hashtable,string,string):\BussinessLogicLayer\Book.cs 463
代码22-9 Book.GetSaleCountByCategory方法:\Book.cs 463
代码22-10 Book.GetSaleCountByPublisher方法:\Book.cs 464
代码22-11 Book.GetSaleCountByPrice方法:\Book.cs 464
22.6.3 图书类别类Category 465
代码22-13 Category.Query方法:\BussinessLogicLayer\Category.cs 466
代码22-12 Category.LoadData方法:\BussinessLogicLayer\Category.cs 466
22.6.4 购物篮类Cart 467
代码22-14 Cart.Add方法:\BussinessLogicLayer\Cart.cs 467
代码22-16 Cart.Delete方法:\BussinessLogicLayer\Cart.cs 468
代码22-17 Cart.LoadData方法:\BussinessLogicLayer\Cart.cs 468
代码22-15 Cart.Update方法:\BussinessLogicLayer\Cart.cs 468
代码22-19 Cart.Query方法:\BussinessLogicLayer\Cart.cs 469
代码22-18 Cart.RemoveBook方法:\BussinessLogicLayer\Cart.cs 469
22.7.1 数据验证类 470
代码22-20 IsString方法:\BussinessLogicHelper\ValidateUtility.cs 470
22.7 业务逻辑接口层 470
代码22-21 BookHelper.Add:\BussinessLogicHelper\BookHelper.cs 471
22.7.2 图书接口类 471
代码22-23 控件加载事件:\UserControls\HeaderMenu.ascx.cs 474
22.8.1 系统菜单自定义控件 474
22.8 自定义控件 474
代码22-22 系统菜单控件定义:\UserControls\HeaderMenu.ascx 474
代码22-25 CheckUser方法:\UserControls\UserCheck.ascx.cs 475
22.8.2 用户验证自定义控件 475
代码22-24 “登录”/“离开”单击事件:\UserControls\HeaderMenu.ascx.cs 475
代码22-26 登录页面GridView控件定义:\WebLayer\Login.aspx 476
22.9 页面显示层 476
22.9.1 浏览、查询图书BookList.aspx 476
代码22-27 InitData()方法:\BookList.aspx 478
代码22-28 Query()方法:\BookList.aspx.cs 478
代码22-29 Page_Load()方法:\BookList.aspx.cs 479
代码22-30 “查询”按钮单击事件:\BookList.aspx.cs 479
代码22-31 ResetQueryValue方法:\BookList.aspx.cs 480
代码22-32 GetSelected方法:\BookList.aspx.cs 481
代码22-33 “放入购物篮”按钮单击事件:\BookList.aspx.cs 481
代码22-34 “删除”按钮单击事件:\BookList.aspx.cs 482
22.9.2 图书详细信息BookDetail.aspx 483
代码22-35 InitData方法:\WebLayer\BookDetail.aspx.cs 483
代码22-37 “返回”按钮单击事件:\WebLayer\BookDetail.aspx.cs 484
22.9.3 添加图书BookAdd.aspx 484
代码22-36 Page_Load事件:\WebLayer\BookDetail.aspx.cs 484
代码22-38 “提交”按钮单击事件:\WebLayer\BookAdd.aspx.cs 485
22.9.4 用户注册Register.aspx 486
代码22-39 GridView控件属性:\CartView.aspx.cs 487
22.9.5 购物篮管理CartView.aspx 487
代码22-41 DG_RowCommand方法:\CartView.aspx.cs 488
代码22-40 InitData方法:\CartView.aspx.cs 488
代码22-42 通用画图类Chart:\BusinessLayer\Chart.cs 490
22.9.6 图书销量统计BookStatistics.aspx 490
代码22-43 GetColor方法:\BusinessLayer\Chart.cs 493
代码22-44 “统计方式”下拉框事件:\WebLayer\ookStatistics.aspx.cs 493
代码22-46 DrawChartByPublisher:\WebLayer\BookStatistics.aspx.cs 494
代码22-45 DrawChartByCategory:\WebLayer\BookStatistics.aspx.cs 494
代码22-47 DrawChartByPrice方法:\WebLayer\BookStatistics.aspx.cs 495
温故知新 495
23.1 系统目标 497
23.1.2 用户行为分析 497
23.1.1 办公自动化简介 497
第23章 办公自动化系统 497
23.1.3 系统目标 498
23.2.2 修改密码 499
23.2 系统预览 499
23.2.1 登录系统 499
23.2.3 管理工作计划 500
23.2.4 管理系统用户 500
23.2.5 管理角色权限 501
23.2.6 撰写公文 502
23.2.7 审阅公文 503
23.2.8 查看系统日志 503
23.2.9 工程文件一览 504
23.3.1 总体设计 505
23.3 系统架构 505
23.3.2 系统体系结构 505
23.4.1 设计数据库 506
23.4 数据库设计 506
23.4.2 初始化数据 508
23.5.1 字符串加密类Encrypt 509
23.5 通用组件层 509
代码23-1 加密方法:\MyOA.CommonComponent\Encrypt.cs 510
代码23-2 解密方法:\MyOA.CommonComponent\Encrypt.cs 511
23.5.2 权限树类Tree 511
代码23-3 CreateTree方法:\MyOA.CommonComponent\Tree.cs 513
代码23-4 CreateSubTree方法:\MyOA.CommonComponent\Tree.cs 513
代码23-5 GetChilds方法:\MyOA.CommonComponent\Tree.cs 514
代码23-6 IsLeaf方法:\MyOA.CommonComponent\Tree.cs 515
代码23-8 GetParent方法:\MyOA.CommonComponent\Tree.cs 516
代码23-7 GetLevel方法:\MyOA.CommonComponent\Tree.cs 516
23.5.3 日志类MyEventsLog 517
代码23-9 MyEventsLog:\MyOA.CommonComponent\EventsLog.cs 519
代码23-10 数据库连接配置:\Web.config 521
23.6.1 配置数据库连接 521
23.6.2 数据库类实现 521
23.6 数据访问层 521
代码23-11 记录异常日志的Open方法:\DataAccessLayer\Database.cs 522
23.7.2 构造SQL语句 523
23.7.1 获取安全数据 523
23.7 数据访问接口层 523
代码23-12 构造条件子句:\DataAccessHelper\SqlStringConstructor.cs 524
23.8.1 用户类User 525
23.8 业务逻辑层 525
代码23-13 获取用户数据:\BussinessLogicLayer\User.cs 526
23.8.2 角色类Role 528
代码23-15 查询角色数据:\BussinessLogicLayer\Role.cs 529
代码23-14 获取角色数据:\BussinessLogicLayer\Role.cs 529
23.8.3 部门类Department 530
代码23-16 修改角色数据:\BussinessLogicLayer\Role.cs 530
代码23-18 查询部门数据:\BussinessLogicLayer\Department.cs 531
代码23-17 获取部门数据:\BussinessLogicLayer\Department.cs 531
23.8.4 工作计划类Plan 532
代码23-19 获取工作计划数据:\BussinessLogicLayer\Plan.cs 533
代码23-20 添加新的工作计划:\BussinessLogicLayer\Plan.cs 533
代码23-21 修改工作计划数据:\BussinessLogicLayer\Plan.cs 534
23.8.5 公文类File 534
代码23-22 获取公文数据:\BussinessLogicLayer\File.cs 535
代码23-24 修改公文数据:\BussinessLogicLayer\File.cs 536
代码23-23 添加新的公文:\BussinessLogicLayer\Plan.cs 536
代码23-25 查询公文数据:\BussinessLogicLayer\File.cs 537
代码23-26 删除公文数据:\BussinessLogicLayer\File.cs 538
代码23-27 获取公文状态数据:\BussinessLogicLayer\FileStatus.cs 539
23.8.6 公文状态FileStatus 539
代码23-28 查询公文状态数据:\BussinessLogicLayer\FileStatus.cs 540
23.9 业务逻辑接口层 540
23.9.2 公文接口类 541
代码23-29 安全添加公文:\BussinessLogicHelper\FileHelper.cs 541
23.9.1 数据验证类 541
23.10 自定义权限菜单数控件 542
代码23-30 菜单树控件数据加载方法:\UserControls\LeftTree.ascx.cs 543
23.11 页面显示层 544
代码23-31 用户合法性验证方法:\UserControls\LeftTree.ascx.cs 544
代码23-32 “登录”按钮单击事件:\Login.aspx.cs 544
23.11.1 登录页面Login.aspx 544
代码23-33 “登录”按钮单击事件:\Login.aspx.cs 545
23.11.2 浏览用户页面UserList.aspx 546
代码23-34 登录页面GridView控件定义:\UserList.aspx 547
代码23-35 登录页面加载事件:\UserList.aspx.cs 547
代码23-36 InitData方法:\UserList.aspx.cs 548
代码23-37 Query方法:\UserList.aspx.cs 548
代码23-38 ResetQueryValue方法:\UserList.aspx.cs 549
代码23-39 “查询”按钮单击事件:\UserList.aspx.cs 550
代码23-40 “修改”按钮单击事件:\UserList.aspx.cs 550
代码23-41 GetSelected方法:\UserList.aspx.cs 550
代码23-42 “删除”按钮单击事件:\UserList.aspx.cs 551
23.11.3 添加用户页面UserAdd.aspx 552
代码23-43 “重置密码”按钮单击事件:\UserList.aspx.cs 552
代码23-44 InitData方法:UerAdd.aspx.cs 553
代码23-45 “保存”按钮单击事件:\UerAdd.aspx.cs 554
23.11.4 修改用户页面UserUpdate.aspx 555
代码23-46 InitData方法:\UerUpdate.aspx.cs 555
代码23-47 “保存”按钮单击事件:\UerUpdate.aspx.cs 556
23.11.5 修改密码页面UserResetPwd.aspx 557
代码23-48 “保存”按钮单击事件:\UserResetPwd.aspx.cs 557
23.11.6 角色权限管理页面RoleMange.aspx 558
代码23-49 GridView定义:\RoleMange.aspx 559
代码23-50 InitData方法:\RoleMange.aspx.cs 560
代码23-51 “授权”按钮单击事件:\RoleMange.aspx.cs 562
23.11.7 工作计划页面PlanList.aspx 563
代码23-52 页面加载事件:\PlanList.aspx.cs 563
代码23-53 InitData方法:\PlanList.aspx.cs 564
代码23-54 InitData方法:\PlanList.aspx.cs 564
代码23-55 日历控件单击事件:\PlanList.aspx.cs 565
代码23-56 “添加”按钮单击事件:\PlanList.aspx.cs 565
23.11.8 公文浏览页面FileList.aspx 566
代码23-57 “修改”按钮单击事件:\PlanList.aspx.cs 566
代码23-58 公文浏览页面加载事件:\FileList.aspx.cs 567
代码23-59 公文浏览页面加载事件:\FileList.aspx.cs 567
代码23-60 Query方法:\FileList.aspx.cs 568
代码23-61 “删除”按钮单击事件:\FileList.aspx.cs 568
23.11.9 公文添加页面FileAdd.aspx 569
代码23-62 InitData方法:UerAdd.aspx.cs 570
代码23-63 “部门”下拉框选择改变事件:UerAdd.aspx.cs 570
代码23-64 “上报”按钮单击事件:FileAdd.aspx.cs 571
23.11.10 公文审阅页面FileDetail.aspx 573
代码23-65 InitData方法:FileDetail.aspx.cs 573
代码23-66 “审阅”按钮单击事件方法:FileDetail.aspx.cs 574
23.11.11 日志查看页面LogView.aspx 575
代码23-68 InitData方法:\LogView.aspx.cs 576
代码23-67 页面加载事件:\LogView.aspx.cs 576
代码23-69 Query方法:\LogView.aspx.cs 577
代码23-70 “查询”按钮单击事件:\LogView.aspx.cs 577
温故知新 578