문제

이전 Oracle 데이터베이스로 작업하고 있으며 데이터베이스에서 검색하는 값을 무너 뜨리는 더 좋은 방법이있을 것입니다.

현재 다른 유형 별 방법으로 가득 찬 정적 클래스가 있습니다.

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

나는 일반적인 클래스를 사용하여 모든 다른 유형을 처리하는 것에 대해 생각했지만 실제로는 가장 좋은 방법을 알 수 없었습니다.

어떤 아이디어?

도움이 되었습니까?

해결책

시나리오에서 다음 유용한 방법과 같은 도우미 방법을 발견합니다. 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)에 적용됩니다.

개종자보다는 캐스트된다는 점에서 예제와 약간 다릅니다. 그러나 개인적으로 나는 이것을 선호합니다. 즉, 데이터베이스 열이 숫자 (소수) 인 경우 값을 int로 변환하려면 오히려 명시 적입니다.

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

다른 팁

간단한 모델 클래스를 소개하고 그들 사이에지도를 표시 할 수 있습니다.

예를 들어:

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

물론 중복 코드를 줄이려면 모델 데이터 클래스를위한 기본 클래스를 만들 수 있습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top