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

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


西山(hajimeni)です。

回答ありがとうございます。

> StringTypeに関しては、アプリ起動時に
> ValueTypes.RegisterValueType()で差し替えが可能かも。

そんな機能があったのですね。試してみます。

> InternalProcedureHandlerに関しては、現状では
> テンプレートを直すしか方法はないです。

了解いたしました。

> JA16SJISじゃなくて、全角チルダ問題を回避するための
> Oracleが提供するSJISのエンコーディングってありません
> でしたっけ?それを使って回避できないのかなと。
> (今回の件で適用できるかどうかは別にして)

JA16SJISTILDEです。それは把握しております。
可能ならばそちらにしたいのですが、同じDBに相乗りしているシステムがOracle8iクライアントを利用していまして・・・
Oracle8iクライアントから、
Oracle9iサーバーのJA16SJISTILDEに接続すると、レスポンス速度が著しく悪くなるという現象がありまして、JA16SJISにしてアプリで対応せざるを得ないという状況です。
(8iには〜TILDEがありませんので当然と言えば当然ですが・・・むしろ動く方がびっくり)

///
/// 本当はDBのCharsetはUTFにしたいのですが・・・
///

2010年2月16日11:52 kubo <[E-MAIL ADDRESS DELETED]>:
> 久保(jflute)です。
>
> 西山さん、こんにちは
>
> 自分も確証があるわけではないですが、
> 把握してる限りで、そのニ箇所ですね。
> プロシージャだけ特別ですが、あとは
> 基本StringTypeを直してしまえば他全ての処理で
> そのようになるはずです。
>
> StringTypeに関しては、アプリ起動時に
> ValueTypes.RegisterValueType()で差し替えが可能かも。
> InternalProcedureHandlerに関しては、現状では
> テンプレートを直すしか方法はないです。
>
> 後学のために:
>
> JA16SJISじゃなくて、全角チルダ問題を回避するための
> Oracleが提供するSJISのエンコーディングってありません
> でしたっけ?それを使って回避できないのかなと。
> (今回の件で適用できるかどうかは別にして)
>
> もし、NOだとすると、
> データプロバイダ次第で、DbTypeを調整する必要があるって
> のはちょっと色々と不都合があるので改善が必要かもですね。
> (NVarcharか否かを判定して、内部で自動でStringTypeを
> 切り替えるとか...逆にどのデータプロバイダでもそれで
> OKならわかりやすいのですが、データプロバイダごとに
> 最適な方法が変わるとつらいですね)
>
>
> 2010/2/16 西山はじめ <[E-MAIL ADDRESS DELETED]>:
>> 西山(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 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
>



-- 
--
西山はじめ


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