次の方法で共有


チュートリアル : データの操作 (C#) (LINQ to SQL)

更新 : November 2007

このチュートリアルでは、データベースに対してデータの追加、変更、および削除を行う、基本の LINQ to SQL シナリオ全体を示します。顧客の追加、顧客名の変更、および注文の削除を行うため、サンプルの Northwind データベースのコピーを使用します。

Bb386927.alert_note(ja-jp,VS.90).gifメモ :

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

このチュートリアルは、Visual C# 開発設定を使用して記述されています。

前提条件

このチュートリアルの前提条件は次のとおりです。

  • このチュートリアルでは、専用フォルダ ("c:\linqtest6") を使用してファイルを保持します。チュートリアルを開始する前にこのフォルダを作成してください。

  • Northwind サンプル データベース。

    開発コンピュータにこのデータベースがない場合は、Microsoft ダウンロード サイトからダウンロードします。手順については、「サンプル データベースのダウンロード (LINQ to SQL)」を参照してください。データベースをダウンロードしたら、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 の [デバッグ] メニューの [デバッグの停止] をクリックして、アプリケーションを閉じます。

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

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

以降のセクションでは、ローカル キャッシュのみに変更を加えます。このチュートリアルの終盤で SubmitChanges を呼び出すまで、変更内容はデータベースに送信されません。

新しい Customer エンティティ オブジェクトを追加するには

  1. 次のコードを Main メソッド内の Console.ReadLine(); の前に追加することで、新しい Customer を作成します。

    // 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 キーを押してアプリケーションを終了します。

Bb386927.alert_note(ja-jp,VS.90).gifメモ :

変更内容を送信して新しい顧客を追加した後で、このソリューションを再度実行することはできません。ソリューションを再度実行するには、追加する顧客の名前と顧客 ID を変更します。

参照

概念

チュートリアルによる学習 (LINQ to SQL)