첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

Dapper에서 DateTime? 컬럼 값 조회시 타입 변환 에러가 발생하기 때문에 NullableDateTimeHandler.cs 소스코드를 추가하고, 프로그램 시작시 아래 코드를 실행하도록 한다.

SqlMapper.AddTypeHandler(NullableDateTimeHandler.Default);

 

728x90

 

▶ NullableDateTimeHandler.cs

using System.Data;

using Dapper;

/// <summary>
/// NULLABLE 날짜/시간 핸들러
/// </summary>
public class NullableDateTimeHandler : SqlMapper.TypeHandler<DateTime?>
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Field
    ////////////////////////////////////////////////////////////////////////////////////////// Static
    //////////////////////////////////////////////////////////////////////////////// Public

    #region Field

    /// <summary>
    /// 디폴트
    /// </summary>
    public static readonly NullableDateTimeHandler Default = new NullableDateTimeHandler();

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Protected

    #region 생성자 - NullableDateTimeHandler()

    /// <summary>
    /// 생성자
    /// </summary>
    protected NullableDateTimeHandler()
    {
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 값 설정하기 - SetValue(parameter, value)

    /// <summary>
    /// 값 설정하기
    /// </summary>
    /// <param name="parameter">매개 변수</param>
    /// <param name="value">값</param>
    public override void SetValue(IDbDataParameter parameter, DateTime? value)
    {
        if(value.HasValue)
        {
            parameter.Value = value.Value;
        }
        else
        {
            parameter.Value = DBNull.Value;
        }
    }

    #endregion
    #region 파싱하기 - Parse(value)

    /// <summary>
    /// 파싱하기
    /// </summary>
    /// <param name="value">값</param>
    /// <returns>NULLABLE 날짜/시간 값</returns>
    public override DateTime? Parse(object value)
    {
        if(value == null)
        {
            return null;
        }

        if(value is DateTime)
        {
            return (DateTime)value;
        }

        return Convert.ToDateTime(value);
    }

    #endregion
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요