方法: LINQ を使用してデータベースのデータを変更する (Visual Basic)
統合言語クエリ (LINQ) というクエリを使用すると、簡単にデータベース情報にアクセスして、データベースの値を変更することができます。
次の例は、SQL Server データベースの情報を取得して更新する新しいアプリケーションを作成する方法を示しています。
このトピックの例では、Northwind サンプル データベースを使用します。 開発用コンピューターにこのデータベースがない場合は、Microsoft ダウンロード センターからダウンロードできます。 手順については、「サンプル データベースのダウンロード」を参照してください。
データベースへの接続を作成するには
Visual Studio で、 [表示] メニューをクリックして [サーバー エクスプローラー]/[データベース エクスプローラー] を開き、 [サーバー エクスプローラー]/[データベース エクスプローラー] を選択します。
[サーバー エクスプローラー]/[データベース エクスプローラー] で [データ接続] を右クリックし、 [接続の追加] をクリックします。
Northwind サンプル データベースへの有効な接続を指定します。
LINQ to SQL ファイルを含むプロジェクトを追加するには
Visual Studio で、 [ファイル] メニューの [新規作成] をポイントし、 [プロジェクト] をクリックします。 プロジェクト タイプとして Visual Basic [Windows フォーム アプリケーション] を選択します。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。 [LINQ to SQL クラス] 項目テンプレートを選択します。
そのファイルに
northwind.dbml
という名前を付けます。 [追加] をクリックします。 オブジェクト リレーショナル デザイナー (O/R デザイナー) がnorthwind.dbml
ファイル用に開きます。
デザイナーにクエリを実行して変更するテーブルを追加するには
[サーバー エクスプローラー]/[データベース エクスプローラー] で、Northwind データベースへの接続を展開します。 [テーブル] フォルダーを展開します。
O/R デザイナーを閉じている場合は、前に追加した
northwind.dbml
ファイルをダブルクリックして再度開くことができます。Customers テーブルをクリックし、デザイナーの左ペインにドラッグします。
デザイナーによって、プロジェクトの新しい Customer オブジェクトが作成されます。
変更を保存し、デザイナーを閉じます。
プロジェクトを保存します。
データベースを変更して結果を表示するコードを追加するには
[ツールボックス] から、プロジェクトの既定の Windows フォームである Form1 に DataGridView コントロールをドラッグします。
テーブルを O/R デザイナーに追加したときに、デザイナーによって DataContext オブジェクトがプロジェクトに追加されました。 このオブジェクトには、Customers テーブルにアクセスするために使用できるコードが含まれています。 また、ローカルの Customer オブジェクトとテーブルの Customers コレクションを定義するコードも含まれています。 プロジェクトの DataContext オブジェクトの名前は、.dbml ファイルの名前に基づいて付けられます。 このプロジェクトでは、DataContext オブジェクトに
northwindDataContext
という名前が付けられています。コードで DataContext オブジェクトのインスタンスを作成し、O/R デザイナーによって指定された Customers コレクションに対してクエリを実行し、変更することができます。 Customers コレクションに加えた変更は、DataContext オブジェクトの SubmitChanges メソッドを呼び出すことによって送信されるまで、データベースに反映されません。
Windows フォームの Form1 をダブルクリックして、Load イベントにコードを追加し、DataContext のプロパティとして公開されている Customers テーブルに対してクエリを実行します。 次のコードを追加します。
Private db As northwindDataContext Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles MyBase.Load db = New northwindDataContext() RefreshData() End Sub Private Sub RefreshData() Dim customers = From cust In db.Customers Where cust.City(0) = "W" Select cust DataGridView1.DataSource = customers End Sub
[ツールボックス] から、3 つの Button コントロールをフォームにドラッグします。 最初の
Button
コントロールを選択します。 [プロパティ] ウィンドウで、Button
コントロールのName
プロパティをAddButton
に、Text
をAdd
に設定します。 2 番目のボタンを選択し、Name
プロパティをUpdateButton
に、Text
プロパティをUpdate
に設定します。 3 番目のボタンを選択し、Name
プロパティをDeleteButton
に、Text
プロパティをDelete
に設定します。[追加] ボタンをダブルクリックして、コードをその
Click
イベントに追加します。 次のコードを追加します。Private Sub AddButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles AddButton.Click Dim cust As New Customer With { .City = "Wellington", .CompanyName = "Blue Yonder Airlines", .ContactName = "Jill Frank", .Country = "New Zealand", .CustomerID = "JILLF"} db.Customers.InsertOnSubmit(cust) Try db.SubmitChanges() Catch ' Handle exception. End Try RefreshData() End Sub
[更新] ボタンをダブルクリックして、コードをその
Click
イベントに追加します。 次のコードを追加します。Private Sub UpdateButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs ) Handles UpdateButton.Click Dim updateCust = (From cust In db.Customers Where cust.CustomerID = "JILLF").ToList()(0) updateCust.ContactName = "Jill Shrader" updateCust.Country = "Wales" updateCust.CompanyName = "Red Yonder Airlines" updateCust.City = "Cardiff" Try db.SubmitChanges() Catch ' Handle exception. End Try RefreshData() End Sub
[削除] ボタンをダブルクリックして、コードをその
Click
イベントに追加します。 次のコードを追加します。Private Sub DeleteButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs ) Handles DeleteButton.Click Dim deleteCust = (From cust In db.Customers Where cust.CustomerID = "JILLF").ToList()(0) db.Customers.DeleteOnSubmit(deleteCust) Try db.SubmitChanges() Catch ' Handle exception. End Try RefreshData() End Sub
F5 キーを押してプロジェクトを実行します。 [追加] をクリックして、新しいレコードを追加します。 [更新] をクリックして、新しいレコードを変更します。 [削除] をクリックして、新しいレコードを削除します。
関連項目
.NET