2009-05-19 10 views
0

NLS_LANGがIW8ISO8859P8に設定された従来のデータベースセットがあります。これは私が変えることはできません。Oracle Connectionとnls_lang

私のアプリケーションが動作するのと同じデータで動作する、ユニコードでは動作しない別のアプリケーションがあります。 一部のフィールドおよび時には、ユーザーは文字列の一部としてNIS通貨シブルを表す文字161を挿入します。 oledbを使用して.Netからこのデータを読み取ろうとすると、すべて正常ですが、oracleクライアントでこれを実行しようとすると、代わりにガベージ・データが取得されます。また、NIS simbleを.Netに挿入すると、ゴミとして保存されます。

私はそれを取得した後でデータを操作することができますが、これを動作させるには、.NETでのoracleクライアントの構成を探しています。

私は数週間この作業に取り組んでいます。どんな助けもあります。 Tnx ノーム

答えて

0

今日の終わりに、私はセカンダリnvarcharカラムを使って解決しました。それらの間を翻訳するようにトリガーします。

多くの多くのif文によって実現されるカスタム・エンコーディングを使用して、Unicodeとのバイト変換を行う関数をplsqlに書きました。

問題のあるデータを含む各列に対して、nvarcharストレージを持つ2番目の列を追加し、その関数を使用して問題のあるデータを変換するトリガーを追加しました。

したがって、従来のアプリケーションではvarcharカラムが使用され、更新され、トリガによってそのカラムがUnicodeカラムに変換されます。 .NetコードはUnicode列を使用し、トリガーは情報をレガシーアプリケーションで使用される問題のあるエンコーディングに変換します。

あなたはより多くの情報が必要な場合は、[はい、クライアント間でデータを移動するのに問題以来、その中の任意のヘルプを見つけることができませんでし

+0

あなたが書いたいくつかのサンプルバイト変換コードを追加するといいかもしれません – mkb

+0

これは粗バイトからバイトへの変換です - 誇りに思うことはありません:) – Noam

+0

私はあなたを理解していますが、そのエンコードについては、私はそれが原油になることができないように感じる:) – mkb

0

オラクルのNLS_LANG FAQを見ましたか?

+0

より多くの情報のための私に連絡すること自由に感じ、および.NETが参照されていませんしてくださいそこ。 – Noam

0

クライアントのnls_lang設定を確認しましたか? nls設定の変更は、クライアント(レジストリと環境)の設定によって上書きできます。おそらくこれがあなたの問題の原因です。 クライアントに他のnls設定がないことを確認します。また、あなた以外の機能が明示的に設定を変更しないようにしてください。 アフターログオントリガを実行してセッションフォーマットを変更できます。これにより、サーバーの設定がすべてのクライアントに影響することが確認されます。 さらに、nls_territoryが設定されていることを確認してください。 nls_langの一部として設定する必要がありますが、nls_languageを意味する場合にのみ使用してください。私は通貨記号がこれによって影響を受けると信じています。

+0

私は自分のクライアントの設定を確認しており、同じです。 同じマシン上で実行されている別の非Unicodeアプリケーションがあり、完全に動作することに注意してください。唯一の問題は.Netからデータを取得し、OracleクライアントがUnicodeに変換して文字が失われます。 – Noam

関連する問題