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