正 文

Visual Studio 2005中的新DataSet特性


www.7dspace.com  更新日期:2006-2-22 19:24:07  七度空间


  TableAdapter Configuration Wizard

  选择 Data 主菜单中的 Add Query 或 Configure(一个现有查询),或者在设计器中右键单击 TableAdapter,从得到的上下文菜单中选择这两项,可以启动 DataSet 设计器中的 TableAdapter Configuration Wizard。此向导等同于 Visual Studio 2002/2003 的 DataAdapter Configuration Wizard,只不过多了两个附加页面。一个是图 3 所示的 Choose a Query Type 页面。由于 TableAdapter 汇集了针对给定表的所有命令,因此该页面允许您定义多个 Select/Fill 命令和查询 — 任何类型的查询都可以,例如 Update、Insert、Delete 或返回单个值类型的查询。切记,这些更新查询是 TableAdapter 的命名方法,必须直接调用。而且它们还是执行 TableAdapter 的 Update 方法时自动调用的更新查询,这与执行 DataAdapter.Update 方法一样。

  向导中另一个增加的页面是 Choose Methods to Generate 页。在该页中可以选择您所定义的每个查询/命令方法名(一个或多个)。向导为每个命令都提供一个 Fill 和 Get 方法,如图 3 所示。Fill 要求提供需要填写数据的 DataTable,而 Get 方法将返回填写后新创建的 DataTable。



图 3. Choose Methods to Generate 页面中的 Fill 和 Get 方法

  按照典型的用法,您可以为一个 TableAdapter 定义多个 Fill 命令,它将返回同一种架构(多个列),只是 WHERE 子句不同而已。这也是默认情况下向导会为方法名提供一个 FillBy 和 GetDataBy 前缀的原因。不过,您当然可以选择任何名字作为方法名。

  虽然 TableAdapter 可以包含多个 Fill 命令,但在调用其中的 Update 方法时却只能执行一组更新命令。这组命令根据 TableAdapter 的主查询自动生成。第一次创建 TableAdapter 时定义的查询被认为是它的主查询。如果随后定义的任何查询返回的架构与主查询的架构不同,则设计器将显示一个消息框进行提醒。另一方面,如果您修改了主查询的架构,Visual Studio 将修改其他查询的架构以与之匹配。

  通过 TableAdapter Configuration Wizard 添加新命令

  现在,我们将另一个命令添加到 Orders 表的 TableAdapter。

1.选择数据源窗口工具栏中的 Edit DataSet with Designer,打开 DataSet 设计器。

2.选择 Orders 表的 TableAdapter,再从该表的上下文菜单中选择 Add Query。

3.如果您的 Visual Studio 版本中仍然有 Welcome 页,请选择页面上的 Next。之后,显示 Choose a Command Type 页面。

4.要接受默认的 SQL 语句,选择 Next。这时显示 Choose a Query Type 页面。

5.要接受默认的 SELECT 语句,选择 Next。然后,显示 Specify a SQL SELECT Statement 页面。

6.输入下列 SQL 语句。

SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate, 
ShippedDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity, 
ShipRegion, ShipPostalCode, ShipCountry 
FROM Orders
WHERE CustomerID = @CustID

此后,返回由进行查询的 @CustID 参数指定的所有客户 Orders。

7.选择 Next,显示 Choose Methods to Generate 页。

8.选中页面上的两个复选框。将方法名分别改为 FillByCustomer 和 GetDataByCustomer。

9.选择 Next,然后选择 Finish,完成该过程。

  现在请您看一下 DataSet 设计器中的 OrdersTableAdapter,这时出现了第二个命令对 — FillByCustomer 和 GetDataByCustomer,CustomerID 的值就是该命令的一个参数。那么,该方法的参数属于哪种 .NET 类型呢?让我们来讨论一下。

  后台简介

  在 DataSet 设计器或任何相关向导中进行修改时,Visual Studio 都会为一组类型化的类生成代码。具体而言,它将生成以下类:

1.DataSet 类

2.DataTable 类

3.TableAdapter 类

4.DataRow 类

5.DataRowChangeEvent 类

  除了 DataSet 类(每个数据源只有一个)之外,其余四个类对于 DataSet 中定义的表而言是相同的。可通过以下操作查看这些类的代码:

1.在 Solution Explorer 窗口中,单击工具栏上的 Show All Files 按钮,显示与项目相关的所有文件。

2.展开 NorthwindDataSet.xsd 文件的节点。

3.双击文件节点上的 NorthwindDataSet.Designer.vb。这就是为实现组成 DataSet 的那些类而生成的代码。

4.打开代码窗口左上角的 Listbox,将看到本文所用类的列表:

NorthwindDataSet

Order_DetailsDataTable

OrdersDataTable

Order_DetailsRow

OrdersRow

Order_DetailsRowChangeEvent

OrdersRowChangeEvent

Order_DetailsTableAdapter

OrdersTableAdapter

5.选择左侧 Listbox 中的 OrdersTableAdapter 类。

6.再选择右侧 Listbox 中的 FillByCustomer 方法。此时将显示该方法的代码,如下所示:

      Public Overloads Overridable Function FillByCustomer(ByVal dataTable 
         As NorthwindDataSet.OrdersDataTable, ByVal CustID As String) As Integer
            Me.Adapter.SelectCommand = Me.CommandCollection(1)
            If (CustID Is Nothing) Then
                Throw New System.ArgumentNullException("CustID")
            Else
                Me.Adapter.SelectCommand.Parameters(0).Value = CType(CustID,String)
            End If
            If (Me.m_clearBeforeFill = true) Then
                dataTable.Clear
            End If
            Dim returnValue As Integer = Me.Adapter.Fill(dataTable)
            Return returnValue
        End Function

  从该代码片断中我们可以了解几件事情。

FillByCustomer 方法实际上带有两个参数 — 一个是要填写的 OrdersDataTable,另一个是字符串类型的 CustID 参数。

不用检查完文件中的所有代码,我们就可以发现 TableAdapter 类维护着一个命令集合,正是从这个集合中自动将正确的命令指派给 .NET DataAdapter,供其使用这些命令自动与数据库通讯。

如果状态参数的 AllowDBNull 属性设置为 False,该方法会不断检查是否有状态参数的实例传递进来。

如果 DataAdapter 的 SelectCommand 属性已经配置好,则 CustID 的参数值将赋给该属性的参数。

所有配置设置完毕后,即可调用 DataAdapter.Fill () 方法来填写 OrdersDataTable。

  切记,这些代码都不需要您动手编写。它们是已经生成并配置好的代码。花些时间查找一下为您生成的其他类。您将更深入、更广泛地理解这些类的实现方式,甚至还可能学到几个有用的编程技巧。

  注 尽管类型化 DataSet 及其相关类(包括 TableAdapters)均在一个源文件中生成,但 TableAdapters 是在某个独立的命名空间中生成的。这说明应该将实体对象 (DataSets) 与真正的数据访问对象 (TableAdapters) 区分开来。

5页,页码:[1] [2] [3] [4] [5] 

上一篇:一种细腻的导航效果的制作方法
下一篇:站长必读:网站推广之十不可以
Visual Studio 2005中的新DataSet特性 作者:Jackie Goldstein 来源:MSDN
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐