操作指南:数据处理(Visual Basic)

本演练提供基本的端到端 LINQ to SQL 方案,用于在数据库中添加、修改和删除数据。 你将使用示例 Northwind 数据库的副本添加客户、更改客户的名称并删除订单。

注释

计算机可能会在以下说明中显示某些 Visual Studio 用户界面元素的不同名称或位置。 你拥有的 Visual Studio 版本以及所使用的设置决定了这些元素。 有关更多信息,请参阅 自定义 IDE

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

先决条件

本演练需要如下内容:

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

  • Northwind 示例数据库。

    如果开发计算机上没有此数据库,可以从Microsoft下载站点下载它。 有关说明,请参阅 下载示例数据库。 下载数据库后,将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 调试菜单上的“停止调试”关闭应用程序。

创建新实体

创建新实体非常简单。 可以使用关键字创建对象(例如CustomerNew)。

在此部分和以下部分中,仅对本地缓存进行更改。 如果您不调用 SubmitChanges,则不会向数据库发送任何更改,一直到本演练结束都是如此。

添加新的 Customer 实体对象

  1. 通过在Customer中的Console.ReadLine之前添加以下代码来创建新的Sub Main

    ' 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. 插入以下代码(after 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 的值。

另请参阅