7

oracle.manageddataaccess (NHibernate 4.0 経由) を介して Oracle 12c を使用する winforms c# アプリケーションがあります。Oracle データベースは顧客サイトの別のマシンにあります。Oracle データベースとクライアント マシンの NLS_LANG の違いにより、文字セットの変換に問題がありました。 . クライアント マシンに Oracle クライアントがインストールされていません (マネージド ドライバーのみを使用)。

環境変数を使用してクライアント NLS_LANG を指定できることがわかりました。

私の質問は、Oracle で新しい Managed Data Access を使用するときに NLS_LANG 設定を指定する他の方法はありますか?

4

5 に答える 5

7

OracleGlobalization を使用して、次のように日付形式を設定しています。これはあなたに手がかりを与えるかもしれません..

 conn = new OracleConnection(connectionString);
        conn.Open();
        OracleGlobalization info = conn.GetSessionInfo();
        info.DateFormat = "YYYY-MM-DD";
        conn.SetSessionInfo(info);
于 2014-10-12T14:52:23.757 に答える
4

No, this is not possible, see documentation Data Provider for .NET Developer's Guide where it says

ODP.NET, Managed Driver is not NLS_LANG sensitive. It is only .NET locale sensitive.

Also see OracleGlobalization Properties

  • ClientCharacterSet -> public string ClientCharacterSet { get; }

    Specifies a client character set. Not Available in ODP.NET, Managed Driver

于 2015-12-18T07:09:25.897 に答える
3

アンマネージド ODP からマネージド ODP に移行すると、問題が発生します。ここでは、 OracleConnectionを開いた部分に NLS_LANG を設定する方法を示します。

string nlsLang = Settings.Default.NLS_LANG;
var arr = nlsLang.Split('_');
string language = arr[0];
arr = arr[1].Split('.');
string territory = arr[0];
string characterSet = arr[1];

OracleGlobalization info = connection.GetSessionInfo();
info.Language = language;
info.Territory = territory;
info.NumericCharacters = characterSet;
connection.SetSessionInfo(info);
于 2016-05-11T08:48:44.697 に答える
0

NLS_LANG キーについては、Windows レジストリを確認してください。キーの設定は、環境変数の設定とほぼ同等ですが、両方が存在する場合は、環境変数が優先されます。この StackOverflow の質問は、この質問に少し関連していました。

Oracle クライアントのレジストリで NLS_LANG 設定を変更した場合の影響

今日のインストール セッション中に、Web アプリケーションが 64 ビット OS 上で 32 ビット モードで実行されていることがわかりました。そのため、使用されているレジストリの場所は標準のものとは異なります。HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1 にあります。regedit を使用してグローバル検索を実行し、NLS_LANG キーがどこにあるかを確認することをお勧めします。

于 2014-12-08T00:24:44.113 に答える