第Ⅰ部分 引言 1
第1章 当前软件开发的问题 1
1.1 Visual Basic 6 1
1.2 Visual C++ 6 3
1.3 Visual Interdev和Active Server Pages 4
1.4 组件和部署 5
1.5 数据库操作和可伸缩性问题 6
1.5.1 ActiveX数据对象 6
1.5.2 分布式事务处理 7
1.5.3 对象池 7
1.6 小结 8
第2章 高性能的.NET体系结构 9
2.1 .NET Framework 10
2.1.1 执行 11
2.1.2 实时编译 11
2.1.3 中间语言(IL) 12
2.2 .NET运行时体系结构 13
2.2.1 .NET语言 14
2.2.2 组件 16
2.2.3 部署 17
2.2.4 分布式事务 17
2.2.5 消息队列 19
2.2.6 对象入池 19
2.3 性能和持久性 24
2.3.1 .NET中的线程 25
2.3.2 托管提供者 26
2.3.3 连接/会话入池 26
2.3.4 错误处理 27
2.4 ASP.NET体系结构 31
2.4.1 事件处理 32
2.4.2 高速缓存 32
2.5 元数据和版本 38
2.6 无用单元收集 39
2.7 小结 42
第Ⅱ部分 设计数据库和中间层组件以获得最大可伸缩性 43
第3章 开发一行业务应用程序 43
3.1 数据库类型 44
3.2 锁定类型 45
3.3 隔离级别 45
3.4 数据库模式 46
3.5 建立性能目标 47
3.6 关于可伸缩性的考虑 48
3.6.1 面向集的操作 48
3.6.2 减少数据传输 48
3.6.3 尽可能避免串行化 50
3.6.4 防止死锁 50
3.6.5 避免长期运行的操作 52
3.6.6 关系与定义关系 52
3.6.7 键 53
3.6.8 索引 54
3.6.9 JOIN 56
3.6.10 视图 57
3.6.11 查询计划 57
3.6.12 存储过程 58
3.6.13 参数化的命令 59
3.6.14 隔离OLTP和OLAP 59
3.7 小结 60
第4章 事务处理 61
4.1 事务管理 61
4.1.1 本地事务 63
4.1.2 分布式事务 66
4.1.3 存储过程 68
4.2 事务的考虑因素 69
4.2.1 数据的一致性和并发性 70
4.2.2 隔离级别 70
4.2.3 可伸缩性和性能关联 71
4.3 数据库特定的事务处理问题 74
4.3.1 Microsoft SQL Server 74
4.3.2 Oracle 74
4.3.3 DB/2 76
4.3.4 MySQL 77
4.4 小结 77
第5章 ADO.NET 78
5.1 术语的快速回顾 79
5.2 什么是ADO.NET 80
5.2.1 托管提供者 80
5.2.2 建立数据库连接 81
5.2.3 针对数据库执行命令 84
5.2.4 将数据库字段中的数据映射为数据列 91
5.2.5 创建数据表格内的列 93
5.2.6 数据关系 93
5.2.7 将数据插入表格中 94
5.2.8 数据集插入 98
5.2.9 将图像、文件或者BLOB存储在数据库中 99
5.2.10 从表格中读取图像 101
5.2.11 本地事务 101
5.3 ADO到ADO.NET再回到ADO 104
5.4 从数据表格转换为ADO 2.x记录集 107
5.5 .NET中的ADOX功能 109
5.5.1 服务器端的游标和事务处理 110
5.5.2 插入数据并且返回主键 110
5.6 数据集的可伸缩性:对于SQL和OleDb数据提供者的分析 111
5.6.1 数据读取器和数据集的可伸缩性 111
5.6.2 开放式数据库连接的影响 112
5.6.3 协同使用传统的ADO 2.x和.NET 112
5.7 数据类型 112
5.7.1 SqlTypes 113
5.7.2 OLE-DB和ODBC类型 114
5.8 小结 115
第6章 .NET组件 116
6.1 定义命名空间 116
6.2 创建程序集 117
6.2.1 程序集位置 118
6.2.2 程序集版本控制 119
6.2.3 程序集分布 119
6.3 清单 120
6.4 创建.NET组件 123
6.4.1 WinForm组件 123
6.4.2 Web组件 127
6.5 在应用程序中使用组件 129
6.5.1 WinForm应用程序 130
6.5.2 IIS应用程序 133
6.6 事务和性能 134
6.6.1 基于连接的事务 135
6.6.2 分布式事务 136
6.7 小结 137
第7章 与COM组件集成 138
7.1 COM和.NET互操作 138
7.1.1 通用的原则 138
7.1.2 范例中的差异 139
7.2 从.NET中调用COM 139
7.2.1 C#和Visual Basic .NET 139
7.2.2 ASP.NET 146
7.2.3 性能考虑因素 147
7.3 从COM中调用.NET组件 147
7.3.1 编写互操作的.NET组件 147
7.3.2 部署和注册 152
7.4 小结 154
第8章 线程处理和Windows服务 155
8.1 定义线程处理 155
8.2 了解进行线程处理的时机 156
8.2.1 算法与业务规则 156
8.2.2 线程处理的优势和限制 157
8.3 创建线程 157
8.3.1 System.Threading 158
8.3.2 从Win32到.NET 158
8.4 多线程的算法 160
8.5 使用Windows服务 165
8.5.1 服务背景 166
8.5.2 创建Windows服务 167
8.5.3 事件和服务 169
8.5.4 要监控的事件 171
8.5.5 将自定义命令发送到Windows服务 179
8.6 了解其他命名空间 181
8.6.1 FileSytemWatcher 181
8.6.2 网络请求 182
8.7 小结 183
第9章 消息排队集成 184
9.1 消息排队基础 184
9.1.1 同步操作 184
9.1.2 异步操作 184
9.1.3 什么是消息和队列 185
9.1.4 什么是MSMQ 185
9.1.5 发送数据 187
9.1.6 接收数据 188
9.1.7 队列 190
9.1.8 在.NET中使用MSMQ API 190
9.1.9 消息的编程API 190
9.1.10 MessageQueueAccessRights 198
9.1.11 MSMQ事务 199
9.2 小结 200
第Ⅲ部分 特定数据库伸缩问题 201
第10章 SQL Server 201
10.1 连接到SQL Server 201
10.2 SQL Data Provider 202
10.2.1 COM+和SQL Data Provider 203
10.2.2 利用SQL Data Provider连接入池 203
10.2.3 SQL Client事务 206
10.2.4 SQL客户程序代码示例 207
10.3 OLE-DB Data Provider 210
10.3.1 OLE-DB事务 212
10.3.2 OLE-DB客户代码示例 212
10.4 ODBC Data Provider 215
10.4.1 早期的API 216
10.4.2 ODBC Data Provider事务 216
10.5 .NET中的Classic ADO 2.x 220
10.5.1 无事务 220
10.5.2 手动事务 221
10.5.3 COM+分布式事务 222
10.6 其他通信方法 222
10.7 利用SQL Server的XML访问SQL 223
10.7.1 SqlXmlCommand方法 224
10.7.2 SqlXmlCommand属性 224
10.7.3 SqlXmlParameter 225
10.7.4 SqlXmlAdapter 225
10.8 SQL Server体系结构 225
10.8.1 网络/通信库 225
10.8.2 SQL Server引擎 226
10.8.3 锁定提示 228
10.8.4 锁定超时选项和死锁 229
10.8.5 主键信息 229
10.9 综合比较 235
10.9.1 关于测试应用程序 236
10.9.2 综合性能分析 236
10.10 索引优化 237
10.10.1 SQL Profiler 237
10.10.2 Index Tuning Wizard(ITW) 238
10.11 小结 240
第11章 Oracle 241
11.1 Oracle数据库平台 241
11.1.1 Oracle数据库企业版 241
11.1.2 Oracle数据库标准版 241
11.1.3 Oracle数据库个人版 242
11.1.4 Oracle数据库Lite版 242
11.2 Oracle数据库中的功能和术语 242
11.3 Oracle 9i数据库体系结构 242
11.3.1 Oracle实例 243
11.3.2 系统全局区域 243
11.3.3 后台进程 243
11.3.4 共享服务器体系结构 245
11.3.5 专用服务器配置 245
11.4 访问Oracle数据库 245
11.4.1 Oracle通信基础 246
11.4.2 用于Oracle的Microsoft OLE-DB Provider 247
11.4.3 用于Oracle的Microsoft ODBC Driver 248
11.4.4 Oracle OLE-DB驱动程序 249
11.4.5 Oracle ODBC驱动程序 251
11.4.6 主键 263
11.5 性能优化 271
11.5.1 调整SQL 272
11.5.2 索引和索引策略 279
11.5.3 实例和空间管理 281
11.6 小结 282
第12章 DB/2通用数据库 283
12.1 DB/2平台 283
12.1.1 用于Windows NT的DB/2 284
12.1.2 用于iSeries 400(AS/400)的DB/2 287
12.2 连接选项 290
12.2.1 IBM DB/2 OLE-DB驱动程序 290
12.2.2 IBM DB/2 ODBC驱动程序 292
12.3 使用ADO.NET和ADO 297
12.3.1 ADO.NET性能 297
12.3.2 ADO性能 298
12.4 连接类型对应用程序的影响 298
12.4.1 WinForm应用程序 298
12.4.2 N层WinForm应用程序 305
12.5 小结 313
第13章 MySQL 314
13.1 连接选项 315
13.1.1 MyODBC驱动程序 315
13.1.2 MyOLE-DB驱动程序 317
13.1.3 MySQL API 320
13.2 MySQL表类型 322
13.2.1 MyISAM表类型 323
13.2.2 Merger表类型 324
13.2.3 Heap表类型 324
13.2.4 InnoDB表类型 324
13.2.5 BDB 326
13.2.6 InnoDB和MyISAM表类型的比较 326
13.3 MySQL服务器状态 337
13.4 MySQL SQL的独特方面 339
13.4.1 MySQL没有的通用功能 339
13.4.2 在MySQL中的扩展 339
13.5 驱动程序对应用程序的作用 340
13.6 使用ADO 343
13.6.1 ADO.NET性能 343
13.6.2 ADO性能 346
13.7 处理MySQL瓶颈 346
13.7.1 表级锁定的影响 346
13.7.2 受限的事务支持的影响 347
13.7.3 分布式事务的影响 347
13.7.4 对象入池的影响 347
13.8 性能 347
13.9 小结 348
附录A Timesheet应用程序概述 350
A.1 底层数据库表 350
A.2 数据条目部分 351
A.3 雇员类型 352
A.4 Admin部分 352
A.5 小结 353
附录B 编程和开发命名标准 354
B.1 通用命名约定 354
B.2 数据库对象 356
B.3 组件和方法调用 356
B.4 数据库访问 357
B.5 命名空间的命名标准 357
B.6 Microsoft的命名规则 358
B.7 小结 358
附录C 资源 359
C.1 Scalability.NET 359
C.2 .NET资源 359
C.3 ASP.NET 359
C.4 C 360
C.5 Visual Basic .NET 360
C.6 SQL Server 360
C.7 Oracle资源 360
C.8 DB/2资源 361
C.9 MySQL资源 361