设为首页
加入收藏夹

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

  配置数据集
  在 Form1 上,右键单击 SqlDataAdapter1 图标,然后单击 Generate Dataset(生成
数据集)。
  
  图 16:为 SqlDataAdapter 生成数据集
  在 Generate Dataset(生成数据集)对话框中,选择 New(新建),然后输入名称
  在页面下部的窗口中,BrowseInvoiceTotals(SqlDataAdapter1) 应该被选中。单击 OK(
确定)。
  
  图 17:生成数据集属性表
  下一步,我们将为 Form1 创建窗体元素。
  创建窗体元素
  向 Form1 添加一个 DataGrid 控件。
  打开工具箱,然后单击 Windows Forms(Windows 窗体)。
  将一个 DataGrid 控件拖放到 Form1 上,右键单击 DataGrid 控件,单击 Properties(
属性)。将 DataGrid 控件的 CaptionText 属性更改为 Invoice Report。
  配置 DataGrid 控件的属性以将其绑定到数据:在 Properties(属性)的 Data(数据)
部分中,将 DataSource 属性设置为 BrowseInvoiceTotalsDS1.BrowseInvoiceTotals。
  
  图 18:DataGrid 属性页(单击图片以查看大图像)
  重新设置 DataGrid 控件的大小,使所有的列都可见。
  要填充数据集,向 Form1 中添加一个按钮,然后将其 Text 和 Name 属性更改为
  双击按钮以打开代码窗口。将以下代码行添加到 RunReport_Click 子例程中并保存该应
  BrowseInvoiceTotalsDS1.Clear
  ' 使用 SqlDataAdapter 填充 DS
  SqlDataAdapter1.Fill(BrowseInvoiceTotalsDS1)

  现在,可以测试我们的应用程序了。运行该应用程序,然后单击 RunReport 按钮。
SqlDataAdapter 将连接到数据库,运行我们的存储过程和函数,加载数据集并将数据传递到
数据网格中。输出结果应类似于图 19 所示的结果。
  
  图 19:示例应用程序输出结果(单击图片以查看大图像)
  下一步,我们将创建一个数据维护窗体。
  创建数据维护窗体
  向 ServiceCall 项目中添加一个新窗体 (Form2):在解决方案资源管理器中,右键单击
项目名称,单击 Add(添加),然后单击 Add Windows Form(添加 Windows 窗体)。
  在 Templates(模板)下,单击 Windows Form(Windows 窗体)模板,然后单击 Open(
  向窗体中添加一个 SqlDataAdapter 控件。将启动数据适配器配置向导。
  为 SqlDataAdapter 选择现有 ServiceCall 连接。对于此 SqlDataAdapter 控件,我们
  单击 Create new stored procedures(创建新存储过程),然后单击 Next(下一步)
。将打开 Generate the stored procedures(生成存储过程)页面。
  单击查询生成器,将 Customers 表添加到查询,然后关闭 Add Table(添加表)对话框
  在关系图窗格中,选择所有的列,单击 OK(确定),然后单击 Next(下一步)。
  在 Create the Stored Procedures(创建存储过程)属性页中,分别为四个新存储过程
提供一个名称(此示例中使用了 CustomersSelect、CustomersDelete、CustomersInsert 和
  当向导的最后一页显示成功生成所有存储过程的消息时,单击 Finish(完成)。
  打开 SqlDataAdapter 控件的属性页,查看以下属性;这些属性被设置为我们所提供的存
  SelectCommand.CommandText 的值为 CustomersSelect。
  DeleteCommand.CommandText 的值为 CustomersDelete。
  InsertCommand.CommandText 的值为 CustomersInsert。
  UpdateCommand.CommandText 的值为 CustomersUpdate。
  Visual Studio .NET 基于我们提供的 Select 语句创建了四个存储过程,将其编译到数
据库,并配置了 SqlDataAdapter 控件以使用这些存储过程。
  下一步要生成我们为 Form2 创建的 SqlDataAdapter 的数据集。
  生成数据集
  右键单击 SqlDataAdapter,然后单击 Generate DataSet(生成数据集)。
  将数据集命名为 CustomersDS。
  向窗体中添加一个 DataGrid 控件,将 DataSource 属性设置为 Custome
rsDS1.Customers,将 CaptionText 属性设置为 Maintain Customers。
  重新设置 DataGrid 控件的大小,使所有的列都可见。
  在数据网格下添加一个按钮,将其 Text 属性和 Name 属性更改为 Load。
  在第一个按钮的旁边添加另一个按钮,将其 Text 属性和 Name 属性更改为 Update。
  双击 Load 按钮以打开代码窗口,然后向 Load 按钮的单击事件中添加以下代码:
  CustomersDS1.Clear()
  SqlDataAdapter1.Fill(CustomersDS1)
  在 Update 按钮的单击事件中,添加以下代码:
  SqlDataAdapter1.Update(CustomersDS1)
  在运行应用程序之前,必须将项目的 Startup 对象更改为 Form2。
  更改 Startup 对象
  在解决方案资源管理器中,右键单击 ServiceCall 项目,然后单击 Properties(属性
  在 Startup object(Startup 对象)下,将 Startup 对象更改为 Form2,然后单击 OK
  运行应用程序以打开维护窗体 (Form2)。单击 Load 按钮以加载数据网格,其中带有表中
的现有数据。屏幕应类似于图 20 所示。
  
  图 20:示例应用程序输出结果(单击图片以查看大图像)
  更新 ServiceCall 数据库
  要删除行,请单击该行,然后按 Delete 键。
  要添加新行,请在网格末尾单击空行中的任何一个单元格,然后提供相应的值。
  完成更改后,单击 Update(更新)。
  系统检查网格中每一行的 RowStatus,调用相应的存储过程,并传入正确的参数以处理请
  此示例展示了 Visual Studio .NET IDE 和框架的强大功能。我们仅使用了几行代码,就
  使用 ADO.NET 访问 SQL Server
  Microsoft .NET 框架提供了新版本的 ADO,称为 ADO.NET。ADO.NET 的功能得到了加强
,能够更好地支持分布式应用程序的开发,并主要依赖 XML 作为其内部数据结构。
  在以前版本的 ADO 中,Recordset 对象是开发人员用于处理来自数据存储的数据的主要
对象。在 ADO.NET 中,DataSet 对象取代了 Recordset 对象。一个 DataSet 就是用户使用
的数据在内存中的副本。一个 DataSet 可以包含一个或多个 DataTable。您可以将
DataSet 视为一个虚拟关系数据库。DataSet 与原始数据源完全无关,而且并非设计为与数据
源直接通信。ADO.NET 是使用托管提供程序与数据源进行通信的。
  ADO.NET 提供两种托管提供程序:一种用于 SQL Server 数据库,另一种用于任何 OLE
DB 兼容数据库。到目前为止,我们创建的所有示例都使用了 SQL Server 托管提供程序。如
果查看工具箱中 Data(数据)下的选项,会注意到三对名称相同而前缀不同的控件。下表列
出了这三对控件。
  
  前缀为 OLEDB 的控件表示 OLE DB 托管提供程序,可用于访问任何与 OLE DB 兼容的数
据库。这些控件与当前的 ADO 对象类似,但已被改写为托管代码以便在 .NET 框架中使用。
  前缀为 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
  因为 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()
  我们首先定义将要使用的对象和变量。然后创建一个 ADO.NET SqlConnection 对象
(sqlConn),并将连接字符串作为参数传递给该对象。然后定义查询,该查询将行插入到变量
  下一步,我们定义一个 ADO.NET SqlCommand 对象,并将查询和 SqlConnection 对象作
为参数传递给该对象。然后,我们打开 SqlCommand 对象上的连接,并调用
ExecuteNonQuery 方法。ExecuteNonQuery 方法返回数据库操作所影响的行的数量。
  除了传递给 SqlCommand 对象的查询以外,更新和删除表的代码与插入操作的代码基本相
同。本文列出了这些代码,但因为它与插入操作的代码相同,所以没有对这些代码进行讨论。
  以下代码将更新表中的一行:
   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 方法可以利
  下一个示例将展示 SqlCommand 对象的另一个应用。我们将查询 Customers 表,将结果
  查询 Customers 表并将结果作为 XML 返回
  向项目添加一个新窗体 (Form3) 并向该窗体添加一个文本框。将文本框的 MultiLine
属性更改为 True,Width 属性更改为 504,Height 属性更改为 152,如图 21 所示。
  
  图 21:文本框属性页(单击图片以查看大图像)
  向窗体中添加一个按钮,将其 Name 和 Text 属性更改为 GetXML。
  双击该按钮以打开单击事件的代码窗口,并添加以下代码。请记住更改数据源、用户 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
  您的代码窗口应类似与图 22 所示(数据源、用户 ID 和密码可能会有所不同)。
  
  图 22:带有 GetXML_Click 子例程代码的 Form3 的窗体类(单击图片以查看大图像)
  在此代码示例中,我们首先定义要使用的对象和变量。XMLTextReader 对象用于保存从数
据库返回的数据。StringBuilder 对象用于从 XMLTextReader 对象的数据中创建一个 XML 字
  首先,我们创建一个 SqlConnection 对象 (SQLServiceCallConn) 并传入数据库的连接
参数。然后,设置 SqlCommand 对象 (SqlCommand) 的 CommandType 属性和 CommandText 属
性。请注意,我们在查询中使用了 For XML Auto 语句。这将指示 SQL Server 将查询结果作
  然后,使用 SqlCommand 对象的 ExecuteXmlReader 方法来执行我们的 Transact-SQL 语
句。此方法用于利用 SQL Server 2000 的本地 XML 支持并返回一个 XMLTextReader 对象。
最后一步是使用 StringBuilder 对象从 XMLTextReader 对象中提取一个包含从 SQL Server
  您可以通过导入 System.Text 和 System.Data.SqlClient 名称空间来缩短
StringBuilder、SqlCommand 和 SqlConnection 对象的全限定名称,如图 23 所示。为此,
  Imports System.Text
  Imports System.Data.SqlClient   
  图 23:使用简写表示法定义 StringBuilder 和 SqlConnection 对象的源代码(单击图
  要测试应用程序,请将 Startup 对象更改为 Form3 并运行应用程序(按 F5 键)。单击
GetXML。Customers 表的内容作为 XML 返回并显示在文本框中,如图 24 所示。
  
  图 24:示例应用程序输出结果(单击图片以查看大图像)
  SQLXML 3.0
  在前面的示例中,我们讨论了 SQL Server 对 XML 的内置支持,这有时也称为 SQLXML
。SQLXML 3.0 包含以下托管类,用于在 Visual Studio .NET 中使用 SQLXML。
  
  这些托管类允许您以几种方法处理来自 SQL Server 的 XML 数据,包括:
  执行 SQL 查询以返回 XML 数据
  对 XML 数据应用 XSL 转换
  对 XML 数据执行 XPath 查询
  对于最后一个示例应用程序,我们将扩展以前的示例,使用 SQLXML 托管类以返回来自
  必须将 SQLXML 组件引用添加到项目中后才能使用 SQLXML 托管类。
  添加 SQLXML 组件引用
  打开解决方案资源管理器:在 View(视图)菜单中,单击 Solution Explorer(解决方
  在 ServiceCall 项目下,右键单击 References(引用),然后单击 Add Reference(添
  在 Add Reference(添加引用)对话框中,单击 .NET 选项卡。
  找到名为 Microsoft.Data.SqlXml 的组件,并突出显示该组件。
  单击 Select(选择),然后单击 OK(确定)。
  保存 ServiceCall 项目。
  打开 Form3.vb,在该窗体中 GetXML 按钮的旁边添加一个新按钮,然后将新按钮的
  双击 SQLXML 按钮以打开单击事件的代码窗口,并添加以下代码。请记住更改数据源、用
   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
  在此代码示例中,我们首先定义要使用的对象和变量。Stream 对象 (strm) 将保存从查
询返回的 XML 数据。然后,定义 SqlXmlCommand 对象 (sqlXmlCmd),并将连接字符串作为
  下一步,设置 SqlXmlCommand 对象上的参数。CommandType 被设置为 Sql,它是一个默
认值,在此列出以帮助您理解。CommandText 被设置为查询的值,该查询就是我们在此示例的
第一部分使用的同一个查询。然后,我们将调用 SqlXmlCommand 对象的 ExecuteStream 方法
,该方法将执行 SQL 语句,并将 XML 数据放入 Stream 对象中。
  下一步,我们定义 StreamReader 对象 (streamRdr),并将 Stream 对象 (strm) 作为参
数传递给该对象。这样将使用 XML 数据填充 StreamReader 对象。在最后一步中,我们将加
载带有来自 StreamReader 对象的 XML 数据的文本框。
  仍然将 Startup 对象设置为 Form3,保存项目,运行应用程序(按 F5 键),然后单击
SQLXML 按钮。输出结果应该与单击 GetXML 按钮完全一样,如图 24 所示。
  数据库项目
  Visual Studio .NET 允许您创建为脚本、查询、数据备份文件和命令文件提供存储库的
数据库项目。创建和维护数据库项目的方法与其他 Visual Studio .NET 项目相同。您通过解
决方案资源管理器访问数据库项目,其中提供了解决方案内所有项目的分层视图。
  创建数据库项目
  打开解决方案资源管理器:在 View(视图)菜单中,单击 Solution Explorer(解决方
  右键单击 Solution 'ServiceCall',突出显示 Add(添加),然后单击 New Project(
  在 Project Types:(项目类型)下,展开 Other Projects(其他项目)文件夹,然后
单击 Database Projects(数据库项目)。
  在 Templates(模板)下,单击 Database Project(数据库项目)模板。
  将项目命名为 ServiceCallDB,然后单击 OK(确定)。   
  图 25:Add New Project(添加新项目)对话框(单击图片以查看大图像)
  在 Add Database Reference(添加数据库引用)对话框中,选择 ServiceCall 数据库
的连接,然后单击 OK(确定)以创建项目。
  
  图 26:Add Database Reference(添加数据库引用)对话框
  生成创建脚本和导出数据
  注意:生成创建脚本需要使用 Visual Studio .NET Enterprise Edition。
  生成创建脚本工具是服务器资源管理器中另一个专用于 SQL Server 的功能,有助于使开
发人员的工作更加轻松。生成创建脚本工具允许您编写整个数据库或者数据库中的选定对象的
脚本文件。然后,可以使用该脚本文件来恢复数据库或对象,或在其他服务器上部署数据库。
  除了创建脚本外,您还可以从单个表中导出数据。这在测试过程中是一个很有用的工具。
如果需要进行多次重复测试,而在这期间表将被更新或删除,则可以将表中的数据导出到一个
文件中,然后在每个测试开始时恢复,以提供一个一致的起点。
  为演示这些功能,我们将编写 Customers 表的脚本,并将数据导出到一个备份文件,以
  生成脚本
  在服务器资源管理器中的 Data Connections(数据连接)下,展开 Tables(表)节点,
右键单击 Customers 表,然后单击 Generate Create Scripts(生成创建脚本)。如果使用
的不是 Windows 2000 或者 Windows NT 的集成安全性,系统可能会提示您为运行 SQL
Server 的计算机提供用户 ID 和密码。将打开 Generate Create Scripts(生成创建脚本)
对话框(该对话框与使用 SQL Server 企业管理器的对话框十分类似)。
  对话框包含三个选项卡:General(常规)、Formatting(格式)和 Options(选项)。
接受这三个选项卡的默认设置,然后单击 OK(确定)。将打开 Browse for Folder(浏览文
件夹)对话框。请注意,Visual Studio .NET 已经选择了我们在前面创建的数据库项目中的
  单击 OK(确定)。将创建 Customers 表的脚本,并放在 Database Project(数据库项
  创建了以下四个文件。   
  将数据表导出到文件
  在服务器资源管理器中,右键单击 Customers 表,然后单击 Export Data(导出数据)
。Browse for Folder(浏览文件夹)对话框将再次打开,并定位到数据库项目中的 Create
  单击 OK(确定)。Customers 表中的数据被放置在一个名为 Dbo.Customers.dat 的文
  数据库项目命令文件
  重要信息:命令文件要求使用 Visual Studio .NET Enterprise Edition。
  使用命令文件,您可以将数据库项目中的若干脚本打包到一个命令中,从而将多个脚本的
  创建命令文件
  在解决方案资源管理器中,右键单击包含要打包的脚本的数据库项目文件夹,在此示例中
  单击 Create Command File(创建命令文件)。将显示 Create Command File(创建命令
  将文件命名为 RestoreCustomers.cmd。   选择要包含到文件中的验证类型和脚本。对于此示例,单击 Add All >>(全部添加>>),然后单击 Add Data(添加数据)。将显示 Add Data(添加数据)对话框。
  Add Data(添加数据)对话框将显示该命令文件可以使用的所有数据文件。选择
Dbo.Customers.dat,然后单击 OK(确定)。
  在 Create Command File(创建命令文件)对话框中,单击 OK(确定)。
RestoreCustomers.cmd 文件将放置在 Create Scripts(创建脚本)文件夹中。
  运行命令文件
  在数据库项目中,右键单击命令文件,然后单击 Run(运行)。
  注意:命令文件只有在 Windows 2000 Server 或更高版本中才能工作。
  小结
  本文中的示例阐明了 Visual Studio .NET IDE 中内置的数据库工具的强大功能。不用退
出 Visual Studio .NET IDE 就能建立一个完整的应用程序,其中包括数据库、用户定义函数
、存储过程和应用程序代码。此外,我们还能使用 Visual Studio .NET IDE 中包含的同样丰
富的调试工具,在存储过程上执行源代码级别的调试。Visual Studio .NET 为您提供了更快
  附录 1:数据库加载脚本
  要使用示例数据填充 ServiceCall 数据库中的表,请在 SQL 查询分析器中运行以下数
  Use ServiceCall
  Insert into Customers
  values('cust1','Customer One','123 Main St.','Chicago','IL','60601','(312)
   555-1212')
  Insert into Customers
  values('cust2','Customer Two','248 Elm
   St.','Serverville','IL','60679','(872) 555-4519')
  Insert into Customers
  values('cust3','Customer Three','831 First

   St.','Netville','IL','60831','(763) 555-6728')
  Insert into ServiceCall (CustomerID, ServiceDate, LaborRate, Hours,
   PartsCost)
  values('cust1','Sep 14 2001 12:00AM', 55.00, 3, 200.00)
  Insert into ServiceCall (CustomerID, ServiceDate, LaborRate, Hours,
   PartsCost)
  values('cust1','Sep 17 2001 12:00AM', 55.00, 1.5, 70.00)
  Insert into ServiceCall (CustomerID, ServiceDate, LaborRate, Hours,
   PartsCost)
  values('cust1','Sep 19 2001 12:00AM', 55.00, 2, 0.00)
  Insert into ServiceCall (CustomerID, ServiceDate, LaborRate, Hours,
   PartsCost)
  values('cust2','Sep 25 2001 12:00AM', 60.00, 3.5, 180.00)
  Insert into ServiceCall (CustomerID, ServiceDate, LaborRate, Hours,
   PartsCost)
  values('cust3','Sep 27 2001 12:00AM', 65.00, 4.5, 275.00)
  附录 3:关于作者
  Matt Mannion 是 Clarity Consulting Inc. 的业务经理,Clarity Consulting Inc. 是
一家总部位于芝加哥的技术咨询公司,也是 Microsoft 的金牌认证伙伴。Matt 为包括零售业
、金融服务业、出版业和银行业在内的各种行业设计开发了多个大规模、基于 Web 的系统。
您可以通过以下地址与 Matt 联系:mmannion@claritycon.com。
  Jon Rauschenberger 是 Clarity Consulting Inc. 的合伙人和技术主管。Jon 经常出席
各种会议(如 Microsoft Tech*Ed、VBITS、Comdex 和 DevDays 等)并发表演讲。Jon 还是
MSDN 芝加哥地区的区域主管。 您可以通过以下地址与 Jon 联系:jrausch@claritycon.com



Copyright © 2004 wanxu.com All Rights Reserved