2015-01-12 5 views
2

"TIMESTAMP (6) LOCAL TIME ZONE"유형의 열에 날짜를 저장하는 Oracle 11.2.0.2.0 데이터베이스에서 실행되는 .Net 응용 프로그램을 작성 중입니다. 열에 저장된 날짜가 DST 내에 있으면 Oracle.ManagedDataAccess 라이브러리를 사용할 때 날짜가 잘못 읽혀집니다. 항상 날짜를 정확하게 기록/업데이트하는 것처럼 보입니다. 또한 Oracle.DataAccess 라이브러리를 사용할 때 항상 날짜를 올바르게 처리합니다.Oracle.ManagedDataAccess가 DST 날짜를 잘못 읽음

예를 들어, 'America/New_York'시간대와 08/01/2014 12:00:00의 시간대를 사용하고 있습니다. 여기에 잘못 날짜 읽는 코드 조각입니다 : 열이 값 2014년 8월 1일 12시 0분 0초으로 업데이트 될 때

IDbConnection cxn = new Oracle.ManagedDataAccess.Client.OracleConnection(ConnStr); 
// Using the following library works correctly: 
// IDbConnection cxn = new Oracle.DataAccess.Client.OracleConnection(ConnStr); 
cxn.Open(); 

var cmd = cxn.CreateCommand(); 
cmd.CommandText = "alter session set time_zone='America/New_York'"; 
cmd.ExecuteNonQuery(); 
cmd.CommandText = "SELECT TEST_DATE FROM TEST_TABLE WHERE ROWNUM=1"; 
return (DateTime)cmd.ExecuteScalar(); 

는, 그것은 2014년 8월 1일 11시과 같이한다 : 00. DST에 속하지 않는 날짜 (예 : 12/01/2014 12:00:00)를 사용하면 날짜를 올바르게 읽습니다. 이것에 대한 아이디어가 있습니까? 나는 모든 것을 조사해 왔지만이 문제에 대한 어떠한 문서도 찾지 못했습니다. Oracle.DataAccess로 다시 전환해야하지만이를 피하기를 원했습니다. 미리 감사드립니다!

답변

1

Oracle.ManagedDataAccess는 여전히 매우 새롭기 때문에 항상 "최신"버그를 얻습니다.

다른 방법으로 현재 세션 시간대를 정의 할 수 있습니다. 다음 작업 중 하나 일 수 있습니다. OracleGlobalization 클래스의

  • 사용법 : 이것은 매우 신중하게, OracleGlobalization 내 경험은 매우 나쁜

    this.Connection = new OracleConnection(); 
    this.Connection.ConnectionString = ... 
    this.Connection.Open(); 
    OracleGlobalization info = this.Connection.GetSessionInfo(); 
    info.TimeZone = "America/New_York"; 
    this.Connection.SetSessionInfo(info); 
    

    테스트합니다. 시험도 this.Connection.OpenWithNewPassword(...);,뿐만 아니라 this.Connection.Open();. OpenWithNewPassword을 사용했을 때 Visual Studio에서 디버깅하는 중에도 내 응용 프로그램이 아무런 오류없이 손상되었습니다!

  • 레지스트리에 시간대를 설정하면 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_{YOUR_ORACLE_HOME_NAME}\ORA_SDTZ의 문자열 값입니다. 시스템의 환경 변수 등의 x86 (32 비트) 응용 프로그램

    Windows Registry Editor Version 5.00 
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1] 
    "ORA_SDTZ"="America/New_York" 
    
  • 설정 ORA_SDTZ를 들어 64 (64 비트) 응용 프로그램

    Windows Registry Editor Version 5.00 
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1] 
    "ORA_SDTZ"="America/New_York" 
    

    를 들어

    .

관련 문제