2016-07-19 1 views
0

Oracle Db에 연결할 매개 변수를 사용하여 서비스를 만들려고하는데 복잡한 쿼리를 실행하고 결과를 JSON 형식으로 반환해야합니다. 나는 이것으로 도움이 될 Dapper ORM을 확인하고있었습니다. 쿼리가 복잡으로 Dapper 클래스 속성 이름에 return 데이터 유형이 있습니다. C#

enter image description here

SELECT 
SICD_PRIO_CATEGORY_DESCR.DESCR, 
STRS_SESSION3.SESSION_NUM, 
Trunc(STRS_SESSION.START_DATE), 
STRS_SESSION3.START_DATE, 
STCD_ACT_DESCR4.DESCR AS DOSE_ACTIVITY, 
decode((decode(sign((DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN)))),-1,'Y',0,'N','N')), 'N', Decode ((STPR_OPTIONS.VALUEN), '1', trunc(((DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN)))-1) /7)+1, '0', trunc((DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN)))/7)), 'Y', (trunc(((DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(Trunc(ILRS_DOSE.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN))) +1)/ 7)-1) , -999) AS RESULT_WEEK 

그래서 다른 질문에서 나는 열 이름도 클래스 속성 데이터 유형과 일치한다는 것을 발견했다.

public class StudyData 
{ 
public string DESCR, 
public string SESSION_NUM 
} 

반환 유형을 모든 열에 대해 문자열로 지정할 수 있거나 특정 반환 유형이어야 할 수 있습니다. 또한 DateTime은 C#에서 Date Datatype을 볼 수 없기 때문에 두 날짜 (18-DEC-12 및 18-DEC-12 07.52.25.977272000 AM -08 : 00)를 참조합니다. C# 프로그래밍을 처음 접했을 때 어떤 도움도 크게 받으실 수 있습니다.

+0

문제는 아마 모범 사례에 위배되는 공개 필드 일 것입니다 ... 당신은 그 속성을 만들어야합니다. public string DESCR {get; 세트; }'. –

+0

이 쿼리를 한 곳에서만 사용하는 경우 동적 결과를 사용하여 실제 DTO에 매핑하는 것이 좋습니다 ... 보내려는 JSON 객체를 따라야하는 스펙이 있습니까? – konkked

+0

konkked, 이것들은 쿼리의 일부입니다. 쿼리를 실행해야 할 필요가 더 복잡합니다. JSON 객체에 대한 사양은 없으며 요청 응답은 JSON 형식으로 쿼리 응답을 얻을 수 있는지 묻는 것입니다. – trx

답변

1

속성의 데이터 유형이 열의 데이터 유형과 일치해야합니다. 예를 들어 int 데이터 유형이있는 Id 열이 있으면 클래스의 속성에 int 데이터 유형이 있어야합니다.

public int Id{ get; set; } 

C#에는 datetime 데이터 유형이 있습니다. 날짜 데이터를 보유하고있는 열의 datatype으로 datetime을 사용하십시오. 귀하의 경우

public class StudyData 
    { 
     public string DESCR { get; set; } 
     public string SESSION_NUM { get; set; } 
     public DateTime START_DATE { get; set; } 
     public int RESULT_WEEK { get; set; } 
    } 

이에서

public datetime createdDate { get; set; } 

이 가능한 수준의 청사진이 될 수 있습니다. 희망이 도움이됩니다.

+0

감사합니다 Saket, 열의 데이터 형식, 예를 들어 'Trunc (STRS_SESSION.START_DATE), STRS_SESSION.START_DATE'와 같은 선택한 열이 테이블의 DateTime 필드의 START_DATE 필드를 참조하는 두 열이어야한다는 것을 알고 있습니다. 하나는 결과를 18-DEC-12로, 다른 하나는 18-DEC-12 07.52.25.977272000 AM -08 : 00로 반환합니다. 그래서 두 컬럼 모두 DateTime을 제공합니까? – trx

+0

@trx 예, 두 열 모두 datetime을 datetime으로 사용합니다. 답변을 표시하지 않으면 답변이없는 것으로 나타납니다. –