トップページに戻る
次の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;
}
}
}
}