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オブジェクトの他のプロパティも暗黙的に変更されます。
|
関連項目: TerritoryおよびLanguageグローバリゼーション設定の影響を受けるプロパティの詳細は、Oracle Databaseグローバリゼーション・サポート・ガイドを参照 |
この項では、グローバリゼーション設定に依存する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タイプ・メソッドの詳細、およびその特定のメソッドに使用されているスレッド・グローバリゼーション設定の判別方法は、第10章の記述を参照してください。
スレッドのグローバリゼーション設定は、Safeタイプ・マッピングを使用する文字列としてDataSetに取得されるデータにも影響します。タイプが書式に依存する場合、文字列は常にスレッドのグローバリゼーション設定で指定された書式になります。
たとえば、INTERVAL DAY TO SECONDデータは、スレッド設定の影響を受けません。このタイプには書式が適用されないためです。ただし、DateFormatプロパティおよびNumericCharactersプロパティは、Safeタイプ・マッピングによってDataSetに文字列として取得される場合、それぞれDATEタイプおよびNUMBERタイプの文字列表現に影響します。