次の方法で共有


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

更新 : November 2007

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

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

お使いのマシンで、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)」を参照してください。

概要

このチュートリアルは、主に次の 6 つの手順で構成されています。

  • Visual Studio で LINQ to SQL ソリューションを作成します。

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

  • 新しい顧客オブジェクトを作成します。

  • 顧客の連絡先名を変更します。

  • 注文を削除します。

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

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

最初に、LINQ to SQL プロジェクトをビルドおよび実行するのに必要な参照を含む Visual Studio ソリューションを作成します。

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

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

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

  3. [テンプレート] ペインの [コンソール アプリケーション] をクリックします。

  4. [プロジェクト名] ボックスに「LinqDataManipulationApp」と入力します。

  5. [OK] をクリックします。

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

このチュートリアルで使用するアセンブリは、既定ではプロジェクトにインストールされていない場合があります。System.Data.Linq がプロジェクトの参照 (ソリューション エクスプローラで [すべてのファイルを表示] をクリックし、[参照設定] ノードを展開) に表示されていない場合は、以下の手順に従って追加します。

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

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

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

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

  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 オブジェクトを取得し、そのプロパティの 1 つを変更します。

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

  • 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 キーを押して、デバッグを停止します。

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

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

参照

概念

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