.NET Framework アプリケーション内のデータベース (複数のテーブル) にデータを保存する
Note
データセットと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初期からのレガシ .NET Framework テクノロジです。 これらが特に役立つのは、ユーザーがデータを変更し、変更をデータベースに戻して保持できるようにするアプリケーションです。 データセットは非常に優れたテクノロジであることが証明されていますが、新しい .NET アプリケーションでは Entity Framework Core を使用することをお勧めしています。 Entity Framework には、オブジェクト モデルとして表形式データを操作する、より自然な方法が用意されており、よりシンプルなプログラミング インターフェイスが備わっています。
アプリケーション開発における最も一般的なシナリオの 1 つに、Windows アプリケーションのフォームにデータを表示して編集し、更新したデータをデータベースに返送する操作があります。 このチュートリアルでは、2 つの関連するテーブルのデータを表示するフォームを作成し、レコードを編集して変更内容をデータベースに保存する方法を示します。 この例では、Northwind サンプル データベースの Customers
テーブルと Orders
テーブルを使用します。
アプリケーション内のデータをデータベースに保存するには、TableAdapter の Update
メソッドを呼び出します。 [データ ソース] ウィンドウからフォームにテーブルをドラッグすると、データを保存するために必要なコードが自動的に追加されます。 その他のテーブルをフォームに追加する場合は、このコードを手動で追加する必要があります。 ここでは、複数のテーブルから更新を保存するコードを追加する手順を示します。
このチュートリアルでは、以下のタスクを行います。
データ ソース構成ウィザードを使用して、アプリケーションでデータ ソースの作成と構成を行います。
[データ ソース] ウィンドウの項目のコントロールを設定します。 詳細については、「[データ ソース] ウィンドウからドラッグしたときに作成されるコントロールを設定する」をご覧ください。
[データ ソース] ウィンドウからフォームに項目をドラッグして、データ バインド コントロールを作成します。
データセットの各テーブルのいくつかのレコードを変更します。
データセット内の更新されたデータをデータベースに返送するコードを変更します。
前提条件
このチュートリアルを完了するには、Visual Studio にインストールされている .NET デスクトップ開発とデータの保存と処理のワークロードが必要です。 これらをインストールするには、Visual Studio インストーラーを開き、変更する Visual Studio のバージョンの横にある [変更] (または [その他]>[変更] ) を選択します。 Visual Studio の変更に関するページを参照してください。
このチュートリアルでは SQL Server Express LocalDB と Northwind サンプル データベースを使用します。
SQL Server Express LocalDB がない場合は、SQL Server Express のダウンロード ページからインストールするか、Visual Studio インストーラーを使用してインストールします。 Visual Studio インストーラーでは、データ ストレージとデータ処理ワークロードの一部として、または個別のコンポーネントとして、SQL Server Express LocalDB をインストールできます。
次の手順に従って、Northwind サンプル データベースをインストールします。
Visual Studio で、 [SQL Server オブジェクト エクスプローラー] ウィンドウを開きます。 (SQL Server オブジェクト エクスプローラーは、Visual Studio インストーラーのデータ ストレージとデータ処理ワークロードの一部としてインストールされます)。 [SQL Server] ノードを展開します。 LocalDB インスタンスを右クリックし、 [新しいクエリ] を選択します。
クエリ エディター ウィンドウが開きます。
Northwind Transact-SQL スクリプトをクリップボードにコピーします。 この T-SQL スクリプトを使用すると、Northwind データベースが新規作成され、データが設定されます。
T-SQL スクリプトをクエリ エディターに貼り付け、 [実行] ボタンを選択します。
しばらくすると、クエリの実行が完了し、Northwind データベースが作成されます。
Windows フォーム アプリケーションを作成する
C# または Visual Basic 用の新しい Windows フォーム アプリ プロジェクトを作成します。 プロジェクトに UpdateMultipleTablesWalkthrough という名前を付けます。
データ ソースを作成する
この手順では、データ ソース構成ウィザードを使用して、Northwind データベースからデータ ソースを作成します。 接続を作成するには、Northwind サンプル データベースへのアクセス権を持っている必要があります。 Northwind サンプル データベースの設定の詳細については、「方法 : サンプル データベースをインストールする」を参照してください。
[データ] メニューで、 [データ ソースの表示] を選択します。
[データ ソース] ウィンドウが開きます。
[データ ソース] ウィンドウで、 [新しいデータ ソースの追加] をクリックしてデータ ソース構成ウィザードを起動します。
[データソースの種類を選択] 画面で、 [データベース] 、 [次へ] の順に選択します。
[データ接続の選択] 画面で、次のいずれかの操作を行います。
Northwind サンプル データベースへのデータ接続がドロップダウン リストに表示されている場合は選択します。
または
[新しい接続] を選択して [接続の追加] または [接続の変更] ダイアログ ボックスを開きます。
データベースにパスワードが必要な場合は、該当するオプションを選択して重要情報を含め、 [次へ] を選択します。
[アプリケーション構成ファイルに接続文字列を保存] で、 [次へ] を選択します。
[データベース オブジェクトの選択] 画面で、 [テーブル] ノードを展開します。
Customers テーブルと Orders テーブルを選択し、 [完了] を選択します。
自分のプロジェクトに NorthwindDataSet が追加され、[データ ソース] ウィンドウにテーブルが表示されます。
作成するコントロールを設定する
このチュートリアルでは、データが個別のコントロールに表示される詳細レイアウトで、Customers
テーブル内のデータを表示します。 Orders
テーブルのデータは、DataGridView コントロール内に表示されるグリッド レイアウトで表示します。
[データ ソース] ウィンドウの項目にドロップ タイプを設定するには
[データ ソース] ウィンドウで、 [Customers] ノードを展開します。
[Customers] ノードで、コントロール リストの [詳細] を選択し、Customers テーブルのコントロールを個別のコントロールに変更します。 詳細については、「[データ ソース] ウィンドウからドラッグしたときに作成されるコントロールを設定する」をご覧ください。
データ バインド フォームを作成する
[データ ソース] ウィンドウからフォームに項目をドラッグして、データ バインド コントロールを作成します。
[データ ソース] ウィンドウから Form1 にメインの [Customers] ノードをドラッグします。
説明のラベルが付いたデータ バインド コントロールとレコード間を移動するためのツール ストリップ (BindingNavigator) がフォームに表示されます。 コンポーネント トレイには、NorthwindDataSet、
CustomersTableAdapter
、BindingSource、BindingNavigator が表示されます。[データ ソース] ウィンドウから Form1 に関連する [Orders] ノードをドラッグします。
Note
関連する [Orders] ノードは [Fax] 列の下にあり、[Customers] ノードの子ノードです。
レコード間をナビゲートするための DataGridView コントロールとツール ストリップ (BindingNavigator) がフォームに表示されます。
OrdersTableAdapter
と BindingSource がコンポーネント トレイに表示されます。
データベースを更新するコードを追加する
Customers TableAdapter および Orders TableAdapter の Update
メソッドを呼び出して、データベースを更新できます。 既定では、BindingNavigator の [保存] ボタンのイベント ハンドラーが、データベースへの更新を送信するフォームのコードに追加されます。 この手順によって、正しい順序で更新を送信するようにコードが変更されます。これによって、参照整合性エラーが発生する可能性がなくなります。 また、Update 呼び出しを try-catch ブロックにラップして、エラー処理も実装します。 アプリケーションの要件に適合するようにコードを変更できます。
Note
わかりやすくするために、このチュートリアルではトランザクションを使用しません。 ただし、複数の関連するテーブルを更新する場合は、トランザクション内にすべての更新ロジックを含めます。 トランザクションは、データベースに対するすべての関連する変更が正常に完了した後に、変更をコミットするプロセスです。 詳しくは、「トランザクションとコンカレンシー」をご覧ください。
アプリケーションに更新ロジックを追加するには
BindingNavigator の [保存] ボタンを選択します。 これにより、コード エディターが開き、
bindingNavigatorSaveItem_Click
イベント ハンドラーが表示されます。イベント ハンドラーのコードを、関連する TableAdapter の
Update
メソッドを呼び出すコードに置き換えます。 次のコードは、最初に、各 DataRowState (Deleted、Added、および Modified) の更新済み情報を保持する 3 つの一時的なデータ テーブルを作成します。 更新は正しい順序で実行されます。 コードは、次のようになります。this.Validate(); this.ordersBindingSource.EndEdit(); this.customersBindingSource.EndEdit(); NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Deleted); NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Added); NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Modified); try { // Remove all deleted orders from the Orders table. if (deletedOrders != null) { ordersTableAdapter.Update(deletedOrders); } // Update the Customers table. customersTableAdapter.Update(northwindDataSet.Customers); // Add new orders to the Orders table. if (newOrders != null) { ordersTableAdapter.Update(newOrders); } // Update all modified Orders. if (modifiedOrders != null) { ordersTableAdapter.Update(modifiedOrders); } northwindDataSet.AcceptChanges(); } catch (System.Exception ex) { MessageBox.Show("Update failed"); } finally { if (deletedOrders != null) { deletedOrders.Dispose(); } if (newOrders != null) { newOrders.Dispose(); } if (modifiedOrders != null) { modifiedOrders.Dispose(); } }
アプリケーションをテストする
F5キーを押します。
各テーブルの 1 つ以上のレコードのデータを変更します。
[保存] ボタンを選択します。
データベースの値をチェックし、変更が保存されたことを確認します。
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示