UseHourOffsetForUnsupportedTimezone

このプロパティは、.NETロケールに関連付けられているOracleタイムゾーンのリージョン名が、使用されているOracleデータベースでサポートされていない場合に、時間オフセットをセッションのタイムゾーンに使用できるかどうかを指定します

宣言

// C#
public bool UseHourOffsetForUnsupportedTimezone { get; set; }

プロパティ・タイプ

System.Boolean

例外

InvalidOperationException - この例外は、接続がOpen状態でこのプロパティが設定されている場合にスローされます。

備考

ODP.NETは、Oracleデータベース・クライアントがサポートする利用可能な最新のタイムゾーンをサポートするように構築されています。ただし、古いバージョンのOracleデータベースサーバーには、クライアントがサポートする同じタイムゾーンをすべてサポートする最新のタイムゾーン・ファイルがない場合があります。したがって、クライアントは、Oracleデータベースがサポートしていない接続タイムゾーンを要求する可能性があります。このような状況では、接続要求はORA-01882: timezone region not foundエラーを返します。

UseHourOffsetForUnsupportedTimezoneプロパティがtrueに設定されている場合、ODP.NETは、Oracle Databaseが.NETロケールに関連付けられたOracleタイムゾーンをサポートできない場合にのみタイムゾーンのリージョン名のかわりにhour offsetを使用して接続/セッションのタイムゾーンを初期化します。その後、ODP.NETは正常に接続し、ORA-01882エラーを回避できます。これは、Oracle Databaseが.NETロケールに関連付けられたOracleタイムゾーンをサポートしている場合、UseHourOffsetForUnsupportedTimezoneプロパティの設定に関係なく、接続/セッションがOracleタイムゾーンのリージョン名で初期化されることも意味します。

デフォルトでは、UseHourOffsetForUnsupportedTimezoneプロパティはfalseに設定されています。

タイムゾーン値を指定した日時は夏時間の影響を受けないため、時間オフセットの使用はお薦めしません。時間オフセットが有効になっている場合でも、ODP.NETは最初に.NETロケールに関連付けられたOracleタイムゾーンのリージョン名を使用しようとします。ORA-01882エラーが発生した場合にのみ、ODP.NETは2回目の接続試行中にセッションのタイムゾーンとして時間オフセットを使用します。したがって、最初の接続試行がORA-01882エラーで失敗した場合は、2つの接続要求が発生する可能性があります。

最初に正常に作成された接続に指定されたUseHourOffsetForUnsupportedTimezoneプロパティ値は、そのプール内の後続のすべての接続に使用されます。プーリングが使用されていない場合、プロパティの値は特定のOracleConnection.Open()呼出しに固有になります。

Oracleデータベースを最新のタイムゾーン/DSTファイルでアップグレードして、ORA-01882エラーを解決することをお薦めします。また、セッションのタイムゾーンにタイムゾーンのリージョン名を使用して、タイムゾーン値を指定した日時変換が夏時間の影響を受けるようにすることをお薦めします。

Oracle Databaseのタイムゾーン/DSTファイルをアップグレードできない場合、アプリケーションはUseHourOffsetForUnsupportedTimezoneプロパティをtrueに設定する必要があります。

サンプル・コード

using System;
using Oracle.ManagedDataAccess.Client;

class Test
{
  static void Main(string[] args)
  {
    string constr = "user id=hr;password=<password>;data source=oracle;”

    OracleConnection con = new OracleConnection(constr);

    // Have the connection created with the ‘hour offset’ being used as the session time zone
    // if the Oracle Database does not support the Oracle Time Zone associated with the 
    // .NET application’s locale
    con.UseHourOffsetForUnsupportedTimezone = true;

    // Establish a connection to Oracle
    con.Open();
    con.Dispose();
  }
}