ODP.NETグローバリゼーション・サポートを使用すると、アプリケーションでは地域に依存するデータを適切に処理できます。この機能により、Oracleグローバリゼーション設定に応じて、適切な文字列書式、日付、時刻、金額、数値、ソート順序およびカレンダの表記規則が使用されます。
この項の内容は次のとおりです。
OracleGlobalization
オブジェクトを使用すると、次のものを表すことができます。
クライアントのグローバリゼーション設定は、ローカル・コンピュータのWindowsレジストリのOracleグローバリゼーション設定(NLS_LANG
)から導出されます。クライアントのグローバリゼーション・パラメータ設定は読取り専用で、アプリケーションの存続中は一定です。クライアントのグローバリゼーション設定は、OracleGlobalization.GetClientInfo
静的メソッドをコールすることで取得できます。
次の例は、クライアントのグローバリゼーション設定を取得します。
// C# using System; using Oracle.DataAccess.Client; class ClientGlobalizationSample { static void Main() { OracleGlobalization ClientGlob = OracleGlobalization.GetClientInfo(); Console.WriteLine("Client machine language: " + ClientGlob.Language); Console.WriteLine("Client characterset: " + ClientGlob.ClientCharacterSet); } }
OracleGlobalization
オブジェクトのプロパティは、Oracleグローバリゼーション値の設定を指定します。
セッション・グローバリゼーション・パラメータは、最初はクライアントのグローバリゼーション設定と同じです。クライアント設定と異なり、セッションのグローバリゼーション設定は更新可能ですが、データベースに対する接続を確立した後にのみ取得できます。セッションのグローバリゼーション設定は、OracleConnection
オブジェクトでGetSessionInfo
メソッドをコールすることで取得できます。このメソッドを起動すると、プロパティがセッションのグローバリゼーション設定を表すOracleGlobalization
クラスのインスタンスのプロパティが戻されます。
OracleConnection
オブジェクトが接続を確立すると、クライアント・コンピュータのOracleグローバリゼーション(またはNational Language Setting(NLS))レジストリ設定で指定された値でグローバリゼーション・パラメータが初期化されたセッションが暗黙的にオープンします。セッション設定は更新可能で、存続中に変更できます。
次の例は、セッションの日付書式の設定を変更します。
// C# using System; using Oracle.DataAccess.Client; class SessionGlobalizationSample { static void Main() { OracleConnection con = new OracleConnection(); con.ConnectionString = "User Id=scott;Password=tiger;Data Source=oracle;"; con.Open(); OracleGlobalization SessionGlob = con.GetSessionInfo(); // SetSessionInfo updates the Session with the new value SessionGlob.DateFormat = "YYYY/MM/DD"; con.SetSessionInfo(SessionGlob); Console.WriteLine("Date Format successfully changed for the session"); // Close and Dispose OracleConnection object con.Close(); con.Dispose(); } }
スレッドベースのグローバリゼーション・パラメータ設定は、各スレッドに固有です。最初は、これらの設定はクライアントのグローバリゼーション設定と同じですが、アプリケーションで指定されたとおりに変更できます。ODP.NETタイプと文字列の間で変換が行われると、スレッドベースのグローバリゼーション・パラメータが使用されます(該当する場合)。
スレッドベースのグローバリゼーション・パラメータ設定は、OracleGlobalization
クラスのGetThreadInfo
静的メソッドを起動することで取得されます。OracleGlobalization
クラスのSetThreadInfo
静的メソッドをコールすると、スレッドのグローバリゼーション設定を設定できます。
地域に依存するデータを操作する場合、ODP.NETクラスおよび構造はOracleGlobalization
設定にのみ依存し、.NETスレッド地域情報は使用しません。アプリケーションが.NETタイプのみを使用する場合、OracleGlobalization
設定は影響しません。ただし、ODP.NETタイプと.NETタイプ間で変換が行われる場合、OracleGlobalization
設定が使用されます(該当する場合)。
注意: System.Threading.Thread. CurrentThread.CurrentCulture プロパティを変更しても、スレッドまたはセッションのOracleGlobalization 設定の設定には影響しません。その逆も同じです。 |
次のコードは、スレッドのグローバリゼーション設定がODP.NETタイプでどのように使用されるかを示しています。
// C# using System; using Oracle.DataAccess.Types; using Oracle.DataAccess.Client; class ThreadBasedGlobalizationSample { static void Main(string[] args) { // Set the thread's DateFormat for the OracleDate constructor OracleGlobalization info = OracleGlobalization.GetClientInfo(); info.DateFormat = "YYYY-MON-DD"; OracleGlobalization.SetThreadInfo(info); // construct OracleDate from a string using the DateFormat specified. OracleDate date = new OracleDate("1999-DEC-01"); // Set a different DateFormat for the thread info.DateFormat = "MM/DD/YYYY"; OracleGlobalization.SetThreadInfo(info); // Print "12/01/1999" Console.WriteLine(date.ToString()); } }
OracleGlobalization
オブジェクトは、プロパティの変更を検証します。プロパティの設定に無効な値が使用された場合、例外がスローされます。Territory
およびLanguage
プロパティに対する変更により、OracleGlobalization
オブジェクトの他のプロパティも暗黙的に変更されます。
この項では、グローバリゼーション設定に依存するODP.NETタイプおよび操作をリストします。
OracleString
構造は、クライアント・コンピュータのOracleGlobalization
設定に依存します。ローカル・コンピュータのクライアント・キャラクタ・セットは、GetNonUnicode
メソッドでUnicode文字列をbyte[]
に変換する場合、およびbyte[]
を受け入れるOracleString
コンストラクタでANSI文字のbyte[]
をUnicodeに変換する場合に使用されます。
スレッドのグローバリゼーション設定は、.NET文字列タイプとの間で変換が行われるときにODP.NETタイプで使用されます(該当する場合)。ほとんどの場合、次のODP.NETタイプによって、特定のスレッドのグローバリゼーション設定を使用します。
ToString
メソッド
Parse
静的メソッド
.NET文字列データを受け入れるコンストラクタ
.NET文字列との間の変換演算子
たとえば、ToString
メソッドが起動される場合、OracleDate
タイプは、スレッド・グローバリゼーション設定のDateFormat
プロパティを使用します。これは、スレッドの設定で指定された書式の文字列としてDATE
を戻します。
ODP.NETタイプと.NET文字列タイプの間で変換を行うODP.NETタイプ・メソッドの詳細、およびそのメソッドに使用されているスレッド・グローバリゼーション設定の判別方法は、第9章の説明を参照してください。
スレッドのグローバリゼーション設定は、Safeタイプ・マッピングを使用する文字列としてDataSet
に取得されるデータにも影響します。タイプが書式に依存する場合、文字列は常にスレッドのグローバリゼーション設定で指定された書式になります。
たとえば、INTERVAL
DAY
TO
SECOND
データは、スレッド設定の影響を受けません。このタイプには書式が適用されないためです。ただし、DateFormat
プロパティおよびNumericCharacters
プロパティは、Safeタイプ・マッピングによってDataSet
に文字列として取得される場合、それぞれDATE
タイプおよびNUMBER
タイプの文字列表現に影響します。