演练:数据处理(C#)

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

注释

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

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

先决条件

本演练需要如下内容:

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

  • Northwind 示例数据库。

    如果开发计算机上没有此数据库,可以从Microsoft下载站点下载它。 有关说明,请参阅 下载示例数据库。 下载数据库后,将northwnd.mdf文件复制到 c:\linqtest6 文件夹。

  • 从 Northwind 数据库生成的 C# 代码文件。

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

    sqlmetal /code:“c:\linqtest6\northwind.cs” /language:csharp “C:\linqtest6\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 C#”。

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

  4. “名称 ”框中,键入 LinqDataManipulationApp

  5. “位置” 框中,验证要存储项目文件的位置。

  6. 单击 “确定”

添加 LINQ 引用和指令

本演练用到默认情况下您的项目中可能未安装的程序集。 如果 System.Data.Linq 未列为项目中的引用,请添加它,如以下步骤中所述:

添加 System.Data.Linq

  1. 解决方案资源管理器中,右键点击引用,然后点击添加引用

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

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

  3. 在Program.cs顶部添加以下指令:

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    

将 Northwind 代码文件添加到项目

这些步骤假定你已使用 SQLMetal 工具从 Northwind 示例数据库生成代码文件。 有关详细信息,请参阅本演练前面的先决条件部分。

将 “northwind” 代码文件添加到项目中

  1. 项目 菜单上,单击 添加现有项

  2. “添加现有项 ”对话框中,导航到 c:\linqtest6\northwind.cs,然后单击“ 添加”。

    northwind.cs文件将添加到项目中。

设置数据库连接

首先,测试与数据库的连接。 请注意,数据库 Northwnd 没有 i 字符。 如果在后续步骤中出现错误,请查看 northwind.cs 文件以确定 Northwind 部分类的拼写方式。

设置和测试数据库连接

  1. 在 Program 类的方法中键入或粘贴以下代码 Main

    // Use the following connection string.
    Northwnd db = new Northwnd(@"c:\linqtest6\northwnd.mdf");
    
    // Keep the console window open after activity stops.
    Console.ReadLine();
    
  2. 此时按 F5 测试应用程序。

    此时会打开 控制台 窗口。

    可以通过在控制台窗口中按 Enter 或单击 Visual Studio 调试菜单上的“停止调试”来关闭应用程序。

创建新实体

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

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

添加新的 Customer 实体对象

  1. Customer方法中的Console.ReadLine();之前添加以下代码以创建新的Main

    // Create the new Customer object.
    Customer newCust = new Customer();
    newCust.CompanyName = "AdventureWorks Cafe";
    newCust.CustomerID = "ADVCA";
    
    // Add the customer to the Customers table.
    db.Customers.InsertOnSubmit(newCust);
    
    Console.WriteLine("\nCustomers matching CA before insert");
    
    foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA")))
    {
        Console.WriteLine("{0}, {1}, {2}",
            c.CustomerID, c.CompanyName, c.Orders.Count);
    }
    
  2. 按 F5 调试解决方案。

  3. 控制台 窗口中按 Enter 停止调试并继续演练。

更新实体

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

更改客户名称

  • Console.ReadLine(); 上方添加以下代码:

    // Query for specific customer.
    // First() returns one object rather than a collection.
    var existingCust =
        (from c in db.Customers
         where c.CustomerID == "ALFKI"
         select c)
        .First();
    
    // Change the contact name of the customer.
    existingCust.ContactName = "New Contact";
    

删除实体

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

以下代码演示如何对行之间的关系进行分化,以及如何从数据库中删除行。 在 Console.ReadLine 之前添加以下代码,以查看如何删除对象:

删除行

  • 将以下代码添加到 Console.ReadLine(); 之前:

    // Access the first element in the Orders collection.
    Order ord0 = existingCust.Orders[0];
    
    // Access the first element in the OrderDetails collection.
    OrderDetail detail0 = ord0.OrderDetails[0];
    
    // Display the order to be deleted.
    Console.WriteLine
        ("The Order Detail to be deleted is: OrderID = {0}, ProductID = {1}",
        detail0.OrderID, detail0.ProductID);
    
    // Mark the Order Detail row for deletion from the database.
    db.OrderDetails.DeleteOnSubmit(detail0);
    

将更改提交到数据库

创建、更新和删除对象所需的最后一步是实际将更改提交到数据库。 如果不执行此步骤,所做的更改只是本地更改,不会显示在查询结果中。

将更改提交到数据库

  1. 请将以下代码紧接在 Console.ReadLine 上方插入:

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

    Console.WriteLine("\nCustomers matching CA after update");
    foreach (var c in db.Customers.Where(cust =>
        cust.CustomerID.Contains("CA")))
    {
        Console.WriteLine("{0}, {1}, {2}",
            c.CustomerID, c.CompanyName, c.Orders.Count);
    }
    
  3. 按 F5 调试解决方案。

  4. 控制台 窗口中按 Enter 关闭应用程序。

注释

通过提交更改添加新客户后,无法按原样再次执行此解决方案。 若要再次执行解决方案,请更改要添加的客户名称和客户 ID。

另请参阅