第1章 开发多层客户/服务器应用程序 1
1.1 应用程序体系结构 1
1.1.1 桌面应用程序体系结构概述 1
1.1.2 2层应用程序体系结构概述 1
1.1.3 3层应用程序体系结构概述 2
1.1.4 n层应用程序体系结构概述 3
1.1.5 关于2层客户/服务器应用程序 4
1.1.6 2层客户/服务器应用程序的物理部署 5
1.1.7 关于3层客户/服务器应用程序 6
1.1.8 3层客户/服务器应用程序的物理部署 7
1.1.9 关于对象模型 7
1.1.10 建立一套应用程序 9
1.1.11 明天的老系统 12
1.2.1 配置一个3层客户/服务器应用程序 13
1.2 配置样例应用程序 13
1.2.2 配置Mom-n-Pop Video Store应用程序 14
第2章 在一个对象模型中运用COM对象 20
2.1 关于对象 20
2.1.1 关于Visual Basic编程语言 20
2.1.2 对象与编程 21
2.2 了解对象模型 24
2.2.1 Mom-n-Pop Video Store对象模型 25
2.3 状态对象和事务处理 37
2.3.1 基于商业的设计 39
2.3.2 状态和事务处理的候选解决方案 39
2.4 标准COM类型 40
2.4.1 Unicode和BSTR字符串 42
2.4.2 与BSTR类型相关的Win32函数 45
2.4.3 使用CURRENCY类型 46
2.4.4 COM数据类型转换函数 46
2.4.5 使用Variant类型 47
2.4.6 使用安全数组工作 49
2.5 在一个COM应用程序中查错 52
2.6 遍历——使用一个对象模型 55
2.6.1 使用App Wizard来创建对话框应用程序 56
2.6.2 加入代码初始化COM 57
2.6.3 引入类型库 59
2.6.4 添加一个列表框来显示成员 60
2.6.5 在列表框中显示成员 61
2.6.6 对UI代码的进一步分析 63
第3章 使用OLE DB访问数据库 66
3.1 什么是OLE DB 66
3.1.1 关于示例程序 66
3.2.1 关于第一个OLE DB示例应用程序 67
3.2.2 初始化数据源 67
3.2 使用OLE DB接口 67
3.2.3 创建数据源上的一个会话 70
3.2.4 命令对象 72
3.2.5 关于OLE DB行集对象 74
3.2.6 关于OLE DB访问者 77
3.2.7 包含第一个例子中的注释 82
3.2.8 使用OLE DB的参数化查询 82
3.2.9 关于第二个OLE DB示例应用程序 83
3.2.10 创建一个参数化的命令 83
3.2.11 绑定参数 83
3.2.12 用参数执行一个命令 87
3.2.13 使用参数化命令来修改数据 88
3.2.14 使用OLE DB接口执行事务处理 92
3.2.15 关于ITransactionLocal接口 92
3.2.16 隔离层和Start Transaction方法 93
3.2.19 OLE DB事务处理示范程序 95
3.2.17 Zombie行集 95
3.2.18 事务处理保持 95
3.3 使用OLE DB服务组件 98
3.3.1 使用MDAC来打开一个数据源 98
3.3.2 使用一个连接字符串 99
3.4 使用OLE DB模板 101
3.4.1 引入OLE DB模板类 102
3.4.2 CDataSource和CDBPropSet类 102
3.4.3 CSession类 102
3.4.4 CCommand和CAccessor模板类 103
3.4.5 使用CCommand去打开一个行集 105
3.4.6 使用OLE DB模板取回行 105
3.4.7 关闭数据源、会话和行集 106
3.4.8 使用ATL Object Wizard来创建一个CRowset类 106
3.4.9 使用OLE DB模板的参数化查询 106
3.4.10 使用OLE DB模板执行一个参数化查询 107
3.4.11 提供参数绑定信息 108
3.4.12 提供参数值 109
3.4.13 使用OLE DB模板修改数据 109
3.4.14 事务处理和OLE DB模板类 110
3.4.15 服务组件和OLE DB模板 111
3.4.16 连接字符串和OLE DB模板 111
3.5 ADO记录集和OLE DB行集等价类 112
3.5.1 将一个行集转换为一个记录集 113
3.5.2 将一个记录集转换为一个行集 116
3.6 使用Data Link API 117
3.6.1 数据链接属性对话框 117
3.7 使用COleDBRecordView类 119
3.7.1 一个简单的COleDBRecordView应用程序 119
3.7.2 产生一个简单COleDBRecordView应用程序 121
3.7.3 由App Wizard产生的用作OLE DB记录视图的类 123
3.7.4 为数据库列提供控件 126
3.7.5 加入一个Update Now按钮 128
3.8 一个有所有特征的OLE DB记录视图应用程序 130
3.8.1 使用多访问器 131
3.8.2 使用COleDBRecordView增加新记录 133
3.8.3 使用COleDBRecordView删除一个记录 133
3.8.4 使用书签浏览行集 134
第4章 使用ADO访问数据库 136
4.1 ADO和OLE DB 136
4.1.1 ADO和OLE DB所解决的问题 136
4.1.2 ADO还是OLE DB 136
4.2 ADO对象模型 138
4.3 ADO Connection对象 138
4.3.1 ConnectionString属性 139
4.3.3 引入ADO类型库 140
4.3.2 关于第一个ADO演示程序 140
4.3.4 使用ADO连接数据库 141
4.3.5 Connection对象的Mode属性 143
4.3.6 举例:使用ADO连接数据库 143
4.4 ADO Recordset对象 143
4.4.1 关于ADO Recordset光标 145
4.4.2 使用ADO打开一个记录集 145
4.4.3 例子:打开一个记录集 147
4.4.4 在记录集中访问字段 147
4.4.5 使用移动方法在记录集中滚动 148
4.4.6 记录集的重新查询和再同步 150
4.5 使用ADO记录集绑定 151
4.5.1 使用CADORecordBinding类 151
4.5.2 向ADO提供绑定信息 153
4.5.3 从被绑定的记录集中取回数据 154
4.6 使用ADO Command对象 155
4.6.1 构造一个SQL SELECT语句 156
4.6.2 ADO Command对象和参数化查询 157
4.6.3 在一个命令中使用多个ADO参数 159
4.6.4 用GetRows方法一次取回多行数据 160
4.7 用ADO进行事务处理 162
4.8 更新记录集中的记录 162
4.9 Mom-n-Pop Video Store案例分析 163
4.9.1 从数据库中取出过期罚款数据 163
4.9.2 根据姓氏查找成员 163
4.10 调用存储过程 164
第5章 实现一个对象模型 166
5.1 COM服务器回顾 166
5.1.1 进程内和进程外的COM服务器 166
5.2 建立一个进程内COM服务器项目 167
5.2.1 有用户界面的测试项目 168
5.3 实现一个简单的对象模型 169
5.3.1 第一个简单对象模型的实现目标 170
5.3.2 创建ATL项目 170
5.3.3 启动ATL跟踪信息 171
5.3.4 创建ATL对象 173
5.3.5 分析ATL Wizard产生的代码 174
5.3.6 顶层对象和Appobject属性 177
5.3.7 不可创建的公共COM类 179
5.3.8 参与实现集合的对象 180
5.3.9 集合的类型 180
5.3.10 实现Category类 181
5.3.11 实现Categories集合 184
5.3.13 增加一个集合访问属性 188
5.3.12 指定一个默认属性 188
5.3.14 用Visual Basic测试对象模型 190
5.3.15 为类型库提供一个友好描述 190
5.3.16 创建和使用COM枚举器 192
5.3.17 保持集合和ATL通用枚举器 196
5.3.18 使用ATL通用枚举器 199
5.3.19 用CComEnum支持空集合 201
5.3.20 用查询结果建立集合 203
5.3.21 访问数据库创建集合 205
5.3.22 为Item方法提供异构参数 208
5.3.23 支持IsupportErrorInfo接口 211
5.3.24 3层体系结构的对象模型 213
5.3.25 Mom-n-Pop对象模型案例分析 213
5.3.26 背景 213
5.3.27 访问Categories集合 214
第6章 DCOM 219
6.1 关于DCOM 219
6.1.1 DCOM提供的服务 219
6.1.2 OSF/DCE和远程过程调用 220
6.1.3 在使用DCOM之前 221
6.2 DCOM纵览 221
6.2.1 服务器端本地服务器的COM注册表入口 221
6.2.2 客户端远程服务器DCOM注册表入口 222
6.2.3 使用代理(surrogate)容纳远程进程内服务器 223
6.2.4 创建一个DCOM服务器项目 224
6.2.5 实现和创建服务器 224
6.2.6 实现客户测试程序:用户界面 227
6.2.7 远程运行服务器 229
6.2.8 权限错误 231
6.3.1 使用错误查找实用工具 232
6.3.2 使用事件查看器 232
6.3 解决与DCOM相关的问题 232
6.2.9 使用CoCreateInstanceEx 232
第7章 微软事务处理服务器 234
7.1 关于MTS 234
7.1.1 MTS运行时期环境 234
7.1.2 关于MTS资源管理器(explorer)实用工具 234
7.1.3 MTS包和组件 235
7.1.4 创建一个MTS包 236
7.1.5 把MTS组件安装到包之中 236
7.1.6 运行和监控MTS组件 237
7.1.7 使用按需激活 239
7.2 MTS API 239
7.2.1 关于IObjectContext接口 240
7.2.3 使用IObjectContext接口 241
7.2.2 连接池 241
7.2.4 MTS组件的限制 244
7.2.5 MTS中的事务 245
7.2.6 MTS组件和事务的形成 246
7.2.7 MTS组件的事务属性 247
7.3 有状态的和无状态的MTS对象 248
7.3.1 伪装的2层体系结构 249
7.3.2 按需激活 249
7.3.3 实现IObjectControl接口 250
7.3.4 MTS事务支持的例子 251
7.4 调试MTS组件 258
7.5 MTS共享属性管理器 259
7.5.1 CreatePropertyGroup方法 259
7.5.2 对共享属性的线程安全的引用 260
7.5.3 共享属性管理器的例子 260
7.6 开发MTS服务器 262
7.7.1 MTSDemo4——MTS安全性的例子 263
7.7 安全性和MTS 263
7.7.2 MTS包标识——第一道防线 264
7.7.3 声明级安全——第二道防线 264
7.7.4 定义MTS组 265
7.7.5 为声明级安全启用包认证 266
7.7.6 把NT用户账号加入到MTS组中 267
7.7.7 编程级安全是怎样工作的 268
7.7.8 判断是否启用了安全保护 269
7.7.9 使用IsCallerInRole方法 269
第8章 使用MTS实现数据服务层 271
8.1 对MTS组件的要求 271
8.1.1 用MTS组件实现商业规则 271
8.1.2 存储过程的作用 271
8.1.3 集中注意商业 272
8.1.4 每层都有用 272
8.2.1 MTS组件MemberData 273
8.2 Mom-n-Pop MTS组件 273
8.2.2 MTS组件VideoData 274
8.2.3 MTS组件PointOfSale 274
8.2.4 举例:使用共享属性管理器 275
8.2.5 对象交互的情况——通过ID查找成员 277
第9章 使用Active Server Pages创建Internet界面 281
9.1 关于ASP 281
9.1.1 Mom-n-Pop Web站点 281
9.2 创建ASP 286
9.2.1 向ASP页面中增加脚本命令 286
9.2.2 ASP的内建对象 288
9.2.3 在ASP脚本中声明和使用变量 288
9.2.4 向浏览器发送内容 288
9.2.5 HTML表单和Request对象 289
9.2.6 在ASP脚本中创建对象 289
9.2.7 在ASP脚本中处理记录集 290