[seasar-dotnet:2008] Re: DBFlute.net PostgressqlでReturn値の受け取りでエラーが発生
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2011年 3月 30日 (水) 17:52:11 JST
久保さん。
お世話になっております。清水と申します。
先日回答していただきました件ですが、未対応の可能性が高いということで、申し訳
ありませんが
今回はOUTパラメータにて対応可能だったため、こちらで対応することに致しまし
た。
ご迷惑お掛けしまして大変申し訳ありません。
今後とも宜しくお願い致します。
kubo <[E-MAIL ADDRESS DELETED]>:
> 久保(jflute)です。
> 清水さん、こんばんは
> DBFlute.NETには、PostgreSQLのストアドファンクション
> に対するテストが存在していないため、単純に未対応である
> という可能性は高いです。
> (Java版ではしっかりテストされていて動作するのですが、
> DBFlute.NETではそもそもPostgreSQLのExampleがありません)
> なので、申し訳ありませんが、ある程度ちょっとソースを
> 修正してもらって、どう直すべきかを試して探ってもらう
> ことになってしまいます。
> まずは、ProcedurePmb(ParameterBean)の
> 「Procedure Parameter」の定義はどのように
> なっていますでしょうか?
> (return のものがありますでしょうか?)
> そして、スタックトレースを見るに、
> AllCommon.S2Dao.Internal.SqlHandler.InternalProcedureHandler
> の HandleOutParameters() の処理がポイントになりそうです。
> その後、SetValue() が呼び出されていますが、
> 二つありますが、returnに対してどちらの分岐のSetValue()が
> 呼び出されているでしょうか?
> (恐らく、ppt.IsReturnTypeだと思いますが確認のため)
> もし、ppt.IsReturnTypeの方のSetValue()であれば、
> その returnValue がどこからやってきているのか確認して
> みて下さい。その値が System.DBNull ということであれば、
> ファンクションの戻り値をちゃんと取得できていないという
> ことになるので、(PostgreSQLの)ADO.NETとして、
> 本来どのように取得するべきなのかを探る必要があります。
> もし、その取得方法がわかれば「もし、PostgreSQLだったら」
> という分岐を入れて修正していくことになるかと思います。
> 2011/3/29 samurai_bouzu [E-MAIL ADDRESS DELETED]>:
> > お世話になります。清水と申します。
> >
> > PostgreSQL(.8.4.4)のストアドファンクションのオブジェクトを
> DBFlute.NETから呼び出して利用しようとしておりますが、実行時にエラーが発生
> し実行できません。
> >
> > ストアドファンクションは
> > CREATE OR REPLACE FUNCTION usp_createwk_correspondence_history(IN
> > "MailFlg" boolean, IN "PhoneFlg" boolean, IN "OfferFlg" boolean, IN
> > "FanMailFlg" boolean, IN "ReceiveDtFr" timestamp with time zone, IN
> > "ReceiveDtTo" timestamp with time zone, IN "InquiryCategoryCd" text,
> > IN "CustomerCd" text, IN "CustomerNm" text, IN "Phone" text, IN
> > "ProductCategoryACd" text, IN "ProductCategoryBCd" text, IN
> > "ProductCd" text, IN "PersonCd" text, IN "OfferCategoryACd" text, IN
> > "OfferCategoryBCd" text, IN "KeyWord1" text, IN "KeyWord2" text, IN
> > "KeyWord3" text, IN "KeyWord4" text, IN "KeyWord5" text, IN "KeyWord6"
> > text, IN "KeyWord7" text, IN "KeyWord8" text, IN "KeyWord9" text, IN
> > "KeyWord10" text, IN "KeyWord11" text, IN "KeyWord12" text, IN
> > "KeyWord13" text, IN "KeyWord14" text, IN "KeyWord15" text, IN
> > "KeyWord16" text, IN "KeyWord17" text, IN "KeyWord18" text, IN
> > "KeyWord19" text, IN "KeyWord20" text, IN "Address" text, IN
> > "HabitatCd" text)
> > RETURNS integer
> > AS ....
> >
> > return 1;
> >
> > というものです。
> >
> > C#側の呼び出しは以下です。
> > UspCreatewkCorrespondenceHistoryPmb pmb = new
> > UspCreatewkCorrespondenceHistoryPmb();
> > ...
> >
> > // Timeoutを無制限に設定
> > StatementConfig config = new StatementConfig();
> > config.QueryTimeout(0);
> >
> > inquiryInfoBhv.OutsideSql().Configure(config).Call(pmb);
> >
> >
> > 実行した際の例外は
> > XXX.DBFlute.AllCommon.Exp.SQLFailureException がキャッチされました
> > Message="Look! Read the message below.\n/* * * * * * * * * * * * * *
> > * * * * * * * * * * * * * * * * * * * *\nThe SQL failed to
> > execute!\n\n[Advice]\nPlease confirm the Exception
> > message.\n\n[Exception]\nSystem.ArgumentException\n型 'System.DBNull'
> > のオブジェクトを型 'System.Nullable`1[System.Int32]'
> > に変換できません。
> \n\n[OutsideSqlPath]\nusp_createwk_correspondence_history\n\n[ParameterBean]\nXXX.DBFlute.ExDao.PmBean.UspCreatewkCorrespondenceHistoryPmb\nUspCreatewkCorrespondenceHistoryPmb:{,
> > True, True, False, False, 2010/03/30 0:00:00, 2011/03/29 0:00:00, , ,
> > , , 00, , , , , , , , , , , , , , , , , , , , , , , , , , , ,
> > }\n\n[Statement]\nNpgsql.NpgsqlCommand\n* * * * * * * * * */"
> > Source="XXX.DBFlute"
> > StackTrace:
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.DbExceptionHandler.ThrowSQLFailureException(Exception
> > e, IDbCommand cmd, String displaySql)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.DbExceptionHandler.HandleDbException(Exception
> > e, IDbCommand cmd, Boolean uniqueConstraintValid, String displaySql)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.InternalBasicHandler.HandleDbException(Exception
> > e, IDbCommand cmd, Boolean uniqueConstraintValid)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.InternalProcedureHandler.Execute(IDbConnection
> > conn, Object[] args, Type[] argTypes)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.InternalBasicSelectHandler.Execute(Object[]
> > args, Type[] argTypes)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.InternalBasicSelectHandler.Execute(Object[]
> > args)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlCommand.InternalProcedureCommand.Execute(Object[]
> > args)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.S2DaoInterceptor.DispatchInvoking(IMethodInvocation
> > invocation)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.S2DaoInterceptor.Invoke(IMethodInvocation
> > invocation)
> > 場所 Seasar.Framework.Aop.Proxy.DynamicAopProxy.Intercept(IInvocation
> > invocation, Object[] args)
> > 場所
> ProxyInterfaceSystemSystemObject_XXX_DBFlute_AllCommon_CBean_OutsideSqlOutsideSqlDao_System_Runtime_SerializationISerializable.Call(String
> > path, Object pmb, OutsideSqlOption option)
> > 場所
> XXX.DBFlute.AllCommon.CBean.OutsideSql.Executor.OutsideSqlBasicExecutor.Call(ProcedurePmb
> > pmb)
> > 場所
> MsiApp.CustomerCenter.XXX.Appli.DHM1010.Service.DHM1010Service.GetHistoryInfoListDataTable()
> > 場所 D:\XXX\PROG\CustomerCenter\XXX\Appli\Source\DH0101001_対応履歴検索
> \DHM1010\Service\DHM1010Service.cs:行
> > 452
> > InnerException: System.ArgumentException
> > Message="型 'System.DBNull' のオブジェクトを型
> > 'System.Nullable`1[System.Int32]' に変換できません。"
> > Source="mscorlib"
> > StackTrace:
> > 場所 System.RuntimeType.CheckValue(Object value, Binder
> > binder, CultureInfo culture, BindingFlags invokeAttr)
> > 場所 System.Reflection.MethodBase.CheckArguments(Object[]
> > parameters, Binder binder, BindingFlags invokeAttr, CultureInfo
> > culture, Signature sig)
> > 場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
> > BindingFlags invokeAttr, Binder binder, Object[] parameters,
> > CultureInfo culture, Boolean skipVisibilityChecks)
> > 場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
> > BindingFlags invokeAttr, Binder binder, Object[] parameters,
> > CultureInfo culture)
> > 場所 System.Reflection.RuntimePropertyInfo.SetValue(Object
> > obj, Object value, BindingFlags invokeAttr, Binder binder, Object[]
> > index, CultureInfo culture)
> > 場所 System.Reflection.RuntimePropertyInfo.SetValue(Object
> > obj, Object value, Object[] index)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.InternalProcedureParameterType.SetValue(Object
> > dto, Object value)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.InternalProcedureHandler.HandleOutParameters(IDbCommand
> > dbCommand, Object dto, Object returnValue)
> > 場所
> XXX.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.InternalProcedureHandler.Execute(IDbConnection
> > conn, Object[] args, Type[] argTypes)
> > InnerException:
> >
> > なにか、ファンクションの作成方法、または、DBFluteでの呼び出し方法に誤り
> があるのでしょうか。
> > よろしくお願いいたします。
> > _______________________________________________
> > seasar-dotnet mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20110330/7fa18d8e/attachment.html>
seasar-dotnet メーリングリストの案内