2009-12-17 8 views
3

나는 이전 Oracle 데이터베이스로 작업하고 있으며 데이터베이스에서 검색 한 값을 언 박싱하는 데 더 좋은 방법이 있다고 생각합니다.올바른 데이터베이스 값 unbox 방법

현재, 나는 다른 종류의 특정 방법의 전체 정적 클래스가 : 서로 다른 유형의 등

public static int? Int(object o) 
{ 
    try 
    { 
     return (int?)Convert.ToInt32(o); 
    } 
    catch (Exception) 
    { 
     return null; 
    } 
}

.. 그리고,하지만 난 더 나은 방법이 있어야한다고 생각한다? 내가 값을 언 박싱 할 경우에, 나는

int i; 
i = nvl.Int(dataRow["column"]); //In this instance, "column" is of a numeric database type

내가 모든 다른 유형을 처리하는 일반적인 클래스를 사용하는 방법에 대한 생각 ...의 라인을 따라 뭔가를,하지만 난 정말 알아낼 수 그것에 대해 가장 좋은 방법.

아이디어가 있으십니까? -

답변

6

내가 같은 시나리오에서 다음과 같은 유용한 도우미 방법을 찾을 수 DBNull이를 테스트 당신의 예에서와 같이 예외를 잡기보다 더 효율적입니다 :

public static MyHelper 
{ 
    public static Nullable<T> ToNullable<T>(object value) where T : struct 
    { 
     if (value == null) return null; 
     if (Convert.IsDBNull(value)) return null; 
     return (T) value; 
    } 

    public static string ToString(object value) 
    { 
     if (value == null) return null; 
     if (Convert.IsDBNull(value)) return null; 
     return (string)value; 
    } 
} 
이는 문자열 및 일반적인 기본 값 유형 작동

(int, decimal, double, bool, DateTime)이 발생합니다.

이것은 개종자가 아니라 주조자라는 견해와 약간 다릅니다. 그러나 개인적으로 나는 이것을 선호합니다. 나는. 데이터베이스 컬럼이 숫자 (10 진수) 인 경우 나 : 값이 int로 예컨대 변환

int? myIntValue = (int?) MyHelper.ToNullable<decimal>(reader["MyNumericColumn"]); 
+0

대단합니다. 조 감사합니다. 나는 나의 무지에 대한 미안 해요,하지만 난 첫 번째 줄에 정말 명확하지 않다 : T 공공 정적 Null 허용 ToNullable (개체 값) : 특히 구조체 은 " Null 허용"다음에 " ToNullable "부분. 이 클래스/메서드를 만들기위한 속기 방법인가요? – KarlHungus

+0

그것은 메소드 선언입니다 :이 클래스를 명확하게하기 위해 클래스 선언 (클래스 MyHelper)을 샘플에 추가했습니다. "Nullable "은 메서드의 반환 형식이며 "ToNullable "은 메서드 이름입니다. "T"를 값 유형 또는 struct (T : struct) 여야한다는 사실에 제약을받는 모든 유형으로 대체합니다. 따라서 10 진수 형식 (ToNullable )으로 메서드를 호출하면 반환 유형은 Nullable ("decimal?")이됩니다. 희망이 조금 더 명확합니다. – Joe

+0

아, 내가 사용했던 "Nullable"클래스에 익숙하지 않았습니다. Joe에게 감사드립니다. 감사합니다. – KarlHungus

0

당신은 간단한 모델 클래스를 소개하고 그들 사이에 매핑 할 수 있습니다 원한다면, 차라리 명시 될 것입니다. 예를 들어

: 물론

public class Customer 
{ 
    public Customer(DataRow row) 
    { 
     Name = row["Name"]; 
    } 
    public Name { get; private set; } 
} 

가 중복 코드를 줄이기 위해, 당신은 당신의 모델 데이터 클래스에 대한 기본 클래스를 만들 수 있습니다.

지출하려는 노력에 따라 ORM 매퍼 NHibernate를 사용할 수 있습니다.