C# Programming

.ImageNETから MS Access を使う

開発環境: Visual Studio 2003

1.目次

2.はじめに

MSDE より、Access のほうが一般的に使われいるかもしれません。
とりあえず、Access を .Net から使う場合うについてメモっておきます。

3.参考

(1) MSDN ADO.NET の概要
ADO.NETについて解説している。一通り目を通したほうがいいでしょう。

4.Microsoft Access でデータベースを作る。

Access で簡単な1つのテーブルからなるデータベースを作ります。

1.Access から新規作成で、次のようなテーブルをつくります。

Image
2. このテーブルに適当なデータを入力して、 Books という名前でセーブします。
Image

5.VS.Net でサーバエクスプローラに Access データベースを接続する。

1. Windows.Forms の新しいプロジェクトを作成します。
2. サーバーエクスプローラで、データの接続を右クリックし、接続の追加を選択します。
  すると、次のようなダイアログが表示されます。
Image

4. ここでは、SQLサーバではなく、OLE DB 経由でアクセスするので、プロバイダ タブを選択します。
すると、つぎのようなプロバイダ選択画面になります。
Access では、Microsoft Jet 4.0 OLE DB Provider を使用します。
Microsoft Jet 4.0 OLE DB Provider を選択して、次へ (N)>> ボタンを押します。
Image

5. すると、次のような接続 タブに切り替わります。
そこで、データベース名を選択または入力します(D) で、先ほど作成した Books.mdb を選択します。
Image

6. 次に、接続のテスト(T)ボタンを押して、接続できるか確認します。
次のような接続のテストに成功しましたというダイアログが表示されればOKです。
Image

7. 接続のテスト(T)ボタンの下の OKボタンを押してください。
サーバーエクスプローラで次のように Books.mdb への接続が追加されているはずです。
Image

6.Access データベースの参照


1. まず、サーバーエクスプローラから Books テーブルを Form1 上にドラッグ&ドロップします。
すると、次のように oleDbConnection1 と、oleDbDataAdapter1 のインスタンスが生成されます。
Image

2. 次に、oleDbDataAdapter1 を選択し、プロパティを表示します。その中の TableMappings プロパティの ... ボタンを押し、
次のを表示し、テーブル名および列名を指定するにデータセットを使用するにチェックしてOKボタンを押します。
Image

3. 次に、メニュー→プロジェクト→新しい項目の追加で、テンプレートよりデータセットを選択し、
Dataset1.xsd という名前(任意)で開くボタンを押します。
Image

4. 次に、サーバエクスプローラから、Books を Dataset1.xsd の上にドラッグ&ドロップします。
すると、次のように Dataset1.xsd に Books のデータベースのスキーマが自動的に生成されます。
Image

5. 次に、ツールボックスの データ より、 DataSet を Form1 上にドラッグ&ドロップします。
すると、次のような データセットの追加 ダイアログが表示されます。
この時点で、方指定されたデータセットには、4で作成した スキーマがデフォルトで表示されていると
思います。そのまま、OKボタンを押してください。これで、スキーマを持つ(型してされた)データセットが
生成されました。
Image

6. では、次にテーブルを表示するための DataGrid をドラッグ&ドロップします。
DataGrid の Dock プロパティ を Fill にします。
DataGrid の DataSource プロパティ のプルダウンから、dataset11 を選択します。
DataGrid の DataMember プロパティ のプルダウンから、Books を選択します。
すると、次のように表示されるはずです。

注意: DataSource, DataMember のプルダウンに何も表示されない場合は、一度コンパイルしてみてください。

Image

7. 次に、Form1 の Form_Load イベントに次の行を追加します。
private void Form1_Load(object sender, System.EventArgs e)
{
     this.oleDbDataAdapter1.Fill(this.dataset11);
}

8. コンパイル&実行してみてください。
次のように、表示されましたか?たった、1行だけのコーディングで、簡単ですね。
Image

9. これだと、見た目が悪いので、カラムの幅を調整します。
DataGrid のプロパティの TableStyles プロパティの ... ボタンを押します。
すると、次のようなDataGridTableStyle コレクションエディタが表示されます。
ここで、追加ボタンを押し、dataGridTableStyle1 を追加します。
この dataGridTableStyle1 が Books テーブルのスタイルを決定します。
dataGridTableStyle1 の MappingName から Books を選択します。
Image

次に、GridColumnStyle プロパティの ... ボタンを押します。
すると、次のようなDataGridColumnStyle コレクションエディタが表示されます。
ここで、追加ボタンを押し、dataGridTextBoxColumn1, dataGridTextBoxColumn2を追加します。
これらが Books テーブルのIDとTitle カラムのスタイルを決定します。
MappingName を選択して、Width, HeaderText などを適当に設定して、OKを押します。
Image

10. これで、コンパイル&GOで、次のようにデータベースを表示することができます。
Image


7.Access データベースの参照のソースコード

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Access1
{
        /// <summary>
        /// Form1 の概要の説明です。
        /// </summary>
        public class Form1 : System.Windows.Forms.Form
        {
        private System.Data.OleDb.OleDbCommand oleDbSelectCommand1;
        private System.Data.OleDb.OleDbCommand oleDbInsertCommand1;
        private System.Data.OleDb.OleDbCommand oleDbUpdateCommand1;
        private System.Data.OleDb.OleDbCommand oleDbDeleteCommand1;
        private System.Data.OleDb.OleDbConnection oleDbConnection1;
        private System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
        private Access1.Dataset1 dataset11;
        private System.Windows.Forms.DataGrid dataGrid1;
        private System.Windows.Forms.DataGridTableStyle dataGridTableStyle1;
        private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn1;
        private System.Windows.Forms.DataGridTextBoxColumn dataGridTextBoxColumn2;
                /// <summary>
                /// 必要なデザイナ変数です。
                /// </summary>
                private System.ComponentModel.Container components = null;

                public Form1()
                {
                        //
                        // Windows フォーム デザイナ サポートに必要です。
                        //
                        InitializeComponent();

                        //
                        // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
                        //
                }

                /// <summary>
                /// 使用されているリソースに後処理を実行します。
                /// </summary>
                protected override void Dispose( bool disposing )
                {
                        if( disposing )
                        {
                                if (components != null) 
                                {
                                        components.Dispose();
                                }
                        }
                        base.Dispose( disposing );
                }

                #region Windows Form Designer generated code
                /// <summary>
                /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
                /// コード エディタで変更しないでください。
                /// </summary>
                private void InitializeComponent()
                {
            this.oleDbSelectCommand1 = new System.Data.OleDb.OleDbCommand();
            this.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
            this.oleDbInsertCommand1 = new System.Data.OleDb.OleDbCommand();
            this.oleDbUpdateCommand1 = new System.Data.OleDb.OleDbCommand();
            this.oleDbDeleteCommand1 = new System.Data.OleDb.OleDbCommand();
            this.oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter();
            this.dataset11 = new Access1.Dataset1();
            this.dataGrid1 = new System.Windows.Forms.DataGrid();
            this.dataGridTableStyle1 = new System.Windows.Forms.DataGridTableStyle();
            this.dataGridTextBoxColumn1 = new System.Windows.Forms.DataGridTextBoxColumn();
            this.dataGridTextBoxColumn2 = new System.Windows.Forms.DataGridTextBoxColumn();
            ((System.ComponentModel.ISupportInitialize)(this.dataset11)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
            this.SuspendLayout();
            // 
            // oleDbSelectCommand1
            // 
            this.oleDbSelectCommand1.CommandText = "SELECT ID, Title FROM Books";
            this.oleDbSelectCommand1.Connection = this.oleDbConnection1;
            // 
            // oleDbConnection1
            // 
            this.oleDbConnection1.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;
            Password="""";
            User ID=Admin;Data Source=C:\Documents and Settings\Uchukamen\My Documents\Visual Studio Projects\Access1\Books.mdb;
            Mode=Share Deny None;Extended Properties="""";
            Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";
            Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;
            Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;
            Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";
            Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;
            Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
            // 
            // oleDbInsertCommand1
            // 
            this.oleDbInsertCommand1.CommandText = "INSERT INTO Books(Title) VALUES (?)";
            this.oleDbInsertCommand1.Connection = this.oleDbConnection1;
            this.oleDbInsertCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter(
            "Title", System.Data.OleDb.OleDbType.VarWChar, 50, "Title"));
            // 
            // oleDbUpdateCommand1
            // 
            this.oleDbUpdateCommand1.CommandText = "UPDATE Books SET Title = ? WHERE (ID = ?) AND (Title = ? OR ? IS NULL AND Title I" +
                "S NULL)";
            this.oleDbUpdateCommand1.Connection = this.oleDbConnection1;
            this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter(
            "Title", System.Data.OleDb.OleDbType.VarWChar, 50, "Title"));
            this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter(
            "Original_ID", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, false, 
            ((System.Byte)(10)), ((System.Byte)(0)), "ID", System.Data.DataRowVersion.Original, null));
            this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter(
            "Original_Title", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, 
            ((System.Byte)(0)), ((System.Byte)(0)), "Title", System.Data.DataRowVersion.Original, null));
            this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter(
            "Original_Title1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, 
            ((System.Byte)(0)), ((System.Byte)(0)), "Title", System.Data.DataRowVersion.Original, null));
            // 
            // oleDbDeleteCommand1
            // 
            this.oleDbDeleteCommand1.CommandText = "DELETE FROM Books WHERE (ID = ?) AND (Title = ? OR ? IS NULL AND Title IS NULL)";
            this.oleDbDeleteCommand1.Connection = this.oleDbConnection1;
            this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter(
            "Original_ID", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, 
            false, ((System.Byte)(10)), ((System.Byte)(0)), "ID", System.Data.DataRowVersion.Original, null));
            this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter(
            "Original_Title", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, 
            false, ((System.Byte)(0)), ((System.Byte)(0)), "Title", System.Data.DataRowVersion.Original, null));
            this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter(
            "Original_Title1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, 
            false, ((System.Byte)(0)), ((System.Byte)(0)), "Title", System.Data.DataRowVersion.Original, null));
            // 
            // oleDbDataAdapter1
            // 
            this.oleDbDataAdapter1.DeleteCommand = this.oleDbDeleteCommand1;
            this.oleDbDataAdapter1.InsertCommand = this.oleDbInsertCommand1;
            this.oleDbDataAdapter1.SelectCommand = this.oleDbSelectCommand1;
            this.oleDbDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
            new System.Data.Common.DataTableMapping("Table", "Books", new System.Data.Common.DataColumnMapping[] {
            new System.Data.Common.DataColumnMapping("ID", "ID"),
            new System.Data.Common.DataColumnMapping("Title", "Title")})});
            this.oleDbDataAdapter1.UpdateCommand = this.oleDbUpdateCommand1;
            // 
            // dataset11
            // 
            this.dataset11.DataSetName = "Dataset1";
            this.dataset11.Locale = new System.Globalization.CultureInfo("en-US");
            this.dataset11.Namespace = "http://tempuri.org/Dataset1.xsd";
            // 
            // dataGrid1
            // 
            this.dataGrid1.DataMember = "Books";
            this.dataGrid1.DataSource = this.dataset11;
            this.dataGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
            this.dataGrid1.Name = "dataGrid1";
            this.dataGrid1.Size = new System.Drawing.Size(292, 266);
            this.dataGrid1.TabIndex = 0;
            this.dataGrid1.TableStyles.AddRange(new System.Windows.Forms.DataGridTableStyle[] {
                                                                                                  this.dataGridTableStyle1});
            // 
            // dataGridTableStyle1
            // 
            this.dataGridTableStyle1.DataGrid = this.dataGrid1;
            this.dataGridTableStyle1.GridColumnStyles.AddRange(new System.Windows.Forms.DataGridColumnStyle[] {
                                                                                                                  this.dataGridTextBoxColumn1,
                                                                                                                  this.dataGridTextBoxColumn2});
            this.dataGridTableStyle1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
            this.dataGridTableStyle1.MappingName = "Books";
            // 
            // dataGridTextBoxColumn1
            // 
            this.dataGridTextBoxColumn1.Format = "";
            this.dataGridTextBoxColumn1.FormatInfo = null;
            this.dataGridTextBoxColumn1.HeaderText = "番号";
            this.dataGridTextBoxColumn1.MappingName = "ID";
            this.dataGridTextBoxColumn1.ReadOnly = true;
            this.dataGridTextBoxColumn1.Width = 75;
            // 
            // dataGridTextBoxColumn2
            // 
            this.dataGridTextBoxColumn2.Format = "";
            this.dataGridTextBoxColumn2.FormatInfo = null;
            this.dataGridTextBoxColumn2.HeaderText = "タイトル";
            this.dataGridTextBoxColumn2.MappingName = "Title";
            this.dataGridTextBoxColumn2.Width = 200;
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.dataGrid1});
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            ((System.ComponentModel.ISupportInitialize)(this.dataset11)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
            this.ResumeLayout(false);

        }
                #endregion

                /// <summary>
                /// アプリケーションのメイン エントリ ポイントです。
                /// </summary>
                [STAThread]
                static void Main() 
                {
                        Application.Run(new Form1());
                }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            this.oleDbDataAdapter1.Fill(this.dataset11);
        }
    }
}

日付修正履歴
12/12初期バージョン作成