次の方法で共有


方法: LINQ を使用してデータベース内のデータを変更する (Visual Basic)

Language-Integrated クエリ (LINQ) クエリを使用すると、データベース情報に簡単にアクセスし、データベース内の値を変更できます。

次の例は、SQL Server データベースの情報を取得および更新する新しいアプリケーションを作成する方法を示しています。

この記事の例では、Northwind サンプル データベースを使用します。 データベースを取得するには、「サンプル データベースのダウンロード 参照してください。

データベースへの接続を作成するには

  1. Visual Studio で、[表示] メニューをクリックして Server Explorer/Database Explorer を開き、サーバー エクスプローラー/データベース エクスプローラーを選択します。

  2. [サーバー エクスプローラー]/[データベース エクスプローラー][データ接続] を右クリックし、[接続の追加] をクリックします。

  3. Northwind サンプル データベースへの有効な接続を指定します。

LINQ to SQL ファイルを使用してプロジェクトを追加するには

  1. Visual Studio の [ファイル ] メニューで、[新規 ] をポイントして、[プロジェクト ] をクリックします。 プロジェクトの種類として Visual Basic Windows フォーム アプリケーション を選択します。

  2. [プロジェクト] メニューの [新しい項目の追加] クリックします。 LINQ to SQL クラス 項目テンプレートを選択します。

  3. ファイルに northwind.dbml名前を付けます。 追加をクリックします。 northwind.dbml ファイルのオブジェクト リレーショナル デザイナー (O/R デザイナー) が開きます。

テーブルをクエリに追加し、デザイナーで変更するには

  1. Server Explorer/Database Explorerで、Northwind データベースへの接続を展開します。 テーブル フォルダーを展開します。

    O/R デザイナーを閉じた場合は、前に追加した northwind.dbml ファイルをダブルクリックして再度開くことができます。

  2. Customers テーブルをクリックし、デザイナーの左側のウィンドウにドラッグします。

    デザイナーは、プロジェクトの新しい Customer オブジェクトを作成します。

  3. 変更内容を保存し、デザイナーを閉じます。

  4. プロジェクトを保存します。

データベースを変更して結果を表示するコードを追加するには

  1. ツールボックスから、DataGridView コントロールをプロジェクトの既定の Windows フォーム Form1 にドラッグします。

  2. 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. ツールボックスから、3 つの Button コントロールをフォームにドラッグします。 最初の Button コントロールを選択します。 プロパティ ウィンドウで、Button コントロールの NameAddButton に設定し、TextAddに設定します。 2 番目のボタンを選択し、Name プロパティを UpdateButton に設定し、Text プロパティを Updateに設定します。 3 番目のボタンを選択し、Name プロパティを DeleteButton に設定し、Text プロパティを Deleteに設定します。

  4. [追加] ボタンをダブルクリックして、コードをその 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
    
  5. 更新 ボタンをダブルクリックして、その 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
    
  6. [削除] ボタンをダブルクリックして、コードをその 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
    
  7. F5 キーを押してプロジェクトを実行します。 [追加] をクリックして、新しいレコードを追加します。 更新 をクリックして、新しいレコードを変更します。 [削除] をクリックして、新しいレコードを削除します。

関連項目