设为首页
加入收藏夹

在 Visual Studio .NET 中使用 SQL Ser
浏览选项:

  适用于:
   Microsoft® SQL Server™ 2000

   Microsoft Visual Studio® .NET
  摘要:如何使用 Visual Studio .NET 工具创建数据库对象和 Transact-SQL 存储过程。
  目录
  简介
  前提条件
  可视化数据库工具
  服务器资源管理器
  表设计器
  数据库设计器
  示例应用程序
  SQL 编辑器
  查询和视图设计器
  调试存储过程
  数据集
  使用 ADO.NET 访问 SQL Server
  XML 和 Visual Studio .NET
  SQLXML 3.0
  数据库项目
  生成创建脚本和导出数据
  数据库项目命令文件
  小结
  附录 1:数据库加载脚本
  附录 2:更多信息
  附录 3:关于作者
  简介
  Microsoft® Visual Studio® .NET 包括一系列工具和数据访问类,使得使用
Microsoft SQL Server™ 2000 创建数据库应用程序比以前更加容易。现在,开发人员
所需的全部工具都包含在 Visual Studio 集成开发环境 (IDE) 中。本文将介绍新的工具和数
据类,引导您完成创建数据库应用程序的整个过程,并重点介绍对新的 SQL Server 2000 功
能(例如 XML 支持、索引视图和级联引用完整性)的支持。本文还包括一个简单的
Microsoft Visual Basic® 应用程序,借以阐明如何使用这些工具。
  前提条件
  要创建本文中的示例应用程序,您的计算机上必须安装以下软件:
  Microsoft Windows® 2000 Server
  Visual Studio .NET(有些示例程序注明需要使用 Visual Studio .NET Enterprise
  SQL Server 2000 Enterprise Edition
  还需要使用数据库所有者 (dbo) 权限登录 SQL Server。
  可视化数据库工具
  Visual Studio .Net IDE 包含一套可视化数据库工具,用于帮助您使用 SQL Server
2000 开发数据库应用程序。可视化数据库工具包含以下各项:
  服务器资源管理器
  数据库设计器
  表设计器
  SQL 编辑器
  查询和视图设计器
  以下各节将详细介绍这些工具。
  服务器资源管理器
  服务器资源管理器是可视化数据库工具以及大多数其他工具和设计器的门户。使用服务器
资源管理器,您可以连接到 SQL Server 数据库并查看带有 SQL Server 计算机、数据库关系
图、表、视图、存储过程以及功能等节点的分层结构树状视图。许多过去开发人员需要使用
SQL Server 企业管理器才能完成的任务,现在可以使用服务器资源管理器来完成,而无需再
  要打开服务器资源管理器,请启动 Visual Studio .NET,在 View(视图)菜单中,单击
Server Explorer(服务器资源管理器)。
  第一次打开服务器资源管理器时,会看到两个节点,如图 1 所示。第一个节点 Data
Connections(数据连接)列举了计算机中以前所创建的所有数据库连接。第二个节点
Servers(服务器)列出了当前网络上的所有服务器。在 Servers(服务器)节点下有一个名
为 SQL Server 的节点,使用该节点可以访问可视化数据库工具而无需创建数据连接。创建数
据连接后,也可以通过 Data Connections(数据连接)节点访问可视化数据库工具。
  
  图 1:服务器资源管理器(单击图片以查看大图像)
  创建新的 SQL Server 数据库
  使用 Visual Studio .NET Enterprise Edition,用户可以在 Visual Studio .NET IDE
中创建新的 SQL Server 数据库。在以下过程中,我们将创建一个名为 ServiceCall 的示例
  创建新的数据库
  打开服务器资源管理器:在 View(视图)菜单中,单击 Server Explorer(服务器资源
  右键单击 Data Connections(数据连接),然后单击 Create New SQL Server
Database(创建新 SQL Server 数据库)。将打开 Create Database(创建数据库)对话框。
  
  图 2:创建新 SQL Server 数据库
  在 Create Database(创建数据库)对话框中,执行以下操作:
  在 Server(服务器)中,输入服务器的名称。
  在 Login Name(登录名)和 Password(密码)中,输入新数据库的身份验证信息。
  在 New Database Name(新数据库名)中,输入 ServiceCall,然后单击 OK(确定)。
  
  图 3:Create Database(创建数据库)对话框
  新数据库在服务器上使用默认设置创建,并带有指向新数据库的数据连接。单击数据库旁
边的加号 (+) 可以展开数据库关系图、表、视图、存储过程和函数等节点。
  表设计器
  可以使用表设计器来创建和维护来自服务器资源管理器的数据库表。
  要启动表设计器,请右键单击 Tables(表)节点(该节点位于创建 ServiceCall 数据库
时所创建的数据库连接下),然后单击 New Table(新建表)。
  表设计器包括两部分。顶部包含一个网格,从中可以定义表中的列。Data Type(数据类
型)下拉列表包括所有有效的数据类型,其中一些类型专用于 SQL Server 2000(Bigint 和
Sql_variant)。底部包含一个选项卡,从中可以指定其他的列特性,就象在企业管理器的表
  创建表
  在以下过程中,我们将为 ServiceCall 数据库创建 Customers 表和 ServiceCall 表。
  创建 Customers 表和 ServiceCall 表
  如图 4 所示,定义 Customers 表的列。   
  图 4:Customers 表的表设计器属性表(单击图片以查看大图像)
  右键单击 CustomerID 列,然后单击 Set Primary Key(设置主键);或者使用工具栏上
的 Set Primary Key(设置主键)控件。
  单击 Save(保存),然后在 Choose Name(选择名称)对话框中,输入 Customers。
  对 ServiceCall 表重复此过程,将 ServiceCallID 设置为主键,将 Identity(标识)
属性设置为 Yes(是),如图 5 所示。
  
  图 5:ServiceCall 表的表设计器属性表(单击图片以查看大图像)
  除了在表中定义列和键以外,用户还可以使用表设计器创建和修改表的关系、约束和索引
  创建 ServiceCall 表和 Customers 表之间的关系
  打开 ServiceCall 表的表设计器,右键单击列网格中的任意位置,然后选择
Relationships(关系);或者使用工具栏上的 Manage Indexes and Keys(管理索引和键)
  单击 Relationships(关系)选项卡,然后单击 New(新建)。关系名称默认为
  将主键表定义为 Customers,将主键列定义为 CustomerID。
  将外键表定义为 ServiceCall,将外键列指定为 CustomerID。   
  图 6:Property Pages(属性页)对话框
  单击 Close(关闭),然后单击 Save(保存)。
  现在,SQL Server 将确保 ServiceCall 数据库不会在 ServiceCall 表中包含这样的
  在表设计器中,一个专门用于 SQL Server 2000 的功能是定义级联引用完整性。
  在表之间声明引用完整性
  在服务器资源管理器中,右键单击 Customers 表,然后选择 Open Table(打开表)。将
  单击 Relationships(关系)。将显示 Property Pages(属性页)对话框,其中已选定
Relationships(关系)选项卡。在对话框底部,有以下两个选项:
  Cascade Update Related Fields(级联更新相关的字段)- 在主键更新后,使数据库将
  Cascade Delete Related Records(级联删除相关的记录)- 当删除主键表中的行时,使
  选择 Cascade Delete Related Records(级联删除相关的记录),单击 Close(关闭)
,然后单击 Save(保存)。设置此选项将使 SQL Server 从 ServiceCall 表中删除与从
Customers 表中删除的每个行的 CustomerID 相匹配的所有行。
  注意:系统将显示一个 Save Warning(保存警告)对话框,其中显示消息“The
following tables will be saved to your database. Do you want to continue?”(以下
表将被保存到您的数据库,是否继续?)。将列出 Customers 表和 ServiceCall 表。单击
Yes(是)。显示保存警告信息是因为已打开 Warn about Tables Affected(表受到影响时
警告)选项;您可以从 Save Warning(保存警告)对话框中关闭此选项。
  
  图 7:已选中 Cascade Delete Related Records(级联删除相关的记录)的
  重要信息:要使用示例数据填充表,请在 SQL 查询分析器中运行附录 1 中的数据库加
  数据库设计器
  数据库设计器是一个图形界面,可用于添加或修改数据库表、关系、索引、键和约束等。
  注意:数据库设计器要求使用 Visual Studio .NET Enterprise Edition。
  您可以为给定的数据库创建任意数量的图表,一个表可以出现在任意数量的图表中。这些
  在使用 SQL Server 数据库关系图时,还有一些注意事项。有关详细信息,请查看
Visual Studio .NET 文档中的“Database Designer Considerations for SQL Server
Databases”(SQL Server 数据库的数据库设计器注意事项)。该主题包含了更改数据类型、
  创建数据库关系图
  打开数据库设计器:在服务器资源管理器的数据库节点下,右键单击 Database Diagrams
(数据库关系图),然后单击 New Diagram(新建图表)。将打开数据库设计器,并显示
Add Table(添加表)对话框,从中可以将现有表添加到图表中。
  将 Customers 表和 ServiceCalls 表添加到图表中,然后单击 Close(关闭)。
  关闭数据库设计器,如果需要,保存该图表。
  创建图表后,您可以右键单击图表的背景以将新表添加到图表或数据库中。也可以右键单
击一个表以维护列、键、索引、约束和关系等。数据库设计器与 SQL Server 企业管理器中的
图表工具非常类似(参见图 8)。
  
  图 8:数据库设计器关系图窗格
  示例应用程序
  为了演示其余的可视化数据库工具和数据访问类,我们将使用刚刚创建的 ServiceCall
  要开始示例应用程序,需要创建一个新的 Visual Studio .NET 项目。
  创建新项目
  在 File(文件)菜单中,单击 New(新建),然后单击 Project(项目)。
  在 Project Types(项目类型)下,单击 Visual Basic Projects(Visual Basic 项目
);在 Templates(模板)下,单击 Windows Application(Windows 应用程序)。
  将项目命名为“ServiceCall”,然后单击 OK(确定)。这样便创建了一个解决方案和
一个项目,两者都名为“ServiceCall”。每个 Visual Studio .NET 解决方案都可以包含一
  打开服务器资源管理器窗口:在 View(视图)菜单中,单击 Server Explorer(服务器
资源管理器)。如果展开数据连接节点,可以看到先前创建的指向 ServiceCall 数据库的连
  建立此示例应用程序的第一步是创建一个用户定义的函数,以计算一个服务调用的总成本
((LaborRate * Hours) + PartsCost)。用户定义的函数可以是标量值函数或表值函数(要求
使用 Visual Studio .NET Enterprise Edition 以创建用户定义的函数)。标量值函数返回
一个标量数据类型的单个值,并且可以显示在任何显示列名称的查询中。表值函数返回一个表
,可用于 Transact-SQL 查询的 FROM 子句中。在 Visual Studio .NET 中,可以创建三种类
  标量值函数 - 该函数返回单个标量值。
  内联函数 - 一种表值函数,返回通过单个 SELECT 语句定义的表值。
  表值函数 - 一种表值函数,返回一个通过多个 Transact-SQL 语句定义的表。表值函数
  创建函数
  在服务器资源管理器中刚刚创建的连接下,右键单击 Functions(函数)节点,然后选择
New Scalar-valued function(新建标量值函数)。将打开 SQL 编辑器,该编辑器用于创
建和维护函数以及存储过程。系统提供了一个模板以帮助创建函数。
  复制以下代码,并将其粘贴到 SQL 编辑器中以创建函数:
  Create FUNCTION dbo.ComputeServiceCallTotal
  (@LaborRate money = 0,
   @Hours float = 0,
   @PartsCost money = 0)
  RETURNS money
  AS
  BEGIN
   RETURN ((@LaborRate * @Hours) + @PartsCost)
  END
  单击 Save(保存)以保存函数,或者在 File(文件)菜单中,单击 Save (保存<函数名称>)。函数将作为对象保存在数据库中。
  SQL 编辑器
  SQL 编辑器用颜色区分代码中的 Transact-SQL 关键字以尽可能减少语法错误,并使代码
更易于阅读。它还提供了用以创建新函数和存储过程的模板。SQL 编辑器还在每个 Transact
SQL 语句的周围放置了细线框,以将 Transact-SQL 代码分隔成命令段,并标识可以使用查询
和视图设计器构建和修改的 Transact-SQL 语句块。
  查询和视图设计器
  为了演示查询和视图设计器是如何工作的,我们将在服务器资源管理器中创建一个存储过
程,该存储过程使用了我们刚刚创建的函数。
  创建存储过程
  在 ServiceCall 连接下,右键单击 Stored Procedures(存储过程)节点,然后单击
New Stored Procedure(新建存储过程)。这将打开 SQL 编辑器窗口,其中带有一个新存储
过程模板。
  
  图 9:创建存储过程模板
  在 SQL 编辑器窗口中,为 BrowseInvoiceTotals 存储过程键入以下代码:
  Create PROCEDURE dbo.BrowseInvoiceTotals as

   Declare @TotalInvoice as money
   Set @TotalInvoice = dbo.ComputeServiceCallTotal(50, 5, 200)
   Select c.CustomerID, c.CustomerName, sc.ServiceDate,
   dbo.ComputeServiceCallTotal(sc.LaborRate, sc.Hours, sc.PartsCost)
   as TotalInvoice
   From Customers c
   Inner Join ServiceCall sc on c.CustomerID = sc.CustomerID
  Return
  注意:用来声明和计算硬编码的 @TotalInvoice 值的代码仅用于演示目的。
  完成存储过程后,将其保存在数据库中:在 File(文件)菜单中,单击 Save(保存)。
  请注意 SELECT 语句周围的细线框。在 Transact-SQL 查询框中单击右键,然后单击
Design SQL Block(设计 SQL 块)。这将启动查询和视图设计器,用于图形化构建或修改查
询(参见图 10)。
  
  图 10:查询和视图设计器表(单击图片以查看大图像)
  查询和视图设计器包括四个部分。最上面的部分包含关系图窗格,显示正在查询的表。您
可以添加或删除表、选择或取消选择列、添加或删除表联接以及在此部分中按列指定顺序。第
二部分包含网格窗格,其中显示了查询中的列,并允许您选择排序类型和排序顺序、过滤标准
,以及按列分组。第三部分包含 SQL 窗格,其中显示了查询的 SQL 语法。如果在此窗格中
修改查询,其他窗格将更新以反映这些更改。如果对查询所做的更改不能在其他窗格中表达出
来,这些更改将不可用。第四部分包含结果窗格,其中显示执行查询后的查询结果。
  查询和视图设计器对于视图和查询的工作原理相同,只是有些功能是专用于视图的。其中
一个专用于 SQL Server 2000 的功能就是创建索引视图。
  创建索引视图
  打开服务器资源管理器,右键单击 Views(视图),然后单击 New View(新建视图)。
  将 Customers 表添加到视图中,然后关闭 Add Table(添加表)对话框。
  在关系图窗格中,选中 CustomerID 复选框和 CustomerName 复选框。
  要使用索引,右键单击关系图窗格的背景,然后单击 Manage Indexes(管理索引)。这
将打开 Indexes(索引)对话框,从中可以指定相关联的索引。您必须对视图中的表具有适当
  关闭 Indexes(索引)对话框,然后关闭查询和视图设计器。
  您也可以使用查询设计器来浏览表和更新表的内容。
  在服务器资源管理器中,展开 ServiceCall 数据连接节点,展开表节点,右键单击一个
表,然后单击 Retrieve Data from Table(从表中检索数据)。
  与表内容一起出现的数据网格就是查询设计器数据网格。请注意,一个工具栏将与数据网
格一同打开,可用于访问关系图窗格、SQL 窗格、网格窗格以及查询设计器的结果窗格。同样
,这些功能也非常类似于企业管理器中的功能。
  调试存储过程
  服务器资源管理器中另外一个强大的功能是存储过程调试。要调试 Brows
eInvoiceTotals 存储过程,请打开服务器资源管理器,然后导航到 ServiceCall 连接中的
存储过程节点。右键单击 BrowseInvoiceTotals,然后单击 Step Into Stored Procedure(
单步执行存储过程)。您也可以双击存储过程以打开编辑器,然后在 Database(数据库)菜
单上,单击 Step Into Stored Procedure(单步执行存储过程)。
  按 F11 键逐行执行存储过程,并注意当到达语句 Set @TotalInvoice =
dbo.ComputeServiceCallTotal(50, 5, 200) 时,调试器将离开存储过程并进入该函数。完成
函数的调试后,调试器将返回存储过程。要查看变量 @TotalInvoice 的内容,可以将鼠标指
针移到该变量之上,或者右键单击该变量并设置一个观察变量。您也可以在 Locals(局部变
量)窗口中查看变量的内容:在 Debug (调试)菜单中,突出显示 Windows(窗口),然后
单击 Locals(局部变量)。在图 11 中,在执行 Set 语句后,Locals(局部变量)窗口将
显示 @TotalInvoice 的值为 450.0000。同样,从 Visual Studio .NET IDE 中也可以访问
Transact-SQL 语句调试工具。
  
  图 11:SQL 调试器窗口表(单击图片以查看大图像)
  SQL 调试器具有某些限制,包括:
  表变量不能在 Locals(局部变量)窗口中显示。
  Sql_variant、text、ntext、image 和 cursor 变量可以在 Locals(局部变量)窗口中
  不支持大于 64 KB 的存储过程。
  不支持超过 32 层嵌套存储过程调用。
  不支持向一个存储过程传递超过 1,023 个参数。
  有关其他限制,请参阅 SQL Debugging Limitations(英文)。
  注意:SQL 调试器使用分布式组件对象模型 (DCOM) 在客户端计算机和 SQL Server 之间
进行通信。要使调试器正常工作,必须使用 Dcomcnfg.exe 设置正确的 DCOM 权限。有关详细
信息,请参阅“Transact-SQL 调试器疑难解答”。此外,要进行调试,SQL Server 不能作
为系统帐户运行。与 MSSQLSERVER 服务相关联的登录必须是一个有效的用户帐户。
  数据集
  现在,我们有了 ServiceCall 数据库和连接,一个用户定义的函数,以及一个存储过程
。下一步,我们将使用该存储过程来创建一个用于填充数据网格的数据集。
  创建数据集
  打开工具箱:在 View(视图)菜单中,单击 Toolbox(工具箱)。
  在工具箱中,单击 Data(数据)选项卡,然后将一个 SqlDataAdapter 控件拖到 Form1
上。这将在 Form1 的设计窗口底部放置一个 SqlDataAdapter1 的图标,然后启动数据适配
器配置向导。数据适配器配置向导收集与适配器将要管理的数据有关的信息。
  当向导提示您提供要使用的数据连接时,指定 ServiceCall 连接。   
  图 12:选择数据连接属性表
  下一步,从以下选项中选择一个查询类型:
  Use SQL statements(使用 SQL 语句)- 提供一个 Transact-SQL 语句或使用查询生成
  Create new stored procedures(创建新存储过程)- 向导自动基于自身提供的
Transact-SQL 语句创建选择、插入、更新和删除等存储过程。
  Use existing stored procedures(使用现有存储过程)- 最多可以指定四个现有的存储
过程,分别对应以下四种操作。您不必指定全部四个存储过程。对于指定的每个存储过程,
SqlDataAdapter 被配置为将存储过程与相应的数据库操作相关联:
   Select - 从数据库中读取现有数据
   Insert - 向数据库的一个或多个表中插入新行
   Update - 更新现有行
   Delete - 删除现有行
  无论选择何种查询类型,都可以选择使用图形化的查询工具来生成查询,并从以下高级
  Generate Insert, Update and Delete statements(生成 Insert、Update 和 Delete
语句)- 基于 Select 语句生成 Insert、Update 和 Delete 语句。
  Use optimistic concurrency(使用开放式并发)- 修改 Update 和 Delete 语句以确定
  Refresh the dataset(刷新数据集)- 添加一个 Select 语句以检索标识列值并刷新由
  选择 Use existing stored procedures(使用现有存储过程)作为查询类型。
  
  图 13:选择查询类型属性表
  在 Bind Commands to Existing Stored Procedures(将命令绑定到现有存储过程)页面
中,在 Select(选择)下拉列表框中,选择 BrowseInvoiceTotals。
  
  图 14:将命令绑定到现有存储过程属性表
  忽略 Insert(插入)、Update(更新)和 Delete(删除)下拉列表。单击 Next(下
一步),然后单击 Finish(完成)。
  
  图 15:查看向导结果
  下一步,我们将配置 SqlDataAdapter 生成的数据集。



Copyright © 2004 wanxu.com All Rights Reserved