ヘッダーをスキップ
Oracle® Data Provider for .NET開発者ガイド
12c リリース1(12.1)
B72971-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

グローバリゼーション・サポート

ODP.NETグローバリゼーション・サポートを使用すると、アプリケーションでは地域に依存するデータを適切に処理できます。この機能により、Oracleグローバリゼーション設定に応じて、適切な文字列書式、日付、時刻、金額、数値、ソート順序およびカレンダの表記規則が使用されます。


注意:

  • ODP.NET管理対象ドライバは、NLS_LANGを認識しません。.NETロケールのみ認識されます。

  • ODP.NET管理対象ドライバは、スレッドベースのグローバリゼーションをサポートしていません。


この項の内容は次のとおりです。

グローバリゼーション設定

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タイプの文字列表現に影響します。

セッション・グローバリゼーション・パラメータに依存する操作

セッション・グローバリゼーション設定は、データベースとの間で文字列として取得または送信されたデータに影響します。

たとえば、TO_CHAR()関数が適用されたDATE列を選択した場合、DATE列データは、セッション・グローバリゼーション設定のDateFormatプロパティで指定された日付書式の文字列になります。データを他のディレクションに送信する場合、DATE列に挿入される文字列データは、セッション・グローバリゼーション設定のDateFormatプロパティで指定された書式にする必要があります。