[seasar-dotnet:598] Re: S2Dao.NETのページング機能の使い方

y_fukushima [E-MAIL ADDRESS DELETED]
2007年 9月 21日 (金) 13:27:49 JST


杉本さん、こんにちは。

福島です。

> ソースコードを確認してみましたが、ドキュメントができるまでは
> Seasar.Tests に含まれる以下のファイルが参考になりそうです。
> 
> Seasar.Tests.Dao.Pager.PagerDataReaderWrapperTest.dicon
> Seasar.Tests.Dao.Pager.PagerDataReaderWrapperTest.cs
> Seasar.Tests.Dao.Pager.IEmployeeDao.cs
これらを参考に、VB.NETで動作が確認できました。
ちなみに、DBはOracleです。

ただし、S2Daoのソースの一部に手を加えています。
クラス名:PagerConditionUtil
場所  :Line152〜159
■変更前
if (ci == -1)
{
    throw new PagingParameterDefinitionException(pager.OffsetParameter);
}
if (parameters[ci].ParameterType.Name != "Int32&" || !parameters[ci].IsOut)
{
    throw new PagingParameterDefinitionException(pager.OffsetParameter);
}
■変更後
if (ci == -1)
{
    throw new PagingParameterDefinitionException(pager.CountParameter);
}
if (parameters[ci].ParameterType.Name != "Int32&")
{
    throw new PagingParameterDefinitionException(pager.CountParameter);
}

※どうも、VB.NETから呼び出すと、parameters[ci].IsOutの条件に引っかかって
 しまうようで、確認のために条件を削除しました。
 それと、例外へのパラメータも間違っていると思います。

VB側の記述は以下のようになってます。
■Dao
<Pager()> _
Function GetAllInfomation(ByVal limit As Integer, ByVal offset As Integer, ByRef count As Integer) As Information()

■Logic
Dim limit As Integer = 10
Dim offset As Integer = 20
Dim count As Integer = 0
Dim infoList As Information() = informationDao.GetAllInfomation(limit, offset, count)


また、diconの設定でdataReaderFactoryに
 Seasar.Dao.Pager.PagerDataReaderFactoryWrapper
を使った場合はうまく行ったのですが、
 PagerDataReaderFactoryRowNumberWrapper
を使うとSQLエラーが発生しました。




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