[seasar-dotnet:1554] [DBFlute.NET][S2Container.NET] IDbDataParameter の DbType を変更する場合

西山はじめ [E-MAIL ADDRESS DELETED]
2010年 2月 16日 (火) 11:16:48 JST


西山(hajimeni)です。
お世話になっております。

DBFlute.NET利用時に、IDbDataParameter の DbType を変更する場合、次の箇所を直せば大丈夫でしょうか。
String型の時だけ DbType.String ではなく、 DbType.AnsiString を指定したいと思っています。

・Seasar.Extension.ADO.Types.StringTypeのBindValueメソッドを次のように変更。
BindValue(cmd, columnName, value, DbType.AnsiString);

・Sample.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.InternalProcedureHandler
のGetDbValueType内のメソッドを変更。
・・・(略)
if (type == typeof(String) || type.FullName == "System.String&")
    return DbType.AnsiString;
・・・(略)

環境は次のとおりです。
Oracle9i(9.2.0.6)
 (文字コード:JA16SJIS)
S2Container.NET 1.3.16.1
DBFlute.NET 0.8.9.2

というのも、どうやらOracleとの接続に利用しているサードパーティ製のdllでは、
DbType.AnsiString → Varchar
DbType.String → NVarchar
と解釈するため、データベースの文字コードが「JA16SJIS」の場合、「〜」が上手く検索出来ない(いわゆる全角チルダ問題)
が発生してしまいます。
DbType.String を指定した場合、単純に検索した結果が文字化けするのではなく、検索結果そのものが存在しなくなってしまいます。

回避策はどうやら、DbType.AnsiString を指定するしかないとのことです。

出来れば、.NETのTypeと DbTypeのマッピングが変更出来ればよいのですが、割りと早めに修正しなければならない為、直接手をいれることにしました。

以上よろしくお願いいたします
-- 
--
西山はじめ


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