[seasar-dotnet:594] Re: DataReaderでデータの取得

kubo [E-MAIL ADDRESS DELETED]
2007年 9月 12日 (水) 11:02:45 JST


久保です。

> 現在、.NETでS2Container、S2Dao、DBFluteを使用して開発を考えています。
> この方法で開発を進めるには、PCに対しての高負荷時の処理を考えて、DataReaderで取得できる
> ことも可能であることがMust要件と言われています。
> 
> DataSourceから自分でDataReaderで取得する方法があると思いますが、
> DBFluteとS2Daoの機能がとても便利であるため、SQL文解決などを使用したく、
> また極力DataReaderを取得するまでの実装をORマッピングした場合と
> 変更したくないと考えています。
> 新規の開発者でも容易に実装&可読性もあがるメリットもあると思っているので
> なんとか利用できないかと思っております。

S2Daoで対応することも検討していますが、もう暫く時間が掛かりそうです。


S2Daoのやり方とは別の方法ではありますが、
DBFluteにて独自の対応しました。


AllCommon.Ado.CursolHandlerというInterfaceを追加しました。

1. CursolHandlerを実装したクラスを作成

public class MyCursolHandler : CursolHandler {

    public object Handle(IDataReader dr) {
        // ...CSVに吐き出すなりなんなり好きなように実装
        // DataReaderのClose()は内部的に行われるので気にしなくてよい。
        return ...; // 戻り値を利用しないならnull固定でOK
    }
}


2. CursolHandlerを引数にとるDaoメソッドを作成

void selectListXxx(XxxPmb pmb, CursolHandler handler);


3. 呼び出し

MyCursolHandler handler = new MyCursolHandler();
XxxPmb pmb = new XxxPmb();
...
void selectListXxx(XxxPmb pmb, CursolHandler handler);


次バージョンにて反映されます。



また、Sql2Entityを利用して以下のようなことを考えています。

==========================================================
「Sql2Entityで外だしSQLからタイプセーフなDataReaderを生成」

public class MyBookCursolHandler : BookCursolHandler {

    public object Handle(BookDataReader dr) {
        // SQLのSelect句の名前でタイプセーフに実装可能
        int bookId = dr.BookId;
        string bookName = dr.BookName;

        return ...;
    }
}
==========================================================

すると、DataReaderを扱いながら、列の値の取得などはタイプセーフに
アクセスが可能になります。




seasar-dotnet メーリングリストの案内