
Hitchhiker’s Guide系列丛书有哪些特别之处?也许了解一点过往情况有助于弄清这个问题。在20世纪80年代,我为Microsoft University(MSU)工作,主要工作内容是编撰培训材料和进行培训授课。不过,当时的技术主题(例如,OS/2和Quick Basic)现在已经过时了。当Microsoft与Sybase合作开发针对OS/2的SQL Server时,MSU和我被雇来为开发人员建立培训课程,内容包括:关系数据库设计、TSQL编程、DBLibrary编程以及其他相关主题。我负责管理并指导培训者。该课程持续了差不多5年时间—— 每周授课3~5天,每月授课三周。在这一过程中,所有人都对SQL Server有了更全面的了解和实践。
当MSU结束之后,我编写了首本Hitchhiker’s Guide: Hitchhiker’s Guide to VBSQL。这本书的标题与Douglas Adam的书毫无关系—— 他的书带有向导性质(与Europe on $5 a Day类似),主要针对利用Visual Basic开发SQL Server前端应用的人员。首本Hitchhiker’s Guide也帮助我获得了在Visual Basic文档小组担任创作者的工作机会。该书的第一版并没有对Visual Basic(1.0)、DBLibrary、SQL Server以及它们之间的内部关联机制作详细介绍。很多提示和技术来自我所编写的培训教材以及与SQL Server开发人员、MSU学生的交流。虽然本书包含相当多的技术内容,但我试图通过某些使用得并不恰当的例子将相对枯燥的主题变得幽默易懂。第1版Hitchhiker’s Guide交由Microsoft Press出版,但是Microsoft Press更希望出版与Power Builder有关的书,而不是出版与DBMS(例如SQL Server)有关的书。这种想法实在很奇怪。因此,我自费出版了前三版Hitchhiker’s Guide。这些书在美国的销量非常不错,并且行销海外。我曾将这些书的版权卖给一位香港的朋友,他使这些书在中国也有了很好的销量。遗憾的是,我从版权中并没有获得任何回报。
每个版本的Hitchhiker’s Guide都在上一版的基础上有所发展。随着Visual Basic及SQL Server的发展与成熟,我对它们的理解也在不断扩展。每本Hitchhiker’s Guide都关注于当前最新的Visual Basic与SQL Server的接口与功能,同时,每本Hitchhiker’s Guide也对ODBC、DAO、ODBC Direct及ADO接口作出了明确定义,并说明了利用Visual Basic工具访问这些数据接口的方法。我很喜欢思考这些书是否真正将Microsoft及数据访问小组的注意力转移到使用者所面临的实际问题上。这些使用者包括我的学生、顾客以及经常保持联系的读者。我会把针对公共问题的新方法放在下一版丛书中。这么多年以来,我用很多时间与开发人员团体进行交流,这些交流方式包括会议、新闻组以及培训课程。如果某位读者遇见我并针对数据访问提出了更好的解决方法,那么这个方法很可能会出现在Hitchhiker’s Guide丛书中。
最终,Hitchhiker’s Guide丛书前三版的畅销使得Microsoft Press提出出版第4版的要求。当和出版社达成共识(由我负责所有版本的控制)之后,我同意了Microsoft Press的出版要求。在接下来的几年中,Microsoft Press出版了更新后的第5版和第6版。这些书都至少被翻译成8种语言,包括日语、西班牙语、法语、德语、匈牙利语、意大利语、韩语以及中文。
前 言
欢迎阅读本书。1998年(距今已有相当长的一段时间),Microsoft Press出版了我所撰写的关于应用程序设计和开发的系列丛书Hitchhiker’s Guide中的一本:Hitchhiker’s Guide to Visual Basic and SQL Server(第6版)。当时,我仍在Microsoft’s Internal Technical Education小组工作。当时,Visual Basic 6.0刚刚开始使用,而SQL Server 7.0即将投入市场。在第6版Hitchhiker’s Guide的引言中,我已经提到了许多重要的变化,包括针对Visual Basic、ADO、SQL Server、连接工具以及技术的显著修改。我当时认为除非彻底改变Visual Basic的编译方式并引入全新的数据访问接口(基于COM的ADO),才能产生根本的技术革新。事实证明,这种想法是错误的。
今天,考虑到SQL Server和Visual Basic的当前状态,如果仅仅说:在过去7年中发生了许多变化,是很不够的。在我2000年从Microsoft退休之前,Microsoft已经从基于COM的Visual Basic(6.0)转为开发基于全新的.NET架构(这也是Vista操作系统的基础)的Visual Basic .NET。当时,这些变化促使我需要重新编写Hitchhiker’s Guide。但是,直到.NET开发完成,也没能完成这一重要任务,相反,我为APress撰写了两本书,分别是ADO and ADO.NET Examples and Best Practices for Visual Basic Programmers(主要针对从Visual Basic 6.0转型到Visual Basic .NET的开发人员)以及ADO.NET Examples and Best Practices for C# Programmers(与Peter Blackburn合著,是前一本书的C#版本)。这两本以ADO为主要内容的书都没有真正强调前一版Hitchhiker’s Guide中所提到的体系结构的许多基本概念和基本技术。
后来,Peter Blackburn加入了写书的工作,他对这两本Apress书投入市场起了很大的作用。Peter说服我针对SQL Server Reporting Services(这也是他最喜欢的专题)撰写一本更专业的图书。由于下一版的Visual Studio(Whidbey)当时尚未启动,因此,这个想法是一个很好的主意。我们的目标是在三个月内写出一本200页的书。事实上,这本书花费了一年多的时间。不过,780页的Hitchhiker’s Guide to SQL Server 2000 Reporting Services (Addison-Wesley)一书已经出版,该书也是SQL Server Reporting Services方面的权威读本之一。Peter为本书做了大量的研究与初期工作,并提供了重要的技术指导(非常感谢他给予技术方面支持)与逻辑支持。
1. 本书要点
Hitchhiker’s Guide系列丛书有哪些特别之处?也许了解一点过往情况有助于弄清这个问题。在20世纪80年代,我为Microsoft University(MSU)工作,主要工作内容是编撰培训材料和进行培训授课。不过,当时的技术主题(例如,OS/2和Quick Basic)现在已经过时了。当Microsoft与Sybase合作开发针对OS/2的SQL Server时,MSU和我被雇来为开发人员建立培训课程,内容包括:关系数据库设计、TSQL编程、DBLibrary编程以及其他相关主题。我负责管理并指导培训者。该课程持续了差不多5年时间—— 每周授课3~5天,每月授课三周。在这一过程中,所有人都对SQL Server有了更全面的了解和实践。
当MSU结束之后,我编写了首本Hitchhiker’s Guide: Hitchhiker’s Guide to VBSQL。这本书的标题与Douglas Adam的书毫无关系—— 他的书带有向导性质(与Europe on $5 a Day类似),主要针对利用Visual Basic开发SQL Server前端应用的人员。首本Hitchhiker’s Guide也帮助我获得了在Visual Basic文档小组担任创作者的工作机会。该书的第一版并没有对Visual Basic(1.0)、DBLibrary、SQL Server以及它们之间的内部关联机制作详细介绍。很多提示和技术来自我所编写的培训教材以及与SQL Server开发人员、MSU学生的交流。虽然本书包含相当多的技术内容,但我试图通过某些使用得并不恰当的例子将相对枯燥的主题变得幽默易懂。第1版Hitchhiker’s Guide交由Microsoft Press出版,但是Microsoft Press更希望出版与Power Builder有关的书,而不是出版与DBMS(例如SQL Server)有关的书。这种想法实在很奇怪。因此,我自费出版了前三版Hitchhiker’s Guide。这些书在美国的销量非常不错,并且行销海外。我曾将这些书的版权卖给一位香港的朋友,他使这些书在中国也有了很好的销量。遗憾的是,我从版权中并没有获得任何回报。
每个版本的Hitchhiker’s Guide都在上一版的基础上有所发展。随着Visual Basic及SQL Server的发展与成熟,我对它们的理解也在不断扩展。每本Hitchhiker’s Guide都关注于当前最新的Visual Basic与SQL Server的接口与功能,同时,每本Hitchhiker’s Guide也对ODBC、DAO、ODBC Direct及ADO接口作出了明确定义,并说明了利用Visual Basic工具访问这些数据接口的方法。我很喜欢思考这些书是否真正将Microsoft及数据访问小组的注意力转移到使用者所面临的实际问题上。这些使用者包括我的学生、顾客以及经常保持联系的读者。我会把针对公共问题的新方法放在下一版丛书中。这么多年以来,我用很多时间与开发人员团体进行交流,这些交流方式包括会议、新闻组以及培训课程。如果某位读者遇见我并针对数据访问提出了更好的解决方法,那么这个方法很可能会出现在Hitchhiker’s Guide丛书中。
最终,Hitchhiker’s Guide丛书前三版的畅销使得Microsoft Press提出出版第4版的要求。当和出版社达成共识(由我负责所有版本的控制)之后,我同意了Microsoft Press的出版要求。在接下来的几年中,Microsoft Press出版了更新后的第5版和第6版。这些书都至少被翻译成8种语言,包括日语、西班牙语、法语、德语、匈牙利语、意大利语、韩语以及中文。
2.本书范围
Hitchhiker’s Guide to Visual Studio and SQL Server(第7版)的覆盖范围很广,包括Visual Studio、SQL Server、Visual Studio与SQL Server的交互方式,以及开发人员利用这些工具和引擎开发专业应用程序的方法。如果您从本章的介绍中无法获得上述信息,那么在稍后的章节将对它们作专门介绍。在Microsoft University工作期间,我与开发人员及其他人员保持了将近20年的联系,并积累了文档中无法找到的许多信息。当MSU结束之后,我转到Visual Basic文档小组工作。在那里,我有机会接触到Visual Basic文档,但却无法接触到SQL Server文档。这是由文档的专业化所造成的。几乎所有的数据库后端都面临这样的问题。由于我所撰写的所有图书都涵盖了编程语言(Visual Basic)和不同版本的SQL Server,从而弥补了二者之间的鸿沟。
与前几版相比,本书以一种更宽广的视角来看待数据访问的开发问题。这是由于Visual Basic .NET与前面几版所讨论的Visual Basic并不相同。因此,本书的标题是Hitchhiker’s Guide to Visual Studio and SQL Server。目前,RAD开发不仅与Visual Studio有关,也与所采用的开发语言有关。Visual Studio可以为选定的开发语言自动生成大量的代码,并提供很多工具、向导、控件、类以及接口。这些内容对所有语言都是通用的。因此,本书着重讨论了如何利用Visual Studio工具集创建专业化的应用程序,包括它的适用场合及不适用场合。
本书还介绍了全新版本的SQL Server。开发人员能够通过Visual Basic .NET或者C#编写Server端的可执行程序。这意味着可以利用Visual Studio和开发人员所熟悉的CLR语言编写存储过程、函数、触发器、用户自定义类型以及聚集函数。本书中的很多篇幅讨论了设计和实现上述内容的过程与时机。这对前面版本的Hitchhiker’s Guide进行了扩充。整本书主要关注的是如何与SQL Server进行连接和运行查询,而对Oracle、DB2或者JET的相关内容则基本没有涉及。当然,本书中所描述的基本原则和实例完全可以应用到其他的DBMS平台上。很多读过前几版本的Hitchhiker’s Guide的开发人员已经发现了这一点。
无论如何,我不希望开发人员购买本书的目的仅仅是因为封面上的Visual Basic或者C#。虽然本书的大部分实例用Visual Basic .NET编写,但是绝大部分内容既适用于Visual Basic .NET,也适用于C#。我曾经打算同时提供Visual Basic .NET和C#的实例,但由于时间和精力有限,放弃了这一想法。大多数C#开发人员可以很容易地将Visual Basic .NET代码转换为C#代码。但是,对于部分Visual Basic .NET开发人员(尤其是从Visual Basic 6.0转型到Visual Basic .NET的开发人员)来说,同样的转换却并不简单。由于本书的内容适用于SQL Server 2000及以上版本(包括SQL Server 2005及其服务包),因此书名中没有提到SQL Server的版本信息。既然Microsoft提出每年都会更新产品(每次诉讼后也会更新),因此我将尽力保证书名(以及内容)与产品更新一致。
3.保持更新
在我所撰写的所有图书中,我都试图提供当前最新的信息。但是,这是一项非常困难的工作。Microsoft在不断地更新、修复、调整已经发行的软件。Microsoft看起来似乎没有针对用户编写有关应用程序方式方面的长期计划。现在所适用的软件很有可能在未来被淘汰。这是由于Microsoft一直强迫开发商(以及用户)购买其最新的软件产品,以此来获得最大利润,因此,这样一种循环过程(发布、修复、报废)将永无止境。似乎永远也没有时间将开发人员需要的所有功能都包含在一个产品中,同样,一旦需求发生变化,似乎也没有足够的时间进行修改(这很遗憾)。
身为作者,我同样面临困境。目前,我的硬盘里已经有了超过700页的初稿。但是在本书出版以前,这些内容将无人可见。技术内容的有效期是有限的,我们(出版商和我)需要探询新的方法使您更快地读到最新的内容。我所面临的另一个问题是本书的范围。坦白地说,我希望能够将其他相关内容(比如ASP开发问题、安全性问题、部署问题、SQL Trace和配置问题等)包含在本书中。同样,我也希望能够探讨与下一版Visual Studio(Orcas)相关的数据访问新技术(如DLINQ)。对于单独写作的人来说,这是不可能实现的目标。
本书读者对象
人们经常问我这样的问题:本书在技能和兴趣方面是否符合开发人员的需求,或是否符合多个开发小组的需求。虽然我也希望能够回答:“这本书适用于每个人”,但是正如预期的那样,这种情况不会发生。本书主要适用于以下读者群。
● 软件开发人员、构架师以及经理。这些人负责指定、设计、编码、汇编、测试、部署、支持、更新业务应用程序,而业务应用程序需要管理数据,尤其是SQL Server数据。
● 具有一定Visual Basic 6.0、Visual Basic .NET或者C#经验的开发人员,以及精通其他编程语言,并希望理解这些语言且利用其创建数据访问应用程序的开发人员。
● 希望利用最新版本以及更新版本的Visual Studio和SQL Server功能集的用户。通过阅读这本书,他们可以了解可使用和不可使用的功能,并知道其中的原因。
● 对于咨询师来说,如果他们希望了解如何通过创建快速应用程序来更好地支持SQL Server客户的要求,那么本书也适合他们阅读。
● 在第一次使用SQL Server且希望了解如何最好地利用SQL Server的用户以及具备SQL Server使用经验的用户。
● 如果人们希望了解如何以及何时(这一点更加重要)利用SQL Server 2005 CLR的可执行程序的能力,或者是通过新的Report Viewer控件访问SQL Server Reporting Service,那么这些人也适合阅读本书。
● 学生、教师、培训者以及课程设计人员。如果他们希望获得或者传授有用的业务软件开发技能,那么本书也适合他们阅读。
● 通过阅读本书,每个人都能获得另一种利用Visual Studio和SQL Server开发数据访问应用程序的观点。
● 本书也是为我自己所写。通过写书这种方式,我能够将所获得的经验传递给您。这些经验来自读者、课程参与者以及曾经询问过我的人。
目 录
第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