第1部分 ADO.NET基础 1
第1章 ADO.NET存在的原因 1
1.1 统一数据访问简史 1
1.2 为什么说ADO.NET是一个更好的数据访问层 5
1.3 初学ADO.NET 7
1.3.1 ADO.NET命名空间 8
1.3.2 ADO.NET数据结构 9
1.3.3 ADO.NET托管提供程序对象模型 13
1.4 小结 17
第2章 用ADO.NET建立连接 19
2.1 第一印象 19
2.2 连接 20
2.2.1 连接字符串 22
2.2.2 理解集成安全性 26
2.2.3 更改数据库 27
2.2.4 连接池 29
2.2.5 连接事件 34
2.2.6 连接工厂 37
2.3 获取OLE DB数据库架构信息 40
2.4 .NET错误处理 41
2.5 小结 45
第3章 操纵数据库 47
3.1 命令 47
3.1.1 创建Command对象 47
3.1.2 命令类型 48
3.2 执行命令 49
3.2.1 定义的结果集 50
3.2.2 使用参数 51
3.3 ADO.NET中的数据库事务处理 63
3.3.1 隔离级别 66
3.3.2 SQL Server事务处理保存点 67
3.3.3 COM+和企业服务 68
3.4 批处理查询 69
3.5 小结 72
第4章 读取数据 73
4.1 读取数据 73
4.2 DataReader 76
4.2.1 构造DataReader 77
4.2.2 DataReader的工作原理 78
4.2.3 从DataReader中访问数据 78
4.2.4 什么是结果集 85
4.2.5 处理多个结果集 85
4.2.6 处理DataReader元数据 86
4.3 综合运用 89
4.3.1 数据库访问 90
4.3.2 数据对象 90
4.3.3 Windows窗体代码 95
4.4 小结 96
第2部分 DataSet详述 97
第5章 构建DataSet 97
5.1 什么是DataSet 97
5.1.1 DataSet的构成 98
5.1.2 DataSet和托管提供程序 99
5.2 填充DataSet 99
5.2.1 DataAdapter简介 99
5.2.2 根据数据库来创建DataSet 100
5.2.3 根据XML来创建DataSet 106
5.2.4 以程序化方式创建一个DataSet 108
5.3 定义DataSet架构 109
5.3.1 为什么要在DataSet中使用数据库架构 109
5.3.2 用DataAdapter来推断架构 110
5.3.3 用XSD来定义DataSet架构 112
5.3.4 以程序化方式创建DataSet架构 113
5.3.5 列架构 126
5.4 小结 133
第6章 类型化DataSet 135
6.1 什么是类型化DataSet 135
6.2 生成类型化DataSet 138
6.2.1 用Visual Studio.NET创建一个类型化DataSet 139
6.2.2 用XSD.exe来创建类型化DataSet 147
6.2.3 用批注来自定义生成的代码 148
6.3 使用类型化DataSet 151
6.4 业务对象层的简化 152
6.5 小结 166
第7章 操纵DataSet 167
7.1 更改数据 167
7.1.1 添加行 167
7.1.2 删除行 169
7.1.3 读和写DataRow的值 170
7.1.4 行的版本 177
7.1.5 行的状态 179
7.2 DataSet导航 181
7.2.1 用关系来导航 181
7.2.2 DataView 184
7.3 搜索DataSet 188
7.3.1 用DataTable.Select进行搜索 188
7.3.2 用DataView进行搜索 190
7.4 合并DataSet 191
7.5 小结 193
第8章 更新数据库 195
8.1 断开式数据的麻烦 195
8.2 ADO.NET并发性 196
8.2.1 DataAdapter如何更新DataSet 196
8.2.2 实现乐观并发性 197
8.2.3 实现悲观并发性 218
8.2.4 实现破坏式并发性 223
8.3 常见的更新问题 227
8.3.1 处理含有多个表的DataSet 227
8.3.2 用本地事务处理来更新数据库 230
8.3.3 从SQL Server检索新行标识 233
8.4 小结 235
第3部分 ADO.NET实战 237
第9章 ADO.NET和XML 237
9.1 .NET和XML 237
9.2 DataSet和XML 238
9.2.1 将DataSet数据转换成XML 238
9.2.2 将DataSet另存为XML 246
9.2.3 DataSet命名空间 249
9.2.4 用XML来填充DataSet 249
9.2.5 DiffGram策略 253
9.2.6 DataSet架构 255
9.3 XmlDataDocument类 259
9.3.1 用XPath表达式来搜索DataSet 262
9.3.2 用XSLT来转换DataSet 264
9.4 小结 265
第10章 用ADO.NET进行数据绑定 267
10.1 .NET中的数据绑定 267
10.2 Windows窗体中的数据绑定 267
10.2.1 简单数据绑定 270
10.2.2 复杂绑定 271
10.2.3 DataGrid绑定 273
10.2.4 主控/详细绑定 276
10.2.5 使用CurrencyManager类 278
10.3 ASP.NET中的数据绑定 280
10.3.1 简单绑定 281
10.3.2 复杂绑定 281
10.3.3 数据控件绑定 282
10.3.4 与DataReader绑定 283
10.3.5 性能问题 284
10.4 小结 285
第11章 扩展性和性能 287
11.1 是否应该关心 287
11.1.1 设计易于扩展的系统 288
11.1.2 在系统中耦合组件 289
11.2 在ADO.NET问世之前 289
11.2.1 连接式数据的问题 289
11.2.2 扩展数据库服务器 290
11.3 ADO.NET能提供什么帮助 291
11.3.1 在Web服务器上进行数据缓存 292
11.3.2 扩展数据库数据 292
11.3.3 实战 295
11.4 DataReader是否易于扩展 296
11.5 ADO.NET的性能 296
11.5.1 与数据库交互 297
11.5.2 与DataSet交互 297
11.6 最佳实践 297
11.6.1 使用DataSet架构 298
11.6.2 使用类型化DataSet来创建业务规则层 298
11.6.3 减少到数据库的往返行程 298
11.6.4 提前和经常缓存数据 298
11.6.5 起用DBA 299
11.6.6 将开发者与数据库隔离 299
11.6.7 在ASP.NET中有限度地使用DataReader 300
11.6.8 使用连接工厂 300
11.6.9 不要硬编码连接字符串 300
11.6.10 将用户排除在数据库之外 301
11.7 小结 301
附录A ADO.NET迁移策略 303
A.1 总体规划迁移到ADO.NET 303
A.1.1 重新结构化ADO应用程序 303
A.1.2 ADO.NET不支持什么 310
A.2 ADO.NET与ADO对象的对应关系 310
A.2.1 将ADO映射到.NET数据类型 310
A.2.2 提供程序和托管提供程序 311
A.2.3 迁移连接 312
A.2.4 迁移Command对象 313
A.2.5 迁移Recordset 314
A.2.6 在ADO.NET中接受ADO Recordset 316
A.3 小结 316