.NET Framework アプリケーションの Access データベースに接続する
Note
データセットと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初期からのレガシ .NET Framework テクノロジです。 テクノロジが特に役立つのは、ユーザーがデータを変更し、変更をデータベースに戻して保持できるようにするアプリケーションです。 データセットは非常に優れたテクノロジであることが証明されていますが、新しい .NET アプリケーションでは Entity Framework Core を使用することをお勧めしています。 Entity Framework には、オブジェクト モデルとして表形式データを操作する、より自然な方法が用意されており、よりシンプルなプログラミング インターフェイスが備わっています。
Visual Studio を使用して、Access データベース (.mdb
ファイルまたは .accdb
ファイル) に接続できます。 接続を定義すると、[データ ソース ウィンドウ] にデータが表示されます。 そこから、テーブルまたはビューをデザイン サーフェイスにドラッグできます。
注意
Visual Studio を使用して Access データベースに接続している場合は、Visual Studio 2022 より前のバージョンの Visual Studio がすべて 32 ビット プロセスであることに注意する必要があります。 つまり、Visual Studio 2019 およびそれ以前のデータ ツールによっては、32 ビットのデータ プロバイダーを使用してしか、Access データベースに接続できないということです。
Visual Studio 2022 を使用して Access データベースに接続している場合は、Visual Studio 2022 が 64 ビット プロセスになっていることに注意する必要があります。 つまり、Visual Studio のデータ ツールによっては、32 ビットのデータ プロバイダーを使用して Access データベースに接続できないということです。
Access データベースに接続している 32 ビット アプリケーションを維持する必要がある場合は、引き続き Visual Studio 2022 を使用してアプリケーションをビルドして実行することができます。 ただし、サーバー エクスプローラー、データ ソース ウィザード、データセット デザイナーなどの Visual Studio データ ツールを使用する必要がある場合は、32 ビット プロセスである以前のバージョンの Visual Studio を使用する必要があります。 32 ビット プロセスの Visual Studio としては、Visual Studio 2019 が最後のバージョンとなっています。
プロジェクトを変換して 64 ビット プロセスとする予定がある場合は、64 ビットの Microsoft Access Database Engine (Access Connectivity Engine (ACE) とも呼ばれる) を使用することをお勧めします。 詳細について、Jet および ODBC ドライバー用の OLEDB プロバイダーは 32 ビット バージョンのみに関するページを参照してください。
前提条件
以下の手順を使用するには、次の要件を満たす必要があります。
- Visual Studio
- Windows フォームまたは WPF プロジェクト
- Access データベース (
.accdb
ファイル)、または Access 2000-2003 データベース (.mdb
ファイル)。 ファイルの種類に対応する手順に従ってください。
.accdb ファイルのデータセットを作成する
次の手順を使用して、Microsoft 365、Access 2016、Access 2013、Access 2010、または Access 2007 で作成されたデータベースに接続します。
Visual Studio で、Windows フォームまたは WPF アプリケーション プロジェクトを開きます。
[データ ソース] ウィンドウを開くには、Ctrl+Q キーを押し、検索ボックスに「data」と入力して、 [データソース] ウィンドウを選択します。 [表示] メニューで、 [その他のウィンドウ]>[データ ソース] の順に選択します。 または、キーボードで Shift+Alt+D キーを押します。
[データ ソース] ウィンドウで、 [新しいデータ ソースの追加]をクリックします。
データ ソース構成ウィザードが開きます。
[データ ソースの種類の選択] ページで、 [データベース] を選択し、 [次へ] を選択します。
[データベース モデルの選択] ページで、 [データセット] を選択し、 [次へ] を選択します。
[データ接続の選択] ページで、[新しい接続] を選択して新しいデータ接続を構成します。
[接続の追加] ダイアログ ボックスが表示されます。
[データ ソース] が [Microsoft Access データベース ファイル] に設定されていない場合は、 [変更] ボタンを選択します。
[データ ソースの変更] ダイアログ ボックスが開きます。 データ ソースの一覧で、 [Microsoft Access データベース ファイル] を選択します。 オプション [.NET Framework Data Provider for OLE DB] が既に選択されています。 [OK] をクリックします。
[データベース ファイル名] の横にある [参照]を選択し、
.accdb
ファイルに移動し、[開く]選択してください。Note
Microsoft Office と Visual Studio のビット数 (32 ビットまたは 64 ビット) が一致しない場合は、Access データベースへの接続中にエラーが表示されます。 Visual Studio 2019 では、データベース プロバイダーが登録されていないというエラーが表示されます。 Visual Studio 2022 では、32 ビットデータ プロバイダーに接続できないというエラーが表示されます。 このエラーを解決するには、32 ビットバージョンの Office を使用している場合は、Visual Studio 2019 またはそれ以前を使用していることを確認してください。64 ビット バージョンの Office の場合は、Visual Studio 2022 またはそれ以降が必要です。
ユーザー名とパスワードを入力し (必要な場合)、 [OK] を選択します。
[データ接続の選択] ページで、 [次へ] を選択します。
データ ファイルが現在のプロジェクトに含まれていないことを示すダイアログ ボックスが表示される場合があります。 [はい] または [いいえ] をクリックします。
[アプリケーション構成ファイルに接続文字列を保存] ページで、 [次へ] を選択します。
[データベース オブジェクトの選択] ページの [テーブル] ノードを展開します。
データセットに含めるテーブルまたはビューを選択し、 [完了] を選択します。
プロジェクトにデータセットが追加され、テーブルとビューが [データ ソース] ウィンドウに表示されます。
64 ビット版 Access データベース エンジンを搭載した 64 ビット コンピューターでは、アプリケーションが 64 ビット版アプリケーションとして実行されていることを確認する必要があります。 プロジェクトのプロパティを開きます (Alt+Enter キーを押すか、プロジェクト ノードを右クリックして、[プロパティ] を選択します)。 [ビルド] タブで、[32 ビットを優先] ボックスをオフします。
.accdb ファイルのデータセットを作成する
次の手順を使用して、Microsoft 365、Access 2016、Access 2013、Access 2010、または Access 2007 で作成されたデータベースに接続します。
Visual Studio で、Windows フォームまたは WPF アプリケーション プロジェクトを開きます。
[データ ソース] ウィンドウを開くには、Ctrl+Q キーを押し、検索ボックスに「data」と入力して、 [データソース] ウィンドウを選択します。 [表示] メニューで、 [その他のウィンドウ]>[データ ソース] の順に選択します。 または、キーボードで Shift+Alt+D キーを押します。
[データ ソース] ウィンドウで、 [新しいデータ ソースの追加]をクリックします。
データ ソース構成ウィザードが開きます。
[データ ソースの種類の選択] ページで、 [データベース] を選択し、 [次へ] を選択します。
[データベース モデルの選択] ページで、 [データセット] を選択し、 [次へ] を選択します。
[データ接続の選択] ページで、[新しい接続] を選択して新しいデータ接続を構成します。
[接続の追加] ダイアログ ボックスが表示されます。
[データ ソース] が [Microsoft Access データベース ファイル] に設定されていない場合は、 [変更] ボタンを選択します。
[データ ソースの変更] ダイアログ ボックスが開きます。 データ ソースの一覧で、 [Microsoft Access データベース ファイル] を選択します。 オプション [.NET Framework Data Provider for OLE DB] が既に選択されています。 [OK] をクリックします。
[データベース ファイル名] の横にある [参照]を選択し、
.accdb
ファイルに移動し、[開く]選択してください。Note
Microsoft Office と Visual Studio のビット数 (32 ビットまたは 64 ビット) が一致しない場合は、Access データベースへの接続中にエラーが表示されます。 Visual Studio 2019 では、データベース プロバイダーが登録されていないというエラーが表示されます。 Visual Studio 2022 では、32 ビットデータ プロバイダーに接続できないというエラーが表示されます。 このエラーを解決するには、32 ビットバージョンの Office を使用している場合は、Visual Studio 2019 またはそれ以前を使用していることを確認してください。64 ビット バージョンの Office の場合は、Visual Studio 2022 またはそれ以降が必要です。
ユーザー名とパスワードを入力し (必要な場合)、 [OK] を選択します。
[データ接続の選択] ページで、 [次へ] を選択します。
データ ファイルが現在のプロジェクトに含まれていないことを示すダイアログ ボックスが表示される場合があります。 [はい] または [いいえ] をクリックします。
[アプリケーション構成ファイルに接続文字列を保存] ページで、 [次へ] を選択します。
[データベース オブジェクトの選択] ページの [テーブル] ノードを展開します。
データセットに含めるテーブルまたはビューを選択し、 [完了] を選択します。
プロジェクトにデータセットが追加され、テーブルとビューが [データ ソース] ウィンドウに表示されます。
.mdb ファイルのデータセットを作成する
次の手順を使用して、Access 2000 - 2003 で作成されたデータベースに接続します。
Visual Studio で、Windows フォームまたは WPF アプリケーション プロジェクトを開きます。
[表示] メニューで、 [その他のウィンドウ]>[データ ソース] の順に選択します。
[データ ソース] ウィンドウで、 [新しいデータ ソースの追加]をクリックします。
データ ソース構成ウィザードが開きます。
[データ ソースの種類の選択] ページで、 [データベース] を選択し、 [次へ] を選択します。
[データベース モデルの選択] ページで、 [データセット] を選択し、 [次へ] を選択します。
[データ接続の選択] ページで、[新しい接続] を選択して新しいデータ接続を構成します。
データ ソースが [Microsoft Access データベース ファイル (OLE DB)] でない場合は、 [変更] を選択して [データ ソースの変更] ダイアログ ボックスを開き、 [Microsoft Access データベース ファイル] を選択して、 [OK] を選択します。
[データベース ファイル名] で、接続先の
.mdb
ファイルのパスと名前を指定し、[OK] を選択してください。[データ接続の選択] ページで、 [次へ] を選択します。
[アプリケーション構成ファイルに接続文字列を保存] ページで、 [次へ] を選択します。
[データベース オブジェクトの選択] ページの [テーブル] ノードを展開します。
データセットに必要なテーブルまたはビューを選択し、 [完了] を選択します。
プロジェクトにデータセットが追加され、テーブルとビューが [データ ソース] ウィンドウに表示されます。
生成されたコードを表示する
フォーム デザイナーで特定の操作を実行するときに多くのコードを自動的に生成するようにデータ ツールが構成されます。 たとえば、テーブルをフォームにドラッグ アンド ドロップすると、DataGridView
が追加され、データをコントロールに接続するためのコードが作成されます。 このコードは、*.Designer.cs
ファイルで確認できます。 Visual Studio が多数のプライベート メンバーを追加します。
private Database11DataSet database11DataSet;
private System.Windows.Forms.BindingSource ordersBindingSource;
private Database11DataSetTableAdapters.OrdersTableAdapter ordersTableAdapter;
private Database11DataSetTableAdapters.TableAdapterManager tableAdapterManager;
private System.Windows.Forms.BindingNavigator ordersBindingNavigator;
private System.Windows.Forms.ToolStripButton bindingNavigatorAddNewItem;
private System.Windows.Forms.ToolStripLabel bindingNavigatorCountItem;
private System.Windows.Forms.ToolStripButton bindingNavigatorDeleteItem;
private System.Windows.Forms.ToolStripButton bindingNavigatorMoveFirstItem;
private System.Windows.Forms.ToolStripButton bindingNavigatorMovePreviousItem;
private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator;
private System.Windows.Forms.ToolStripTextBox bindingNavigatorPositionItem;
private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator1;
private System.Windows.Forms.ToolStripButton bindingNavigatorMoveNextItem;
private System.Windows.Forms.ToolStripButton bindingNavigatorMoveLastItem;
private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator2;
private System.Windows.Forms.ToolStripButton ordersBindingNavigatorSaveItem;
private System.Windows.Forms.DataGridView ordersDataGridView;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12;
非表示領域を展開すると、Visual Studio はフォームにドラッグしたテーブルにデータ バインドする DataGridView
コントロールを設定するための大量のコードも追加します。
また、メイン フォーム分離コード ファイルでは、Visual Studio が保存アクションを処理して対話型の変更をデータに保存するコードと、テーブル アダプターにテーブルを読み込むコードを追加します。
private void ordersBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.ordersBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.database11DataSet);
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'database11DataSet.Orders' table. You can move, or remove it, as needed.
this.ordersTableAdapter.Fill(this.database11DataSet.Orders);
}
お疲れさまでした。 Visual Studio のサポートを活用することで、Access データ テーブルのフォーム ベースの編集エクスペリエンスを作成しました。
次のステップ
作成したデータセットは、 [データ ソース] ウィンドウで使用できます。 これで、以下のタスクをどれでも実行できます。
[データ ソース] ウィンドウで項目を選択し、フォームまたはデザイン サーフェイスにドラッグします (「Visual Studio でのデータへの Windows フォーム コントロールのバインド」または WPF データ バインディングの概要に関する記事を参照してください)。
データセット デザイナーでデータ ソースを開き、データセットを構成しているオブジェクトを追加または編集します。
データセット内のデータ テーブルの ColumnChanging または RowChanging イベントに検証ロジックを追加します (「データセットのデータの検証」を参照してください)。