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