チュートリアル: データの操作 (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 ソリューションを作成するには
Visual Studio で [ファイル] メニューの [新しいプロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ペインで、 [Visual Basic] をクリックします。
[テンプレート] ペインの [コンソール アプリケーション] をクリックします。
[プロジェクト名] ボックスに「LinqDataManipulationApp」と入力します。
[OK] をクリックします。
LINQ の参照とディレクティブを追加する
このチュートリアルで使用するアセンブリは、既定ではプロジェクトにインストールされていない場合があります。 System.Data.Linq
がプロジェクトの参照 (ソリューション エクスプローラーで [すべてのファイルを表示] をクリックし、 [参照設定] ノードを展開) に表示されていない場合は、以下の手順に従って追加します。
System.Data.Linq を追加するには
ソリューション エクスプローラーで、 [参照設定] を右クリックし、 [参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスで、 [.NET] をクリックし、System.Data.Linq アセンブリをクリックします。次に、 [OK] をクリックします。
アセンブリがプロジェクトに追加されます。
コード エディターで、Module1 の上に次のディレクティブを追加します。
Imports System.Data.Linq Imports System.Data.Linq.Mapping
プロジェクトに Northwind コード ファイルを追加する
これらの手順では、SQLMetal ツールを使用して Northwind サンプル データベースからコード ファイルを生成していることが前提です。 詳細については、このチュートリアルの「前提条件」を参照してください。
プロジェクトに Northwind コード ファイルを追加するには
[プロジェクト] メニューの [既存項目の追加] をクリックします。
[既存項目の追加] ダイアログ ボックスで c:\linqtest2\northwind.vb に移動し、 [追加] をクリックします。
プロジェクトに northwind.vb ファイルが追加されます。
データベース接続の設定
最初に、データベースへの接続をテストします。 データベースの名前 Northwnd に i の文字が欠けていることに注意してください。 次の手順でエラーが生成された後で、northwind.vb ファイルを調べて、Northwind 部分クラスのスペルを確認します。
データベース接続を設定してテストするには
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()
この時点でアプリケーションをテストするには、F5 キーを押します。
コンソール ウィンドウが開きます。
コンソール ウィンドウで Enter キーを押すか、Visual Studio の [デバッグ] メニューの [デバッグの停止] をクリックして、アプリケーションを閉じます。
新しいエンティティの作成
新しいエンティティを作成する手順は簡単です。 Customer
キーワードを使用してオブジェクト (New
など) を作成できます。
以降のセクションでは、ローカル キャッシュのみに変更を加えます。 このチュートリアルの終盤で SubmitChanges を呼び出すまで、変更内容はデータベースに送信されません。
新しい Customer エンティティ オブジェクトを追加するには
次のコードを
Customer
内のConsole.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
F5 キーを押してソリューションをデバッグします。
結果は、以下のようにコンソール ウィンドウに表示されます。
Customers matching CA before insert:
Customer ID: CACTU
Customer ID: RICAR
新しい行は結果に表示されません。 新しいデータは、まだデータベースに送信されていません。
コンソール ウィンドウで 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)
変更内容のデータベースへの送信
最後の手順は、オブジェクトの作成、更新、および削除を実際にデータベースに送信するために必要です。 この手順を行わないと、変更はローカルのみに留まり、クエリの結果には反映されません。
データベースに変更内容を送信するには
Console.ReadLine
の直前に次のコードを挿入します。db.SubmitChanges()
変更内容の送信前と送信後の変化を示すために、次のコードを (
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
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
コンソール ウィンドウで Enter キーを押して、デバッグを停止します。
Note
変更内容を送信して新しい顧客を追加した後で、このソリューションを再度実行することはできません。同じ顧客を再度追加できないためです。 ソリューションを再度実行するには、追加する顧客 ID の値を変更します。