目 录
第1章 探索应用程序的体系结构 1
1.1 概述 1
1.2 选择正确的体系结构 1
1.3 理解工具集 3
1.3.1 ADO和ADO.NET的发展
历程 3
1.3.2 Jet和ODBC的产生 4
1.3.3 数据访问对象的产生 5
1.3.4 OLE DB的产生 5
1.3.5 ADO.NET的产生 6
1.4 了解应用程序的设计约束 7
1.4.1 影响设计的因素 8
1.4.2 在实现之前进行设计 10
1.5 选择正确的数据访问接口 11
1.5.1 选择正确的数据访问
提供者 12
1.5.2 SQL Server Everywhere 12
1.6 选择正确的数据库管理系统 18
1.6.1 SQL Server开销 18
1.6.2 SQL Server的安全性 19
1.6.3 性能 20
1.6.4 多用户问题 26
1.6.5 可伸缩性问题 27
1.6.6 局限性问题 28
1.6.7 客户端的限制 29
1.6.8 服务器的限制 30
1.6.9 维护和管理 30
1.6.10 管理维护任务 31
1.6.11 数据恢复的重要性 31
1.6.12 管理资源 35
1.7 理解基本的数据访问
体系结构 36
1.7.1 多层设计 36
1.7.2 建立独立的应用程序 38
1.7.3 基于ASP Browser的体系
结构 49
1.7.4 XML Web 服务的
体系结构 50
1.8 小结 50
第2章 SQL Server的工作原理 53
2.1 概述 53
2.2 服务器和版本 53
2.2.1 SQL Server的并行执行 56
2.2.2 SQL Server Express Edition
简介 56
2.2.3 Workgroup Edition简介 64
2.3 安装SQL Server 64
2.4 运行SQL Server服务 70
2.4.1 检查SQL Server服务 70
2.4.2 启动SQL Server服务 72
2.5 浏览SQL Server系统数据库 73
2.5.1 SQL Server实例 73
2.5.2 多个实例或多个数据库? 74
2.5.3 用户和系统数据库 74
2.5.4 创建用户数据库 76
2.5.5 管理用户数据库 76
2.6 理解SQL Server的安全系统 77
2.6.1 SQL Server 2005中的对象 78
2.6.2 系列问题:SQL Server 2005
对所有权的说明 81
2.6.3 理解登录、用户名以及
模式 82
2.7 管理SQL Server的连接 87
2.7.1 理解数据访问接口的角色 88
2.7.2 理解协议 88
2.7.3 打开连接 89
2.7.4 调试连接 92
2.7.5 选择连接策略 94
2.8 使用SQL Query Tool 96
2.9 创建SELECT查询 98
2.9.1 使用表和列的别名 100
2.9.2 SELECT操作简介 101
2.9.3 理解WHERE子句 101
2.9.4 通过参数传递字面值 102
2.9.5 减少返回的行数 103
2.9.6 通过WHERE子句执行
JOIN操作 104
2.9.7 处理特定类型的查询问题 108
2.10 创建和查询视图 118
2.11 实现业务规则 121
2.11.1 实现具有扩展属性的
业务规则 122
2.11.2 通过T-SQL规则、约束
和默认值实现业务规则 127
2.12 User-Defined(别名)类型 129
2.13 实现约束 130
2.14 通过批处理文件和脚本来
管理数据库和查询 132
2.15 查询优化器和查询计划 133
2.15.1 查看和调整查询计划 133
2.15.2 检查客户统计数据和
改变计划 135
2.15.3 执行查询计划 138
2.16 理解缓存 138
2.17 执行动作命令 140
2.17.1 插入新行 141
2.17.2 更新行 147
2.18 存储过程简介 155
2.19 触发器简介 157
2.19.1 创建DML触发器 157
2.19.2 创建DDL触发器 158
2.20 通过事务来保护数据
完整性 158
2.21 管理功能 159
2.21.1 附加.MDF数据库文件 159
2.21.2 设置Auto Close选项 161
2.21.3 导入和导出数据 161
2.21.4 备份SQL Server
数据库 162
2.22 事务日志的使用 163
2.23 小结 163
第3章 关系数据库101 165
3.1 概述 165
3.2 建立牢固的数据库设计基础 165
3.3 理解关系数据库的正规化 167
3.4 创建表、行和列 169
3.4.1 SQL Server针对关系
数据库的存储方式 169
3.4.2 选择正确的数据类型 178
3.5 小结 183
第4章 Visual Studio入门 185
4.1 概述 185
4.2 我的经历 185
4.3 安装正确版本的
Visual Studio 186
4.3.1 处理CTP或Beta版本 187
4.3.2 典型的安装过程 187
4.3.3 安装MSDN文档 191
4.4 启动Visual Studio 192
4.5 定制Visual Studio 2005 193
4.5.1 保存和加载自定义
的配置 195
4.5.2 创建自定义的项目模板 197
4.5.3 联机配置或本地帮助 202
4.6 配置服务器(或数据库)
管理器 202
4.6.1 通过Server Explorer创建
新的数据库 203
4.6.2 在代码中创建新的数据库 205
4.7 创建和管理数据库连接 205
4.8 通过Server Explorer管理
数据库对象 212
4.9 通过查询设计器管理查询 222
4.9.1 熟悉Query Designer 222
4.9.2 Query Designer窗格 223
4.9.3 派生表的定义 225
4.9.4 修改查询类型 225
4.9.5 Query Designer(查询设计
器)—— 重述 232
4.10 通过Server Explorer来查看
同义词 233
4.11 通过Server Explorer管理
类型 234
4.12 使用Server Explorer管理
汇编 237
4.13 使用Server Explorer管理
服务器 237
4.14 小结 240
第5章 用Server Explorer管理
可执行程序 241
5.1 概述 241
5.2 创建和编辑存储过程 241
5.2.1 比较SQL Server 2005和
Visual Studio 2005 242
5.2.2 进入SQL Server Management
Studio Express 243
5.3 创建新存储过程 243
5.4 用Run Selection执行T-SQL 250
5.5 调试存储过程 250
5.5.1 针对本地实例的T-SQL
调试 251
5.5.2 在存储过程中用断点调试 253
5.6 在远程实例上调试存储过程 255
5.7 从代码调试存储过程 258
5.8 使用Server Explorer管理
函数 260
5.9 小结 268
第6章 构建数据源、数据集和表
适配器 269
6.1 概述 269
6.2 创建YADAI的原因 270
6.3 强类型数据是否重要 271
6.4 什么是数据源 272
6.5 什么是TableAdapter 275
6.6 TableAdapter中缺少什么 276
6.7 创建基于数据库的数据源 277
6.8 配置TableAdapter 283
6.8.1 添加参数到查询中 289
6.8.2 选择查询方法进行生成 291
6.9 使用拖放绑定TableAdapter 294
6.9.1 定制生成的UI 296
6.9.2 使用SmartTag管理绑定
控件 297
6.9.3 绑定到Details 298
6.9.4 绑定到自定义控件 298
6.10 不通过拖放直接使用
TableAdapter 299
6.11 在Data Source Designer中
管理DataTable类 300
6.11.1 设置DataTable属性 300
6.11.2 生成的窗体代码 301
6.12 在应用程序间移动数据源 301
6.13 创建Web服务数据源 302
6.13.1 什么是Web服务 302
6.13.2 构造一个示例Web
服务 304
6.13.3 使用和测试Web服务 310
6.13.4 在UI中提供Web服务
数据源 312
6.14 小结 313
第7章 管理数据工具和数据绑定 315
7.1 概述 315
7.2 漫游Visual Studio Toolbox 316
7.2.1 提供废弃的数据访问控件 317
7.2.2 找到正确的控件 318
7.2.3 理解 Tool Tray 319
7.3 使用Dataset Toolbox元素 319
7.4 数据绑定 321
7.5 使用BindingSource 类 326
7.5.1 使用EndEdit和CancelEdit
方法 331
7.5.2 使用BindingSource类的
数据绑定 333
7.6 使用BindingNavigator控件 334
7.7 使用DataGridView控件 335
7.8 使用ProgressBar控件 337
7.9 小结 338
第8章 ADO.NET入门 339
8.1 概述 339
8.2 数据访问的挑战 339
8.3 ADO.NET总览 340
8.4 使用Visual Studio Object
Browser研究ADO.NET 342
8.4.1 用Class Diagram研究
ADO.NET 343
8.4.2 解释名称空间 345
8.4.3 对类名称的处理 346
8.4.4 使用简写来寻址类 346
8.5 实例化ADO.NET对象 347
8.5.1 理解代码的作用域 347
8.5.2 理解对象实例化 349
8.5.3 Visual Basic .NET中的
Using代码块 350
8.6 研究System.Data.SqlClient
名称空间 351
8.7 研究SqlClient名称空间 352
8.8 研究System.Data名称空间 359
8.8.1 解释System.Data命名
约定 359
8.8.2 理解System.Data.DataSet和
DataTable对象 360
8.8.3 是否使用JOIN—— 这是个
问题 370
8.9 小结 371
第9章 建立连接 373
9.1 概述 373
9.2 连接策略—— 包括安全 373
9.3 配置服务器及防火墙 375
9.4 连接策略 380
9.4.1 实时连接 380
9.4.2 持久连接 381
9.4.3 理解MARS及其含义 381
9.4.4 为连接对象选择正确的
作用域 382
9.5 建立连接 383
9.6 编写代码创建连接 386
9.6.1 什么是ConnectionString 386
9.6.2 用SqlConnectionString
Builder类创建一个
ConnectionString 386
9.6.3 保护ConnectionString 388
9.6.4 保存ConnectionString 388
9.6.5 建立Connection对象 389
9.6.6 设置服务器名称关键字 392
9.6.7 为实例设置别名 393
9.6.8 重访问其他关键字 395
9.6.9 配置连接池关键字的值 396
9.7 理解并管理连接池 397
9.7.1 监控连接池 404
9.7.2 防止连接池的溢出 405
9.8 为其他提供者建立
ConnectionString 406
9.9 使用Visual Studio建立
ConnectionString 408
9.10 (半)自动打开和关闭连接 411
9.11 理解Connection属性 411
9.12 使用Connection方法 413
9.13 处理Connection事件 417
9.14 管理Connection异常 418
9.14.1 关于异常 419
9.14.2 理解SqlException类 420
9.14.3 处理异常 422
9.15 小结 422
第10章 管理SqlCommand对象 423
10.1 概述 423
10.2 创建SqlCommand对象 423
10.2.1 理解SqlCommand
属性 424
10.2.2 理解SqlCommand
方法 429
10.2.3 理解SqlCommand支持
函数 433
10.3 将ad hoc查询集成到应用
程序中 435
10.4 编码参数查询 440
10.4.1 插入ad hoc查询 441
10.4.2 理解SqlParameter
Collection类 442
10.4.3 理解SqlParameter类 444
10.5 验证值的有效性 454
10.5.1 编写代码验证值的
有效性 455
10.5.2 处理复杂参数设计
问题 459
10.5.3 理解SqLCommand
事件 462
10.6 执行存储过程 462
10.6.1 处理OUTPUT、
INPUT/OUTPUT和
RETURN值参数 462
10.6.2 处理行集和OUTPUT
参数 464
10.7 小结 466
第11章 执行SqlCommand对象 467
11.1 概述 467
11.2 同步执行SqlCommand
对象 467
11.3 了解SqlDataReader 474
11.3.1 从流中取回数据 475
11.3.2 从SqlDataReader流中
取回元数据 480
11.3.3 设计最好的
SqlDataReader 481
11.4 填充数据结构 481
11.4.1 通过设计进行有效
填充 482
11.4.2 如何填充 484
11.4.3 填充InfoMessage消息 485
11.4.4 填充OUTPUT和
RETURN值参数 486
11.4.5 用DataTable Load方法
填充 487
11.4.6 填充附加结果集 488
11.5 异步取回行 491
11.6 异步执行命令 493
11.6.1 异步SqlCommand函数
编码 494
11.6.2 等待戈多或异步操作
完成 497
11.7 小结 503
第12章 更新管理 505
12.1 概述 505
12.2 使用向导创建更新动作
命令 505
12.2.1 CommandBuilder应该
完成的操作 506
12.2.2 并发处理—— 更新和
插入冲突 507
12.2.3 ADO.NET CommandBuilder
的工作方式 509
12.2.4 编码CommandBuilder 510
12.3 替代更新:使用TableAdapter
配置向导 512
12.3.1 使用TableAdapter更新 512
12.3.2 管理生成的参数 516
12.4 用服务器端逻辑进行复杂
的更新 518
12.4.1 使用事件执行自己的
更新逻辑 518
12.4.2 UpdateEvents的示例 520
12.4.3 管理批模式更新 525
12.5 通过设计或冲突管理并发 527
12.6 小结 532
第13章 管理SQL Server CLR
可执行程序 535
13.1 概述 535
13.1.1 Visual Basic .NET开发
人员的作用 535
13.1.2 Visual Studio的作用 536
13.2 发展CLR可执行程序技术 536
13.3 CLR可执行程序适用的
场合 538
13.3.1 可以或应该构建的可
执行程序类型 539
13.3.2 预览示例 540
13.4 设计CLR可执行程序 542
13.5 构建第一个CLR可执行
程序 542
13.6 构建并部署一个CLR
可执行程序 548
13.6.1 准备部署一个CLR
可执行函数 548
13.6.2 部署过程 552
13.7 建立测试环境 554
13.7.1 在T-SQL中寻址CLR
函数 555
13.7.2 评价CLR可执行程序
的性能 558
13.7.3 创建表值函数 560
13.8 在CLR可执行程序中处理
ADO.NET 563
13.8.1 使用上下文连接 563
13.8.2 管理事务 565
13.8.3 查询数据 565
13.8.4 返回数据和消息 565
13.9 编码CLR存储过程 565
13.9.1 构建CLR存储过程的
示例 567
13.9.2 测试CLR存储过程 573
13.9.3 研究余下的CountWords
示例 574
13.9.4 评价CLR和T-SQL的
性能 575
13.10 实现基本的用户定义类型
CLR可执行程序 577
13.10.1 编码CLR UDT 578
13.10.2 调试CLR UDT 585
13.10.3 使用SELECT查询
UDT数据 587
13.10.4 为提高性能调整
自己的UDT 588
13.10.5 引用并更新UDT值 589
13.10.6 单步调试UDT代码 591
13.10.7 验证自己的UDT
数据 593
13.10.8 实现UDT方法 594
13.11 实现高级CLR用户定义
的类型 595
13.11.1 用户自定义串行化 596
13.11.2 构建iTypCurrencyV2
UDT 597
13.11.3 测试typICurrencyV2
UDT 602
13.12 访问CLR UDT的其他
方式 602
13.12.1 引用UDT 603
13.12.2 实例化UDT变量 604
13.12.3 浏览LoanRequest
代码 605
13.13 实现CLR聚集可执行
程序 606
13.13.1 什么是聚集 607
13.13.2 CLR聚集示例 607
13.13.3 测试CLR聚集 612
13.14 实现CLR触发器 612
13.14.1 构建CLR触发器 613
13.14.2 访问INSERTED和
DELETED伪表 614
13.14.3 处理更新 615
13.15 高级调试 616
13.16 UDT安全和IP安全 617
13.16.1 提供自己的智能
属性 619
13.16.2 保护自己的智能
属性 619
13.17 小结 620
第14章 创建并管理报表 621
14.1 概述 621
14.2 理解报表服务和RDL 622
14.3 Visual Studio 2005报表 626
14.4 Visual Studio 2005报表
工具的内容 627
14.5 构建自己的第一个报表 628
14.5.1 创建报表数据源 629
14.5.2 展示报表 631
14.5.3 配置ReportViewer控件 634
14.5.4 测试报表 635
14.5.5 完善报表 636
14.6 深入研究ReportViewer 640
14.6.1 ReportViewer属性 640
14.6.2 ReportViewer的方法 642
14.6.3 ReportViewer事件 642
14.6.4 LocalReport类 643
14.6.5 ServerReport类 644
14.7 管理服务器报表 644
14.7.1 呈现服务器报表 645
14.7.2 管理服务器报表参数 646
14.7.3 重新设置参数值 649
14.7.4 有趣的ServerReport
参数 649
14.7.5 有趣的ServerReport
方法和函数 650
14.8 管理参数 650
14.8.1 捕获参数 651
14.8.2 报表参数 656
14.9 高级报表技术 658
14.9.1 管理单击报表 658
14.9.2 使用SubReport
报表项 662
14.9.3 RDLC的组成 664
14.9.4 将RDL转换为RDLC 665
14.10 实现Matrix报表 666
14.10.1 报表的数据考虑 666
14.10.2 初始选择查询 667
14.10.3 数据分组 668
14.10.4 绑定Matrix报表 670
14.11 小结 679
第15章 本书总结 681
附录I 安装示例和测试数据库 683
I.1 安装示例 683
I.2 安装示例数据库 683
I.2.1 附加示例数据库 684
I.2.2 为实例创建别名 685
I.3 特定章节的配置问题 686
I.3.1 第8章:ADO.NET入门 686
I.3.2 第13章:管理CLR可执行
文件 686
I.4 小结 687
附录II 重新安装DACW和Visual
Studio中没有的其他功能 689
附录III 监控SQL Server 691
III.1 用SQL Profiler监控
SQL Server 691
III.1.1 添加过滤条件 691
III.1.2 配置SQL Profiler 692
III.1.3 开始追踪 694
III.1.4 评估追踪 695
III.1.5 一些SQL Profiler提示 695
III.2 用性能计数器监控SQL
Server和ADO.NET 696
III.3 小结 700
附录IV 创建并管理服务器端游标 701
IV.1 服务器端游标重要的原因 701
IV.2 ADO.NET如何实现游标 702
IV.3 如何管理服务器端游标 702
IV.4 ADO.NET如何创建服务器
端游标 704
IV.4.1 打开、关闭和重新打开
连接 704
IV.4.2 创建游标 704
IV.5 从游标取回数据 705
IV.6 更新服务器端游标 708
IV.7 小结 708
