次の方法で共有


チュートリアル: データの操作 (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 (コード生成ツール)」を参照してください。

概要

このチュートリアルは、次の 6 つの主要なタスクで構成されています。

  • Visual Studio での LINQ to SQL ソリューションの作成。

  • データベース コード ファイルをプロジェクトに追加します。

  • 新しい顧客オブジェクトの作成。

  • 顧客の連絡先名の変更。

  • 注文の削除。

  • これらの変更を Northwind データベースに送信する。

LINQ to SQL ソリューションの作成

この最初のタスクでは、LINQ to SQL プロジェクトをビルドして実行するために必要な参照を含む Visual Studio ソリューションを作成します。

LINQ to SQL ソリューションを作成するには

  1. Visual Studio の [ ファイル ] メニューの [ 新規作成] をポイントし、[ プロジェクト] をクリックします。

  2. [ プロジェクトの種類 ] ウィンドウの [ 新しいプロジェクト ] ダイアログ ボックスで、[ Visual C#] をクリックします。

  3. [テンプレート] ウィンドウ 、[ コンソール アプリケーション] をクリックします。

  4. [ 名前 ] ボックスに「 LinqDataManipulationApp」と入力します。

  5. [ 場所 ] ボックスで、プロジェクト ファイルを格納する場所を確認します。

  6. OK をクリックします。

LINQ 参照とディレクティブの追加

このチュートリアルでは、プロジェクトに既定ではインストールされないアセンブリを使用します。 System.Data.Linq がプロジェクトの参照としてリストされていない場合は、次の手順で説明するように追加します。

System.Data.Linq を追加するには

  1. ソリューション エクスプローラーで、 [参照設定] を右クリックし、 [参照の追加] をクリックします。

  2. [ 参照の追加 ] ダイアログ ボックスで、[ .NET] をクリックし、[System.Data.Linq] アセンブリをクリックして、[ OK] をクリックします。

    アセンブリがプロジェクトに追加されます。

  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 の [デバッグ] メニューの [デバッグの停止] をクリックします。

新しいエンティティの作成

新しいエンティティの作成は簡単です。 Customer キーワードを使用して、オブジェクト (new など) を作成できます。

このセクションと以降のセクションでは、ローカル キャッシュのみに変更を加えます。 このチュートリアルの最後に 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 オブジェクトを取得し、そのプロパティの 1 つを変更します。

顧客の名前を変更するには

  • 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. 次のコード ( 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 の名前を変更します。

こちらも参照ください