チュートリアル : データの操作 (Visual Basic) (LINQ to SQL)
更新 : November 2007
このチュートリアルでは、データベースに対してデータの追加、変更、および削除を行う、基本の LINQ to SQL シナリオ全体を示します。顧客の追加、顧客名の変更、および注文の削除を行うため、サンプルの Northwind データベースのコピーを使用します。
メモ : |
---|
お使いのマシンで、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 ソリューションを作成するには
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 [デバッグ] メニューの [デバッグの停止] をクリックして、アプリケーションを閉じます。
新しいエンティティの作成
新しいエンティティを作成する手順は簡単です。New キーワードを使用してオブジェクト (Customer など) を作成できます。
以降のセクションでは、ローカル キャッシュのみに変更を加えます。このチュートリアルの終盤で SubmitChanges を呼び出すまで、変更内容はデータベースに送信されません。
新しい Customer エンティティ オブジェクトを追加するには
次のコードを 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
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 キーを押して、デバッグを停止します。
メモ : |
---|
変更内容を送信して新しい顧客を追加した後で、このソリューションを再度実行することはできません。同じ顧客を再度追加できないためです。ソリューションを再度実行するには、追加する顧客 ID の値を変更します。 |