[seasar-dotnet:347] [Seasar]SQLRuntimeExceptionの中に実行SQLを格納して欲しい

kubo jazzflute @ mbn.nifty.com
2006年 9月 19日 (火) 19:21:22 JST


久保です。

要望です。

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>




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