第I部分 ADO.NET 2.0
基础知识
第1章 从ADO向ADO.NET移植 3
1.1 数据访问的新方式 4
1.1.1 System.Data命名空间 4
1.1.2 ADO.NET数据提供者 6
1.2 ADO.NET的基本数据对象 6
1.2.1 用SqlClient创建基本
ADO.NET数据对象 8
1.2.2 对多表更新应用事务 15
1.2.3 使用OleDb、SqlXml和Odbc
成员类 17
1.2.4 使用类型化DataReader数据
和SqlResultSet数据 21
1.3 ADO.NET的类型化DataSet
对象 22
1.3.1 通过SQL Server数据源添加
类型化DataSet 24
1.3.2 添加DataGridView和
BindingNavigator控件 28
1.3.3 持久化和重新打开DataSet 30
1.3.4 将DataViewGrid更改为
Details窗体 31
1.3.5 添加相关的DataBound
控件 32
1.4 小结 34
第2章 ADO.NET 2.0新功能介绍 35
2.1 使用新的ADO.NET 2.0运行
时Windows窗体对象 35
2.1.1 用DbProviderFactories创建
数据库不明确的项目 36
2.1.2 检索基表架构 39
2.1.3 校验有效的SQL Server实
例和ADO.NET 2.0数据
提供者 41
2.1.4 利用SqlBilkCopy对象对
SQL Server表进行批量
插入 42
2.1.5 SQL Server连接统计信息 45
2.1.6 异步执行SqlCommands 47
2.1.7 创建单独的DataTable 56
2.1.8 用Nullable类型支持
DBNull值 60
2.2 使用ADO.NET 2.0的新持久
性Windows窗体对象 64
2.2.1 ADO.NET 1.x与2.0的数据
设计器比较 64
2.2.2 向工具箱添加没显示的
ADO.NET控件 66
2.2.3 将1.x项目升级为ADO.NET
2.0组件 67
2.2.4 添加多级子窗体 67
2.2.5 参数化MasterDetailsForm 69
2.2.6 批量多次更新 71
2.3 用ReportViewer控件设计和
显示报表 72
2.4 小结 74
第3章 对以数据为中心的项目采用
最佳实践 77
3.1 建立体系结构的最佳实践 78
3.2 为项目确定模式 80
3.2.1 使用Microsoft .NET的企业
解决方案模式 81
3.2.2 数据模式 81
3.2.3 分布式系统模式 82
3.2.4 集成模式 82
3.3 应用程序块库 83
3.3.1 数据访问应用程序块 84
3.3.2 DataAccessQuickStart
客户端 88
3.4 遵循设计指南 90
3.4.1 .NET数据访问体系结构
指南 90
3.4.2 提高.NET应用程序的性能
和可伸缩性 91
3.4.3 设计数据层组件并在层间
传递数据 91
3.5 类库设计指南 96
3.5.1 命名指南 96
3.5.2 类成员使用指南 97
3.6 面向服务的架构 98
3.6.1 面向服务的架构 98
3.6.2 用Web服务实现SOA 99
3.6.3 保证完全互操作的Web
服务 100
3.7 用FxCop验证项目代码 104
3.8 自动完成测试驱动的开发 106
3.8.1 向VS 2005解决方案添加
单元测试项目 106
3.8.2 编辑和运行向导生成的
测试 108
3.9 运行SQL Server 2000最佳
实践分析器 109
3.10 对ADO.NET 2.0项目采用
特殊最佳实践 111
3.10.1 对存储池数据库连接采用
相同连接字符串 111
3.10.2 运行SQL Server分析器来
检验SQL和RPC查询 112
3.10.3 避免添加运行时
CommandBuilder实例 113
3.10.4 用存储过程代替SQL批量
查询 114
3.10.5 为不需要的参数添加
默认值 114
3.10.6 利用sp_executesql和命名
参数重新使用缓存的查询
计划 114
3.10.7 向开放式并发控件添加
timestamp列 115
3.10.8 在并发测试中检验所有
关联记录 118
3.10.9 通过批量更新减少服务器
往返行程 118
3.10.10 利用客户端验证避免
SqlExceptions 118
3.11 小结 119
第II部分 Windows窗体和控
件中的数据绑定
第4章 对TableAdapters、Binding
Sources和DataGridView
编程 123
4.1 设计基本的客户-订单-订单
详细窗体 123
4.1.1 利用参数化查询减小
DataSet的尺寸 124
4.1.2 创建数据源并添加控件 125
4.1.3 为各数据表添加FillBy
方法 126
4.1.4 更改自动生成的代码来满足
控件的要求 128
4.1.5 用CustomerID值填充
组合框 129
4.1.6 清除UI和代码 130
4.2 格式化并添加DataGrid
View列 131
4.2.1 设置OrdersDataGridView
列的格式 131
4.2.2 格式化Order_DetailsDataGrid
View并添加计算列 132
4.3 为新记录提供默认值 134
4.3.1 添加默认的订单记录值 134
4.3.2 添加默认的详细记录值 135
4.4 处理DataErrors事件 136
4.5 流线型Heads-down数据
输入 137
4.6 将UI移植到选项卡式窗
体上 139
4.6.1 测试OrdersByCustomersV3
项目 140
4.6.2 用代码添加行时修改丢失的
默认值 141
4.6.3 在第二个选项卡页面编辑选
择的DataGridView记录 142
4.7 为主键值创建和绑定查询
列表 143
4.7.1 创建非类型化查询DataSet
及其DataTables 144
4.7.2 填充cboCustomerID
组合框 146
4.7.3 用组合框代替DataGridView
文本框 146
4.7.4 为组合框与文本框建立
关联 149
4.8 添加设置附加值的组合框 151
4.8.1 创建和绑定根据ProductName
排序的DataView 151
4.8.2 测试复制性并更新
UnitPrice列 152
4.9 为新客户输入添加查询表行 155
4.9.1 添加和绑定CustomerID
BindingSource 155
4.9.2 用DataRowView测试
重复性 156
4.10 对编辑应用业务规则 157
4.11 将更改保存到基表 159
4.11.1 维护引用的完整性 159
4.11.2 创建并测试UpdateBase
Tables函数 160
4.12 小结 168
第5章 添加数据验证和并发管理 171
5.1 验证数据输入 173
5.1.1 验证文本框 173
5.1.2 验证DataGridViews 174
5.1.3 发现输入中的主键约束
冲突 176
5.1.4 验证默认值 177
5.2 管理并发冲突 178
5.2.1 ADO.NET 2.0并发控制和
事务变更 179
5.2.2 并发控制战略 181
5.2.3 并发管理的“链接丢失” 181
5.2.4 预测基于值的主键约束
冲突 189
5.3 合理处理并发错误 191
5.3.1 从服务器上获取当前数据 192
5.3.2 检索并比较服务器和客户端
单元值 194
5.4 容纳非连接用户 198
5.4.1 创建和管理脱机DataSet 198
5.4.2 处理多个父记录 200
5.5 小结 201
第6章 高级DataSet技术应用 203
6.1 对DataSet更新应用事务 203
6.2 对DataTable选择命令添加
联接 211
6.2.1 向SelectCommand添加
联接 211
6.2.2 向DataGridView添加联接
的列 213
6.2.3 提供默认值并更新只读列 213
6.3 通过减少DataSet的尺寸来
提高性能 215
6.3.1 由TOP n查询返回的
限制行 216
6.3.2 为TableAdapters添加
部分类 216
6.4 在DataGridViews中使用
图像 217
6.4.1 向DataGridViews添加
图像列 218
6.4.2 填充DataGridView图像 219
6.5 用DataSet和DataGridViews
编辑XML文档 222
6.5.1 利用已有的XML架构
生成DataSet 223
6.5.2 推断一个XML架构来生成
DataSet 236
6.5.3 通过XML数据源创建编辑
窗体 237
6.6 通过架构生成可序列化类 241
6.6.1 用可序列化类创建数据源 243
6.6.2 用泛型BindingList集合提高
编辑功能 245
6.7 小结 248
第III部分 ASP.NET 2.0中的
数据绑定
第7章 ASP.NET 2.0的DataSources
和绑定控件 251
7.1 ASP.NET 2.0的新功能 252
7.1.1 ASP.NET 2.0的编译模型 255
7.1.2 ASP.NET 2.0的特殊
文件夹 257
7.1.3 ASP.NET 2.0的新数据
控件 257
7.2 DataSource控件 258
7.3 DataList控件 259
7.3.1 用于绑定控件的
SqlDataSources控件 260
7.3.2 控件属性 264
7.3.3 数据绑定模板与数据
格式化 265
7.3.4 绑定控件值的DataSource
WHERE约束 267
7.3.5 编辑DataLists中的项 270
7.4 FormView控件 272
7.4.1 对DataSource分页 272
7.4.2 用列专用的文本代替空值 273
7.4.3 编辑、添加和删除记录 274
7.4.4 添加Command按钮 275
7.5 GridView控件 277
7.5.1 将BoundField转换为
EditItemTemplate字段 278
7.5.2 用DropDownList代替
TextBoxes,以进行编辑 280
7.5.3 用ImageField设计
GridView 281
7.5.4 缩放图像渲染 284
7.6 DetailsView控件 285
7.6.1 使子表GridView与
DetailsView同步 286
7.6.2 使复合主键值可编辑 286
7.6.3 赋默认值并处理更新和
插入错误 287
7.6.4 用QueryString将
DetailsView页面链接到
GridView页面 288
7.7 小结 289
第8章 高级ASP.NET 2.0数据技术
应用 291
8.1 在数据绑定控件中验证输入 291
8.1.1 ASP.NET 2.0验证控件 292
8.1.2 新增的ValidationGroup
属性 293
8.1.3 共享的其他验证属性 293
8.2 验证GridView编辑 294
8.2.1 向GridView控件添加所
需要的字段验证 295
8.2.2 用RegularExpressionValidator
验证CustomerID输入 296
8.2.3 用RangeValidator测试
EmployeeID值 297
8.2.4 对数据输入执行
RangeValidator和
RegularExpressionValidator 297
8.2.5 用CompareValidator防止
不合理的输入 299
8.2.6 添加CustomValidator控件 299
8.2.7 提供验证概述消息 302
8.3 验证DetailsView控件 303
8.3.1 在Web 服务器上验证
ProductID编辑 303
8.3.2 在客户端测试重复的
ProductID值 304
8.4 用ObjectDataSources代替
SqlDataSources 305
8.4.1 DataTables的
ObjectDataSources控件 306
8.4.2 来自类型化DataSet DALC
的ObjectDataSources 313
8.4.3 自定义业务对象的
ObjectDataSources 315
8.5 用XmlDataSource读XML
文件 322
8.5.1 通过XML文档创建
XmlDataSources 322
8.5.2 用Orders.xml填充GridView
控件 324
8.5.3 用XmlDataSource设计
Repeater控件 325
8.5.4 用表格式数据填充
TreeView 327
8.6 跟踪Web页面来比较
DataSource控件的性能 329
8.7 向IIS部署建立的Web站点 330
8.7.1 为自己的站点创建虚拟
目录 331
8.7.2 将Web站点复制到虚拟目录
文件夹 331
8.7.3 发布预编译Web站点 333
8.8 小结 334
第9章 发布数据驱动的Web服务 335
9.1 Web服务开发战略 336
9.1.1 事务 336
9.1.2 DataSet控件 336
9.1.3 自定义业务对象 337
9.1.4 多个WebMethod和版本
登记 337
9.1.5 Web服务的安全性 338
9.2 ASP.NET 2.0 Web服务编程 339
9.2.1 Web Service帮助页面与
WSDL文档 340
9.2.2 Web服务部署 345
9.2.3 Web服务客户端和代理 345
9.3 创建并部署简单数据Web
服务 350
9.3.1 Web服务连接字符串 350
9.3.2 添加通用过程来返回
类型化DataSet 352
9.3.3 添加WebMethod来定义并
返回DataSet 354
9.4 向Web服务客户端添加
DataGridViews 355
9.5 更新Web服务DataSet 357
9.6 用自定义业务对象代替
DataSet 359
9.6.1 业务对象Web服务 359
9.6.2 向DataGridViews绑定
对象数组 365
9.6.3 创建ASP.NET业务对象Web
服务客户端 371
9.7 小结 372
第IV部分 SQL Server 2005
和ADO.NET 2.0
第10章 从SQL Server 2000升级
到2005 375
10.1 SQL Server 2005的版本 375
10.1.1 Express Edition 376
10.1.2 Developer Edition 377
10.1.3 Workgroup Edition 377
10.1.4 Standard Edition 378
10.1.5 Enterprise Edition 378
10.1.6 Mobile Edition 378
10.2 SQL Server 2005新功能
简介 378
10.2.1 新的或升级的管理工具 379
10.2.2 报表服务 383
10.2.3 CLR集成 384
10.2.4 xml数据类型和Xquery
实现 384
10.2.5 SQL Server 2005的Xquery
语法、SQL本地客户端 385
10.2.6 多活动结果集(MARS) 386
10.2.7 数据有效性和可靠性的
增强 387
10.2.8 T-SQL和数据库引擎的
增强 387
10.2.9 服务代理 395
10.2.10 通知服务 399
10.2.11 查询通知 400
10.2.12 数据库邮件 400
10.2.13 SQL Server本地SOAP
Web服务 401
10.3 自定义FOR XML查询 403
10.3.1 用FOR XML RAW查询
添加根元素和嵌套的XML
架构 403
10.3.2 采用FOR XML PATH
架构的微调文档结构 406
10.4 分析PIVOT和UNPIVOT
操作符 411
10.4.1 创建源表 412
10.4.2 使用PIVOT操作符 412
10.4.3 用公共表表达式代替
源表 414
10.4.4 非数据透视交叉表报表 415
10.5 处理查询通知 416
10.5.1 添加SqlDependency
通知 417
10.5.2 创建SqlNotificationRequest
对象和订阅 420
10.5.3 用数据库邮件自动进行
重排序处理 423
10.6 消耗SQL Server本地Web
服务 425
10.7 小结 427
第11章 创建SQL Server项目 429
11.1 SQL Server项目简介 429
11.1.1 实现CLR集成的命令 430
11.1.2 用于SQL Server项目的
属性修饰 430
11.1.3 Visual Studio 2005 SQL
Server项目模板 430
11.2 SqlServerProjectCLR示例
项目 431
11.2.1 用于SQL Server对象的
代码 432
11.2.2 测试脚本 437
11.2.3 创建程序集指令 438
11.2.4 创建ObjectType指令 439
11.2.5 抛弃SQL/CLR对象 442
11.2.6 调试SQL Server项目 442
11.3 设计SQL/CLR存储过程 444
11.3.1 返回依赖于内容的
SqlDataRecords 444
11.3.2 用XmlWriter生成XML
文档 447
11.3.3 对项目产品销售进行线性
回归分析 456
11.4 创建自定义类型 463
11.4.1 用于结构和类的Native
格式的UDT代码 464
11.4.2 自定义格式的UDT类
代码 467
11.4.3 简单值类型UDT 468
11.5 对表添加UDT列 471
11.5.1 利用UDT列显示表行 472
11.5.2 用SqlDataReader返回
UDT值 473
11.6 使用复杂的自定义格式
的UDT 474
11.6.1 AddressBasic UDT 475
11.6.2 验证地址UDT的方法 478
11.6.3 用WHERE约束和ORDER
BY子句测试地址UDT 479
11.6.4 利用UDT查询从其他
字段或表访问数据 480
11.6.5 用XmlTextWriter生成
格式规范的XML 481
11.7 小结 483
第12章 分析xml数据类型 485
12.1 选择合理的xml数据模型 486
12.1.1 非类型化xml列 487
12.1.2 类型化xml列 490
12.1.3 索引式xml列 494
12.2 探究AdventureWorks的
xml列 497
12.3 执行XQuery表达式 499
12.3.1 用于xml列的XQuery
方法 500
12.3.2 FLWOR XQuery表达式 506
12.3.3 通过代码执行XQuery
表达式 511
12.4 数据模型选择对性能的
影响 512