次の方法で共有


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

概要

このチュートリアルは、次の 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 の [デバッグ] メニューの [デバッグの停止] をクリックして、アプリケーションを閉じます。

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

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

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

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

  1. CustomerConsole.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 オブジェクトを取得し、そのプロパティの 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 キーを押してデバッグを停止します。

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

こちらも参照ください