2015-01-27 1 views
0

오라클에서 mongodb로 데이터를 변환하는 애플리케이션을 구축했습니다. 일부 오류가 발생할 때까지 응용 프로그램이 정상적으로 작동합니다. 오류는 Specified cast is not valid입니다.oracle에서 mongodb로 십진수 저장

오라클에 데이터를 검사하려고 시도했는데 일부 레코드의 값이 1.4211E-14 인 필드를 발견했습니다.

저는 값을 받기 위해 OracleDataReader을 사용합니다. 이 코드를 사용하여 진수로 변환 시도했다 :

OracleDataReader reader = command.ExecuteReader(); 

... 

decimal value = 0; 
if (decimal.TryParse(reader.GetString(i), NumberStyles.Float, CultureInfo.InvariantCulture, out value)) 
    document.Set(reader.GetName(i), Convert.ToDouble(value)); 
else { 
    var v = reader.GetDecimal(i)/(decimal)1000000; 
    document.Set(reader.GetName(i), (float) v); 
} 

또는이 :

document.Set(reader.GetName(i), Convert.ToString(reader.GetDecimal(i))); 

예외가 여전히 발생했습니다. mongodb에 숫자 데이터로 1.4211E-14을 저장하려면 어떻게해야합니까?

mongo가 10 진수 값을 인식하지 못하기 때문에 값을 직접 mongodb에 저장할 수 없습니다. 사전에

enter image description here

감사합니다.

+2

왜 십진수 값을 문자열로 유지합니까? 그냥 10 진수로 저장하고'GetDecimal' 메서드를 사용하면됩니다. –

+0

내 업데이트를 확인하십시오 – nvl

+0

이 업데이트는 잘못된 유형의 사용과 관련이 없습니다. 그냥 * 문자열로 변환하지 마십시오. 'GetDecimal()'으로 값을 읽어 들인 그대로 전달하거나 명시 적으로 BsonDouble로 변환하십시오. –

답변

0

나는 아직 어떤 해결책도 얻지 못했습니다. 그래서 나는 질의를 직접 수정했다. 그것은 C#을

SELECT ..., TO_CHAR(a_field) as a_field FROM table; 

에 두 배로 다음

OracleDataReader reader = command.ExecuteReader(); 

... 

var field = reader.GetName(i); 
if (field.equals(a_field) { 
    document.Set(field, Convert.ToDouble(reader.GetString(i))); 
} 

.... 

이 하나의 작품으로 변환 한 후 문자열로 필드를 캐스팅합니다.