NonSoft

アクセスMDBを操作するサンプル(C#.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
System.Data.OleDbを使用しアクセスMDBを操作するサンプル(C#.NET) です。
本サンプルはSystem.Data.OleDbの基本機能だけをシンプルにクラス化して、
ACCESS MDBを操作しています。

System.Data.OleDbは汎用のADOクラスですのでプロバイダを指定する事によって、
ACCESSでもORACLEでもSQLサーバでも同様にDB操作出来ます。

基本機能としてはアクセスMDB接続、MDB切断、MDB検索、MDB更新(レコード追加/更新/削除)、
トランザクション開始、コミット、ロールバックがあります。
これ以外の機能を使う事は殆ど無いと思います。

ところで、、、
このサンプルではプロバイダとしてMicrosoft.Jet.OLEDB.4.0を使用していますが、
これはx86(32ビット)でのみ有効でx64(64ビット)では使用出来ません。
x64(64ビット)のパソコンでMicrosoft.Jet.OLEDB.4.0を使用するためには、
x86(32ビット)モードでコンパイルする必要があります。
x86(32ビット)モードでコンパイルするためには、[プロジェクト]の[プロパティ]で
[ビルド]の[プラットフォーム ターゲット]を[x86]にします。

データベース関係のその他のサンプル(VB6/VB.NET/C#.NET)はこちらです。
データベース関係のその他のサンプル(VB6/VB.NET/C#.NET)

★クラス(AccessMdb.cs)
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace Adodb
{
    class AccessMdb
    {
        /// <summary>
        /// SQLコネクション
        /// </summary>
        private OleDbConnection _con = null;

        /// <summary>
        /// トランザクション・オブジェクト
        /// </summary>
        /// <remarks></remarks>
        private OleDbTransaction _trn = null;

        /// <summary>
        /// DB接続
        /// </summary>
        /// <param name="dsn">データソース名</param>
        /// <param name="tot">タイムアウト値</param>
        /// <remarks></remarks>
        public void Connect(String dsn, int tot)
        {

            try
            {
                if (_con == null)
                {
                    _con = new OleDbConnection();
                }

                String cst = "";
                cst = cst + "Provider=Microsoft.Jet.OLEDB.4.0";
                cst = cst + ";Data Source=" + dsn;
                // データベースパスワードが設定されている場合
                // cst = cst + ";Jet OLEDB:Database Password=xxxxx";
                if (tot > -1)
                {
                    //_con.ConnectionTimeout = tot;
                    cst = cst + ";Connect Timeout=" + tot.ToString();
                }
                _con.ConnectionString = cst;

                _con.Open();
            }
            catch (Exception ex)
            {
                throw new Exception("Connect Error", ex);
            }
        }

        /// <summary>
        /// DB切断
        /// </summary>
        public void Disconnect()
        {
            try
            {
                _con.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("Disconnect Error", ex);
            }
        }

        /// <summary>
        /// SQLの実行
        /// </summary>
        /// <param name="sql">SQL文</param>
        /// <param name="tot">タイムアウト値</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public DataTable ExecuteSql(String sql, int tot)
        {
            DataTable dt = new DataTable();

            try
            {
                OleDbCommand sqlCommand = new OleDbCommand(sql, _con, _trn);

                if (tot > -1)
                {
                    sqlCommand.CommandTimeout = tot;
                }

                OleDbDataAdapter adapter = new OleDbDataAdapter(sqlCommand);

                adapter.Fill(dt);
                adapter.Dispose();
                sqlCommand.Dispose();
            }
            catch (Exception ex)
            {
                throw new Exception("ExecuteSql Error", ex);
            }

            return dt;
        }

        /// <summary>
        /// トランザクション開始
        /// </summary>
        /// <remarks></remarks>
        public void BeginTransaction()
        {
            try
            {
                _trn = _con.BeginTransaction();
            }
            catch (Exception ex)
            {
                throw new Exception("BeginTransaction Error", ex);
            }
        }

        /// <summary>
        /// コミット
        /// </summary>
        /// <remarks></remarks>
        public void CommitTransaction()
        {
            try
            {
                if (_trn != null)
                {
                    _trn.Commit();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("CommitTransaction Error", ex);
            }
            finally
            {
                _trn = null;
            }
        }

        /// <summary>
        /// ロールバック
        /// </summary>
        /// <remarks></remarks>
        public void RollbackTransaction()
        {
            try
            {
                if (_trn != null)
                {
                    _trn.Rollback();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("RollbackTransaction Error", ex);
            }
            finally
            {
                _trn = null;
            }
        }

        /// <summary>
        /// デストラクタ
        /// </summary>
        /// <remarks></remarks>
        ~AccessMdb()
        {
            Disconnect();
        }
    }
}

★フォームモジュール(Form1.vb)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Adodb
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // DB検索
        private void button1_Click(object sender, EventArgs e)
        {
            AccessMdb db = new AccessMdb();
            DataTable tb;
            db.Connect("db1.mdb", -1);
            tb = db.ExecuteSql("select col1,col2,col3 from test", -1);
            for (int i = 0; i <= tb.Rows.Count - 1; i++)
            {
                System.Diagnostics.Trace.WriteLine(
                    tb.Rows[i]["col1"].ToString() + ":" +
                    tb.Rows[i]["col2"].ToString() + ":" +
                    tb.Rows[i]["col3"].ToString());
            }
            db.Disconnect();
        }

        // DB追加
        private void button2_Click(object sender, EventArgs e)
        {
            AccessMdb db = new AccessMdb();
            db.Connect("db1.mdb", -1);
            db.BeginTransaction();
            db.ExecuteSql(
                "insert into test(col1,col2,col3) " +
                "values('1234567890',9,'2010-02-14 05:06:07')", -1);
            db.CommitTransaction();
            db.Disconnect();
        }

        // DB更新
        private void button3_Click(object sender, EventArgs e)
        {
            AccessMdb db = new AccessMdb();
            db.Connect("db1.mdb", -1);
            db.BeginTransaction();
            db.ExecuteSql(
                "update test set col2=3,col3='2010-02-15 05:06:07' " +
                "where col1='1234567890'", -1);
            db.CommitTransaction();
            db.Disconnect();
        }

        // DB削除
        private void button4_Click(object sender, EventArgs e)
        {
            AccessMdb db = new AccessMdb();
            db.Connect("db1.mdb", -1);
            db.BeginTransaction();
            db.ExecuteSql(
                "delete from test " +
                "where col1='1234567890'", -1);
            db.CommitTransaction();
            db.Disconnect();
        }
     }
}