适用于:
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 Edition)
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 Servers(SQL 服务器)的节点,使用该节点可以访问可视化数据库工具而无需创建数据连接。创建数据连接后,也可以通过 Data Connections(数据连接)节点访问可视化数据库工具。
创建新的 SQL Server 数据库
使用 Visual Studio .NET Enterprise Edition,用户可以在 Visual Studio .NET IDE 中创建新的 SQL Server 数据库。在以下过程中,我们将创建一个名为 ServiceCall 的示例数据库。 创建新的数据库
打开服务器资源管理器:在 View(视图)菜单中,单击 Server Explorer(服务器资源管理器)。
Cascade Update Related Fields(级联更新相关字段)- 在主键更新后,使数据库将新键值传播到相应的外键。
Cascade Delete Related Records(级联删除相关的记录)- 删除主键表中的行时,使数据库从外键表中删除相应的行。
选择 Cascade Delete Related Records(级联删除相关的记录),单击 Close(关闭),然后单击 Save(保存)。设置此选项将使 SQL Server 从 ServiceCall 表中删除与从 Customers 表中删除的每行的 CustomerID 匹配的所有行。
注意:系统将显示一个 Save Warning(保存警告)对话框,其中显示消息“以下各表将保存到数据库中。是否继续?”。将列出 Customers 表和 ServiceCall 表。单击 Yes(是)。显示保存警告信息是因为打开了 Warn about Tables Affected(表受到影响时警告)选项;您可以在 Save Warning(保存警告)对话框中关闭此选项。
注意:数据库设计器要求使用 Visual Studio .NET Enterprise Edition。
您可以为给定的数据库创建任意数目的关系图,一个表可以出现在任意数目的关系图中。这些关系图还可以用来记录数据库的设计。
使用 SQL Server 数据库关系图时,需要注意一些事项。有关详细信息,请参阅 Visual Studio .NET 文档中的“SQL Server 数据库的数据库设计器注意事项”。该主题包含了更改数据类型、区分大小写以及其他信息。 创建数据库关系图
系统将检查网格中每一行的 RowStatus、调用相应的存储过程并传入正确的参数以处理请求的操作。
此示例展示了 Visual Studio .NET IDE 和框架的强大功能。我们仅使用了几行代码,就创建了功能完备的表维护应用程序。
使用 ADO.NET 访问 SQL Server
Microsoft .NET Framework 提供了名为 ADO.NET 的 ADO 的新版本。ADO.NET 功能得到了增强,能够更好地支持分布式应用程序的开发,并主要依赖 XML 作为其内部数据结构。
在以前版本的 ADO 中,Recordset 对象是开发人员用于处理来自数据存储的数据的主要对象。在 ADO.NET 中,DataSet 对象取代了 Recordset 对象。DataSet 是用户使用的数据在内存中的副本。DataSet 可以包含一个或多个 DataTables。您可以将 DataSet 视为一个虚拟关系数据库。DataSet 完全独立于原始数据源,而且不是用来与数据源进行直接通信。ADO.NET 是使用托管提供程序与数据源进行通信的。
ADO.NET 提供两种托管提供程序:一种用于 SQL Server 数据库,另一种用于任何 OLE DB 兼容数据库。到目前为止,我们创建的所有示例都使用了 SQL Server 托管提供程序。如果查看工具箱中 Data(数据)下的选项,您会注意到三对名称相同但前缀不同的控件。下表列出了这三对控件。
SQL Server
OLE DB
SqlDataAdapter
OLEDBDataAdapter
SqlDataConnection
OLEDBDataConnection
SqlCommand
OLEDBCommand
前缀为 OLEDB 的控件表示 OLE DB 托管提供程序,可用于访问所有与 OLE DB 兼容的数据库。这些控件与当前的 ADO 对象类似,但已被改写为托管代码,因而可以在 .NET Framework 中使用。
前缀为 SQL 的控件表示 SQL Server 托管提供程序,只能用于 SQL Server。与其 OLE DB 的对应控件相比,这些控件具有一些优点。首先,这些对象使用本地表格数据流 (TDS) 接口以获得最佳性能。OLE DB 对象所需的其他接口层已被删除,这使数据库的访问速度更快。其次,从这些控件中创建的 SQL 对象具有其他一些方法,这些方法利用了专用于 SQL Server 的功能。这为使用 SQL Server 进行设计和编程提供了更大的灵活性。
我们在前面创建的示例应用程序中使用了 ADO.NET,而 Visual Studio .NET 为我们处理了大多数编码工作,我们所要做的就是通过 IDE 的用户界面配置数据集和数据适配器。现在,让我们看看使用 ADO.NET 从表中选择、插入、更新和删除数据时所需的 Microsoft Visual Basic? .NET 编码。首先看一下 Select 语句的代码:
Dim strCmdText As String
Dim rowsProcessed As Integer
Dim CustomerDS As New DataSet()
strCmdText = "Select * from Customers"
Dim SqlDataAdapter2 As New SqlDataAdapter(strCmdText, _
"Data Source=localhost;Initial Catalog=ServiceCall;User
ID=sa;passsword=yourpassword")
SqlDataAdapter2.Fill(CustomerDS, "Customers")
在此代码示例中,我们首先定义了要使用的变量和对象,其中包括 CustomersDS,它是一个 ADO.NET DataSet 对象。然后我们定义了查询,该查询将填充变量 strCmdText 中的数据集。下一步,我们定义一个 ADO.NET SqlDataAdapter 对象 (SqlDataAdapter2),将查询和数据库连接字符串作为参数提供。请注意,我们使用的是 SQL Server ADO.NET 托管提供程序。最后,通过调用 SqlDataAdapter 对象的 Fill 方法,填充 CustomerDS 并在名为 Customers 的 DataSet 中创建一个表。
因为 SqlDataAdapter2 是使用查询和连接串字符串定义的,所以 Fill 方法将建立到 SQL Server 数据库的连接、执行查询并将结果返回到 DataSet。
下一步,我们将看一看在表中插入行的代码:
Dim strCmdText As String
Dim rowsProcessed As Integer
Dim sqlConn As New SqlConnection _
("Data Source=localhost;Initial Catalog=ServiceCall;User
ID=sa;password=yourpassword")
strCmdText = "INSERT INTO Customers VALUES ('Cust4', 'Customer Four', " _
& "'Cust4 Address', 'City', 'ST', '11111','(888)-123-4567')"
Dim sqlCmd As New SqlCommand(strCmdText, sqlConn)
sqlCmd.Connection.Open()
rowsProcessed = sqlCmd.ExecuteNonQuery()
Dim strCmdText As String
Dim rowsProcessed As Integer
Dim sqlConn As New SqlConnection _
("Data Source=localhost;Initial Catalog=ServiceCall;User
ID=sa;password=yourpassword")
strCmdText = "Update Customers Set CustomerName = 'Updated Customer' " _
& "Where CustomerID = 'Cust4'"
Dim sqlCmd As New SqlCommand(strCmdText, sqlConn)
sqlCmd.Connection.Open()
rowsProcessed = sqlCmd.ExecuteNonQuery()
以下代码将删除表中的一行。
Dim strCmdText As String
Dim rowsProcessed As Integer
Dim sqlConn As New SqlConnection _
("Data Source=localhost;Initial Catalog=ServiceCall;User ID=sa")
strCmdText = "Delete Customers Where CustomerID = 'Cust4'"
Dim sqlCmd As New SqlCommand(strCmdText, sqlConn)
sqlCmd.Connection.Open()
rowsProcessed = sqlCmd.ExecuteNonQuery()
这些示例展示了如何使用 SqlCommand 对象的 ExecuteNonQuery 方法。SqlCommand 对象还具有其他几个方法,包括专用于 SQL Server 处理 XML 数据的方法。在下一个示例中,我们将介绍它的工作原理。
XML 和 Visual Studio .NET
SQL Server 2000 具有对 XML 的内置支持。其中一个功能是 Select 语句中的 For XML 子句,它返回一个作为 XML 的结果集。SqlCommand 对象具有 ExecuteXMLReader 方法,此方法利用 SQL Server 中的这一功能。
下一个示例将展示 SqlCommand 对象的另一个应用。我们将查询 Customers 表,将结果作为 XML 返回,然后在窗体的文本框中显示该 XML。 查询 Customers 表并将结果作为 XML 返回
双击该按钮打开单击事件的代码窗口,然后添加以下代码。请记住更改数据源、用户 ID 和密码,使其与您的服务器匹配。
Dim XMLTxtReader As Xml.XmlTextReader
Dim StringBuilder As New System.Text.StringBuilder()
Dim XMLOutput As String
Dim SQLCommand As New System.Data.SqlClient.SqlCommand()
Dim SQLServiceCallConn As New _
System.Data.SqlClient.SqlConnection _
("Data Source=YourServer;Initial Catalog=ServiceCall;User
ID=xx;password=yourpassword")
SQLServiceCallConn.Open()
SQLCommand.Connection = SQLServiceCallConn
SQLCommand.CommandType = CommandType.Text
SQLCommand.CommandText = "Select CustomerID, CustomerName," _
& "Phone from Customers for XML auto"
' 执行 SQL 并返回 XML
XMLTxtReader = SQLCommand.ExecuteXmlReader()
StringBuilder.Append(XMLTxtReader.GetRemainder.ReadToEnd)
XMLOutput = StringBuilder.ToString()
Me.TextBox1.Text = XMLOutput
打开 Form3.vb,在该窗体中 GetXML 按钮旁边添加一个新按钮,然后将新按钮的 Name 属性和 Text 属性更改为 SQLXML。
双击 SQLXML 按钮打开单击事件的代码窗口并添加以下代码。请记住更改数据源、用户 ID 和密码,使其与您的服务器匹配。
Dim strm As System.IO.Stream
Dim sqlXmlCmd As New Microsoft.Data.SqlXml.SqlXmlCommand _
("Provider=SQLOLEDB;Data Source=localhost;" _
& "Initial Catalog=ServiceCall;User ID=sa;password=yourpassword")
sqlXmlCmd.CommandType = Microsoft.Data.SqlXml.SqlXmlCommandType.Sql
sqlXmlCmd.CommandText = ("Select CustomerID, CustomerName," _
& "Phone from Customers for XML auto")
strm = sqlXmlCmd.ExecuteStream()
Dim streamRdr As New System.IO.StreamReader(strm)
Me.TextBox1.Text = streamRdr.ReadToEnd().ToString
数据库项目
通过 Visual Studio .NET,您可以创建为脚本、查询、数据备份文件和命令文件提供储备库的数据库项目。创建和维护数据库项目的方法与其他 Visual Studio .NET 项目相同。通过解决方案资源管理器可以访问数据库项目,其中提供了解决方案内所有项目的分层视图。 创建数据库项目
注意:生成创建脚本需要使用 Visual Studio .NET Enterprise Edition。
生成创建脚本工具是服务器资源管理器中另一个专用于 SQL Server 的功能,此工具有助于使开发人员的工作更加轻松。使用生成创建脚本工具,您可以编写整个数据库或者数据库中的选定对象的脚本文件。然后可以使用该脚本文件来恢复数据库或对象,或在其他服务器上部署数据库。
除了创建脚本外,您还可以从单个表中导出数据。这在测试过程中这是一个很有用的工具。如果需要进行多次重复测试,而在这期间表将被更新或删除,则可以将表中的数据导出到一个文件中,然后在每个测试开始时恢复,以提供一个一致的起点。
为了演示这些功能,我们将编写 Customers 表的脚本,并将数据导出到一个备份文件,以便能够将数据恢复到其初始状态。 生成脚本
在服务器资源管理器中的 Data Connections(数据连接)下,展开 Tables(表)节点,右键单击 Customers 表,然后单击 Generate CreateScripts(生成创建脚本)。如果使用的不是 Windows 2000 或者 Windows NT 的集成安全性,系统可能会提示您为运行 SQL Server 的计算机提供用户 ID 和密码。将打开 Generate Create Scripts(生成创建脚本)对话框(使用过 SQL Server 企业管理器的用户应该对此对话框非常熟悉)。
该对话框包含三个选项卡:General(常规)、Formatting(设置格式)和 Options(选项)。接受这三个选项卡的默认设置,然后单击 OK(确定)。将打开 Browse for Folder(浏览文件夹)对话框。请注意,Visual Studio .NET 已经选择了前面创建的数据库项目中的 Create Scripts 文件夹。