[seasar-dotnet:349] Re: [Seasar]SQLRuntimeExceptionの中に実行SQLを格納して欲しい
Kazuya Sugimoto
sugimotokazuya @ gmail.com
2006年 9月 19日 (火) 23:46:41 JST
杉本です。
久保さん、ご要望ありがとうございます。
これは便利ですね。対応したいと思います。
https://www.seasar.org/issues/browse/CONTAINERNET-44
06/09/19 に kuboさんは書きました:
> 久保です。
>
> 要望です。
>
> SQLRuntimeExceptionに関して
>
> 現状この例外が発生した場合は、例外Messageの中にSQL文は
> 格納されていないため、Applicationが例外をcatchしたときに
> 「どんなSQLがダメだったのか?」がわかりません。
>
> これを、SQLRuntimeExceptionの例外MessageもしくはPropertyからGetできる
> ようにして欲しいです。
>
> Java版では、SSQLExceptionがSQL文を保持できるようになっていて、
> ApplicationではErrorレベルでSQL文を出力することが可能です。
> (2.3.9より)
>
> ※DEBUGではSQL文がLog出力されますが、Applicationで判断して
> Errorレベルで出力したい。
>
>
>
> 試しにCommandUtilとSQLRuntimeExceptionを以下のように修正したら、
> 上記のことが実現できました。(catchしてSQL文を取り出す)
>
>
> //
> // SQLRuntimeExceptionにConstructorを追加{SQLを指定できる}
> //
> public SQLRuntimeException(Exception cause, String targetSql)
> : base("ESSR0071", new object[] { cause }, cause)
> {
> _targetSql = targetSql;
> }
> //
> // SQLRuntimeExceptionに例外対象となったSQLのPropertyを追加
> // ★Instance変数も
> //
> public String TargetSql
> {
> get { return _targetSql; }
> set { _targetSql = value; }
> }
>
> //
> // SQLRuntimeExceptionの生成時にIDbCommandのCommandTextを格納
> // ★他のMethodも同様の修正
> //
> public static IDataReader ExecuteReader(IDataSource dataSource, IDbCommand cmd)
> {
> try
> {
> DataSourceUtil.SetTransaction(dataSource, cmd);
> return cmd.ExecuteReader();
> }
> catch(Exception ex)
> {
> throw new SQLRuntimeException(ex, cmd.CommandText);//★ここ
> }
> }
>
>
> ぜひともご検討お願いします。
>
>
>
> --
> kubo <jazzflute @ mbn.nifty.com>
--
Kazuya Sugimoto
http://d.hatena.ne.jp/sugimotokazuya/
seasar-dotnet メーリングリストの案内