演练:操作数据 (Visual Basic) (LINQ to SQL)

更新:November 2007

本演练提供了用于在数据库中添加、修改和删除数据的基本端对端 LINQ to SQL 方案。您将使用一个 Northwind 示例数据库来添加一位客户,更改该客户的姓名,然后删除一个订单。

说明:

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置

本演练是使用 Visual Basic 开发设置编写的。

先决条件

本演练需要完成以下准备工作:

  • 本演练使用专用文件夹(“c:\linqtest2”)来保存文件。请在开始本演练前创建此文件夹。

  • Northwind 示例数据库。

    如果您的开发计算机上没有此数据库,您可以从 Microsoft 下载网站下载它。有关说明,请参见下载示例数据库 (LINQ to SQL)。下载此数据库后,请将 northwnd.mdf 文件复制到 c:\linqtest2 文件夹。

  • 从 Northwind 数据库生成的 Visual Basic 代码文件。

    可以使用对象关系设计器或 SQLMetal 工具生成此文件。本演练是通过使用 SQLMetal 工具以及如下命令行编写的:

    sqlmetal /code:"c:\linqtest2\northwind.vb" /language:vb "C:\linqtest2\northwnd.mdf" /pluralize

    有关更多信息,请参见 代码生成工具 (SqlMetal.exe)

概述

本演练由六项主要任务组成:

  • 在 Visual Studio 中创建 LINQ to SQL 解决方案。

  • 向项目添加数据库代码文件。

  • 创建新的客户对象。

  • 修改客户的联系人姓名。

  • 删除订单。

  • 将这些更改提交到 Northwind 数据库。

创建 LINQ to SQL 解决方案

此任务为第一项任务,在此任务中,您要创建一个 Visual Studio 解决方案,此解决方案包含生成和运行 LINQ to SQL 项目所必需的引用。

创建 LINQ to SQL 解决方案

  1. 在 Visual Studio“文件”菜单上单击“新建项目”。

  2. 在“新建项目”对话框的“项目类型”窗格中,单击“Visual Basic”。

  3. 在“模板”窗格中,单击“控制台应用程序”。

  4. 在“名称”框中键入 LinqDataManipulationApp。

  5. 单击“确定”。

添加 LINQ 引用和指令

本演练用到默认情况下您的项目中可能未安装的程序集。如果在您的项目中未将 System.Data.Linq 作为引用列出(在“解决方案资源管理器”中单击“显示所有文件”并展开“引用”节点),请按照以下步骤中的说明添加它。

添加 System.Data.Linq

  1. 在“解决方案资源管理器”中,右击“引用”,然后单击“添加引用”。

  2. 在“添加引用”对话框中,依次单击“.NET”、System.Data.Linq 程序集和“确定”。

    此程序集即被添加到项目中。

  3. 在代码编辑器中,在“Module1”上面添加以下指令:

    Imports System.Data.Linq
    Imports System.Data.Linq.Mapping
    

将 Northwind 代码文件添加到项目

以下这些步骤假定您已使用 SQLMetal 工具从 Northwind 示例数据库生成了代码文件。有关更多信息,请参见本演练前面介绍的“先决条件”一节。

将 northwind 代码文件添加到项目

  1. 在“项目”菜单上单击“添加现有项”。

  2. 在“添加现有项”对话框中,定位到 c:\linqtest2\northwind.vb,然后单击“添加”。

    northwind.vb 文件即被添加到项目中。

设置数据库连接

首先,测试与数据库的连接。特别要注意,数据库的名称 Northwnd 不含 i 字符。如果在后面的步骤中产生错误,请检查 northwind.vb 文件以确定 Northwind 分部类的拼写是否正确。

设置并测试数据库连接

  1. 将下面的代码键入或粘贴到 Sub Main 中:

    ' Use a connection string, but connect to
    '     the temporary copy of the database.
    Dim db As New Northwnd _
        ("C:\linqtest2\northwnd.mdf")
    
    ' Keep the console window open after activity stops.
    Console.ReadLine()
    
  2. 现在按 F5 测试应用程序。

    “控制台”窗口即会打开。

    关闭应用程序,方法是在“控制台”窗口中按 Enter,或在 Visual Studio 的“调试”菜单上单击“停止调试”。

创建新实体

创建新实体是简单的操作。可以使用 New 关键字创建对象(如 Customer)。

在本节及后续各节中,您将只对本地缓存进行更改。如果您不调用 SubmitChanges,则不会向数据库发送任何更改,一直到本演练结束都是如此。

添加新的 Customer 实体对象

  1. 通过在 Sub Main 中的 Console.ReadLine 前添加如下代码,创建一个新的 Customer:

    ' Create the new Customer object.
    Dim newCust As New Customer()
    newCust.CompanyName = "AdventureWorks Cafe"
    newCust.CustomerID = "A3VCA"
    
    ' Add the customer to the Customers table.
    db.Customers.InsertOnSubmit(newCust)
    
    Console.WriteLine("Customers matching CA before insert:")
    
    Dim custQuery = _
        From cust In db.Customers _
        Where cust.CustomerID.Contains("CA") _
        Select cust
    
    For Each cust In custQuery
        Console.WriteLine("Customer ID: " & cust.CustomerID)
    Next
    
  2. 按 F5 调试解决方案。

    控制台窗口中显示的结果如下:

    Customers matching CA before insert:

    Customer ID: CACTU

    Customer ID: RICAR

    请注意,新行不会出现在结果中,因为新数据尚未提交到数据库。

  3. 在“控制台”窗口中按 Enter 以停止调试。

更新实体

在以下步骤中,您将检索一个 Customer 对象并修改其属性之一。

更改客户的姓名

  • 将下面的代码添加到 Console.ReadLine() 上方:

    Dim existingCust = _
        (From cust In db.Customers _
        Where cust.CustomerID = "ALFKI" _
        Select cust).First()
    
    ' Change the contact name of the customer.
    existingCust.ContactName = "New Contact"
    

删除实体

使用同一客户对象,您可以删除第一个订单。

下面的代码演示如何切断行与行之间的关系,以及如何从数据库中删除行。

删除行

  • 在紧靠在 Console.ReadLine() 上方的位置添加以下代码:

    ' Access the first element in the Orders collection.
    Dim ord0 As Order = existingCust.Orders(0)
    
    ' Access the first element in the OrderDetails collection.
    Dim detail0 As OrderDetail = ord0.OrderDetails(0)
    
    ' Display the order to be deleted.
    Console.WriteLine _
        (vbCrLf & "The Order Detail to be deleted is: OrderID = " _
        & detail0.OrderID)
    
    ' Mark the Order Detail row for deletion from the database.
    db.OrderDetails.DeleteOnSubmit(detail0)
    

将更改提交到数据库

创建、更新和删除对象所需执行的最后一步是将真正将更改提交到数据库。如不执行这一步,您所做的更改仅限本地使用,不会出现在查询结果中。

将更改提交到数据库

  1. 在紧靠 Console.ReadLine 上方的位置插入以下代码:

    db.SubmitChanges()
    
  2. 将下面的代码插入到 SubmitChanges 后面,以显示提交更改前后的效果:

    Console.WriteLine(vbCrLf & "Customers matching CA after update:")
    Dim finalQuery = _
        From cust In db.Customers _
        Where cust.CustomerID.Contains("CA") _
        Select cust
    
    For Each cust In finalQuery
        Console.WriteLine("Customer ID: " & cust.CustomerID)
    Next
    
  3. 按 F5 调试解决方案。

    控制台窗口显示如下:

    Customers matching CA before update:
    Customer ID: CACTU
    Customer ID: RICAR
    
    The Order Detail to be deleted is: OrderID = 10643
    
    Customers matching CA after update:
    Customer ID: A3VCA
    Customer ID: CACTU
    Customer ID: RICAR
    
  4. 在“控制台”窗口中按 Enter 以停止调试。

说明:

通过提交更改添加了新的客户后,您无法再次按原样执行此解决方案,因为您无法再次按原样添加相同的客户。若要再次执行此解决方案,请更改要添加的客户 ID 值。

请参见

概念

通过演练学习 (LINQ to SQL)