[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 メーリングリストの案内