トップページに戻る    次のC#のサンプルへ    前のC#のサンプルへ

9-1 Oracleとの接続(OleDb)やSQLの管理クラス

C#のサンプル

Oracleとの接続(OleDb)やSQLの管理クラスです。
select文にこだわってます :-)

System.IDisposableインターフェースを実装しているので、
usingステートメントと併用すると、さらに便利に使えそうですね。

MSDN --- Microsoft OLE DB Provider for Oracle


ソース

using System.Data;
using System.Data.OleDb;

public class DAOOracle : System.IDisposable
{
    private OleDbConnection mConnection;
    private OleDbTransaction mTransaction;
    private bool IsTransaction = false;

    //接続のオープン
    public void OpenDataBase()
    {
        mConnection = new OleDbConnection("Provider=MSDAORA;user id=test;password=test");
        mConnection.Open();
    }

    public void Dispose()
    {
        mConnection.Close(); //接続のクローズ
    }

    //トランザクションを開始(ReadCommited)
    public void BeginTransaction()
    {
        mTransaction = mConnection.BeginTransaction();
        IsTransaction = true;
    }

    //コミットを行う
    public void Commit()
    {
        mTransaction.Commit();
        IsTransaction = false;
    }

    //ロールバックを行う
    public void Rollback()
    {
        mTransaction.Rollback();
        IsTransaction = false;
    }

    //OleDbCommandを作成して返す
    private OleDbCommand CreateSQLCmd(string pSQL)
    {
        if (IsTransaction) { //トランザクション中の場合
            return new OleDbCommand(pSQL, mConnection, mTransaction);
        }
        else return new OleDbCommand(pSQL, mConnection);
    }

    //DMLを実行して更新件数を返す
    public int ExecDML(string pSQL)
    {
        return CreateSQLCmd(pSQL).ExecuteNonQuery();
    }

    //select(スカラー問い合わせ)の結果をObject型で返す
    public object SelectScalar(string pSQL)
    {
        return CreateSQLCmd(pSQL).ExecuteScalar();
    }

    //selectの結果をDateReaderで返す
    public OleDbDataReader SelectDataReader(string pSQL)
    {
        return CreateSQLCmd(pSQL).ExecuteReader();
    }

    //selectの結果をDataTableで返す
    public DataTable SelectDataSet(string pSQL)
    {
        var ReturnDataSet = new DataSet();
        var DA = new OleDbDataAdapter(pSQL, mConnection);
        DA.Fill(ReturnDataSet);
        return ReturnDataSet.Tables[0];
    }
}


テスト用

using System;

class Program
{
    static void Main()
    {
        using (var dao = new DAOOracle()) {
            dao.OpenDataBase();
            var DT1 = dao.SelectScalar("select 'abc' || 'DEF' from dual");
            var DT2 = dao.SelectDataReader("select * from tab");
            var DT3 = dao.SelectDataSet("select * from tab");

            dao.BeginTransaction();
            try {
                var DT4 = dao.ExecDML("delete from delTest");
                dao.Commit();
            }
            catch (Exception ex) {
                Console.Write(ex.Message + ex.StackTrace);
                dao.Rollback();
                throw;
            }
        }
    }
}