第1章 ADO.NET概述 1
1.1 什么是ADO.NET 2
1.2 ADO的不足之处 2
1.3 ADO.NET中的重要对象 3
1.3.1 连接对象 3
1.3.2 非连接对象 4
1.4 .NET数据提供程序 6
1.4.1 使用ProviderBase模型 8
1.4.2 第三方.NET数据提供程序 11
1.5 System.Data.Design命名空间 12
1.6 小结 12
第2章 ADO.NET对象模型 13
2.1 本章可用作参考 13
2.2 ADO.NET鸟瞰 14
2.3 建立连接:DbConnection 14
2.4 执行命令:DbCommand和DbTransaction 16
2.5 保存非连接数据:DataSet 19
2.6 获取数据:DataReader和DataAdapter 21
2.6.1 基于连接的方式获取数据:DbDataReader 21
2.6.2 连接部分和非连接部分之间的桥梁:DbDataAdapter 22
2.7 ADO.NET中的异常 23
2.8 小结 27
第3章 ADO.NET Hello World程序 28
3.1 构建Hello World程序的数据源 28
3.2 创建数据驱动的应用程序:拖放的方法 29
3.2.1 ASP.NET 2.0中的拖放 29
3.2.2 Windows窗口应用程序中的拖放 35
3.3 混合方法:写一些代码,用一些拖放 39
3.4 数据驱动的应用程序:自己编写代码的方法 42
3.5 小结 45
第4章 连接到数据源 46
4.1 连接的能力 46
4.1.1 创建连接对象 47
4.1.2 生成提供程序特定的连接串 50
4.1.3 编写连接串的简便方法 52
4.1.4 增强连接串的安全性 54
4.2 公共行为:IDbConnection 57
4.3 公共逻辑:DbConnection 59
4.4 高要求的应用程序 59
4.5 连接池 60
4.5.1 工作原理 62
4.5.2 确定合适的池大小 63
4.5.3 崩溃的连接池 64
4.6 关闭连接:良好的应用程序设计 64
4.7 小结 65
第5章 在连接模式下获取数据 66
5.1 与数据源的通信 66
5.2 获取单个值 67
5.2.1 要用哪个数据库执行命令 67
5.2.2 要执行什么 69
5.2.3 执行命令以获取结果 70
5.3 获取结果集 71
5.4 为存储而查询结果集 76
5.5 异步查询大结果集 78
5.6 从数据库查询多个结果集 82
5.7 面向对象与关系表示 85
5.7.1 在数据库中存储对象 85
5.7.2 使用SQL查询UDT数据 90
5.7.3 以连接模式获取UDT数据 91
5.7.4 实际使用UDT 92
5.8 小结 92
第6章 DataSet 93
6.1 非连接模型的案例 93
6.2 DataSet对象模型 95
6.2.1 DataTable 96
6.2.2 DataColumn 97
6.2.3 DataRow 98
6.2.4 Constraint 99
6.2.5 设置主键:PrimaryKey属性 100
6.2.6 动态构建DataTable 100
6.2.7 DataTable的事件 103
6.2.8 DataTable事件的实际用法 104
6.3 关系数据 108
6.4 把所有内容放到一起 111
6.5 作为数据传输对象的DataSet 117
6.6 强类型DataSet:概述 122
6.6.1 XSD概要 123
6.6.2 DataSet架构 131
6.6.3 构建强类型DataSet 139
6.6.4 类型化DataSet的性能 147
6.6.5 注释类型化DataSet 147
6.7 小结 153
第7章 获取数据:DataAdapter 154
7.1 什么是DataAdaper 154
7.2 使用DataAdapter 156
7.2.1 构建数据源 156
7.2.2 查询数据表:指向并且点击 157
7.2.3 查询数据表:编写代码 160
7.2.4 填充DataSet:不止一个数据表 164
7.2.5 查询数据库架构 169
7.3 映射 175
7.3.1 使用SQL的AS关键字 175
7.3.2 ADO.NET的映射机制 177
7.4 小结 182
第8章 排序、获取和过滤 183
8.1 构建数据源 184
8.2 处理DataTable 185
8.2.1 查找行 186
8.2.2 选定多行记录 188
8.2.3 表达式:动态计算列 190
8.2.4 执行聚合计算 193
8.3 使用DataRelation对象 195
8.4 使用DataView对象 199
8.5 XML与非连接数据的交互 206
8.6 小结 209
第9章 更新数据 210
9.1 更新数据表:简单拖放方法 211
9.2 使用命令构建器对象 224
9.3 DataRow中的状态管理以及在更新数据时状态管理的使用 227
9.4 移动大量的数据:SqlBulkCopy 236
9.5 编辑非连接数据 238
9.5.1 添加新行 238
9.5.2 修改现存行记录 239
9.5.3 删除现存行记录 240
9.6 实际的例子 242
9.7 优化应用程序:GetChanges和Merge 252
9.7.1 合并情况1:相同表结构,无主键 258
9.7.2 合并情况2:相同表结构,有主键 259
9.7.3 合并情况3:公共列,无主键 261
9.7.4 合并情况4:公共列,有主键 262
9.7.5 合并情况5:完全不同的表结构 263
9.7.6 合并具有不同架构的两个DataSet/DataTable 265
9.8 使用映射名称更新记录 266
9.9 小结 273
第10章 更新数据:高级进阶 275
10.1 冲突检测和并发解决 276
10.1.1 预防冲突:交通信号灯 276
10.1.2 处理冲突:事故发生后再抢救 277
10.2 实现并发:实践所关心的内容 284
10.2.1 Null值 284
10.2.2 所影响的行数和触发器 285
10.2.3 更新多行记录 285
10.3 处理层次结构数据 286
10.3.1 插入层次结构的数据 289
10.3.2 更新层次化数据 297
10.3.3 删除层次化数据 297
10.3.4 所有的操作集中到一起:保存层次化数据 298
10.3.5 代码不能用 301
10.4 层次化更新:结论 302
10.5 小结 302
第11章 事务 304
11.1 什么是事务 305
11.1.1 ACID属性 305
11.1.2 数据库事务 306
11.1.3 事务词汇表 307
11.2 ADO.NET的事务支持 307
11.3 编写事务性数据库应用程序 310
11.3.1 实现事务 311
11.3.2 考察隔离级别的效果 317
11.3.3 MARS 324
11.3.4 MARS和事务 327
11.4 单数据库的高级技术 331
11.4.1 保存点 331
11.4.2 嵌套事务 334
11.4.3 与DataSet和DataAdapter一起使用事务 334
11.5 分布式事务 337
11.5.1 分布式事务中的关键方:RM和DTC 337
11.5.2 两阶段提交 338
11.5.3 实现分布式事务:.NET 1.1的方法 338
11.5.4 实现分布式事务:.NET 2.0的方法 342
11.5.5 可提升登记:简单基础 345
11.5.6 System.Transactions:手动登记和多线程环境 347
11.6 明智地使用事务 351
11.6.1 事务和性能 352
11.6.2 事务的默认行为 352
11.6.3 事务和用户确认 352
11.6.4 同时发生的ADO.NET和RDBMS事务 353
11.7 小结 353
第12章 XML和ADO.NET 354
12.1 SQL Server本机XML支持 354
12.2 FOR XML 355
12.2.1 FOR XML查询:概要 356
12.2.2 FOR XML的可选参数 359
12.2.3 FOR XML RAW 360
12.2.4 FOR XML AUTO 360
12.2.5 FOR XML EXPLICIT 362
12.2.6 SQL Server 2005和FOR XML PATH 371
12.2.7 在ADO.NET中使用FOR XML查询 373
12.3 OPENXML 376
12.4 SQL Server 2005独有的XML数据类型 381
12.5 利用SQL Server的XML功能:SQLXML 384
12.5.1 SQLXML和ADO.NET 384
12.5.2 SQLXML对象模型 385
12.6 小结 396
第13章 SQL Server中的CLR 397
13.1 SQLCLR的正确使用 398
13.2 运行本章例子所需软件 400
13.3 手动编写UDF 401
13.4 SQL Server项目的UDF 403
13.5 调试SQLCLR代码 406
13.6 编写TVF:表值函数 408
13.7 创建聚合函数 419
13.8 编写SQLCLR存储过程 425
13.8.1 上下文连接 425
13.8.2 SQLCLR中的SqlTransaction 434
13.9 在SQLCLR触发器中使用事务 435
13.10 在SQLCLR内使用非上下文连接 437
13.11 小结 440
第14章 ADO.NET最佳实践 441
14.1 了解你的系统需求 441
14.2 为正确的工作选择正确的工具 442
14.2.1 DataReader或DataSet/ DataAdapter 443
14.2.2 保持连接打开:连接池 444
14.2.3 DataSet或强类型DataSet 444
14.2.4 强类型或非强类型?DataSet与业务对象 445
14.2.5 T-SQL与SQLCLR以及扩展存储过程(XP) 447
14.2.6 事务,到处是事务:选择哪种事务 448
14.3 重要规则 449
14.3.1 实现数据层 449
14.3.2 关闭连接 449
14.3.3 网络延迟 451
14.3.4 复杂的层次化DataSet 451
14.3.5 缓存数据 452
14.4 小结 453