2016-07-18 2 views
0

저는 .NET을 처음 사용하고 웹 서비스를 작성합니다. 서비스가 호출 될 때 실행해야하는 복잡한 Oracle 쿼리가 있습니다. 나는 아래의 쿼리 샘플을 제공하고있다.웹 서비스 작성을위한 Dapper

SELECT 
STCD_PRIO_CATEGORY_DESCR.DESCR, 
STRS_SESSION3.SESSION_NUM, 
Trunc(STRS_SESSION3.START_DATE), 
STRS_SESSION3.START_DATE, 
Trunc(STRS_SESSION3.END_DATE), 
Round((TO_DATE (TO_CHAR (STRS_SESSION3.END_DATE, 'dd/mm/yyyy hh24:mi'),'dd/mm/yyyy hh24:mi') - TO_DATE (TO_CHAR (STRS_SESSION3.START_DATE, 'dd/mm/yyyy hh24:mi'),'dd/mm/yyyy hh24:mi'))*1440), 
STCD_ACT_DESCR4.DESCR, 
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), 
DECODE(SIGN((Trunc(ILRS_DOSE.RESULT_DATE)) - ( 
FROM 
STPR_STD_ANML, 
STPR_ANML, 
STPR_OPTIONS, 
STCD_ACT_DESCR STCD_ACT_DESCR4, 
STCD_ACT_DESCR, 
STCD_UNIT_DESCR, 
STCD_UNIT_DESCR STCD_UNIT_DESCR2, 
STCD_UNIT_DESCR STCD_UNIT_DESCR10, 
STCD_ACT STCD_ACT4, 
STCD_ACT, 
WHERE 
    (STPR_STUDY.ID=STPR_STUDY_DET.STD_ID) 
    AND (STPR_STUDY_DET.STD_TYPE_ID=STCD_STUDY_TYPE.ID) 
    AND (STCD_STUDY_TYPE_DESCR.STUDY_TYPE_ID(+)=STCD_STUDY_TYPE.ID AND STCD_STUDY_TYPE_DESCR.LANG_ID(+) = 1) 
    AND (STPR_STUDY.ID=STPR_STD_SPECIES.STD_ID(+)) 
    AND (STPR_STD_SPECIES.SPECIES_ID=STCD_SPECIES.ID(+)) 
    AND (STPR_STD_SPECIES.STRAIN_ID=STCD_STRAIN.ID(+)) 
    AND (STCD_SPECIES.ID=STCD_SPECIES_DESCR.SPECIES_ID(+) AND 
STPR_STUDY.STD_REF IN (?) 

나는 단정 한 사용을 통해 캠,하지만 내 질문에이 서비스가 호출 될 때 말끔이 결과를 반환하는 방법입니다 내가하지 오전 POCO 클래스를 만들 수 있습니다 (이 JSON 형식으로 반환 된 데이터가 가능하다) 각 요소의 유형이 select인지 확인하십시오. select 또는 string이 될 수 있습니다. 적절한 데이터 유형을 제공해야합니다. 내 질문은 어리석은 짓일지도 모르겠다. 나는이 문제에 익숙하지 않고 도움을 찾고있다. 감사합니다

답변

1

일반적으로 모델 (소품이있는 클래스)을 만든 다음 Dapper를 채워서 채 웁니다. 그런 다음 DB 열 유형과 일치하는 문자열, ints가되도록 속성을 설정할 수 있습니다. 예를 들어

:

List<Customer> customers = (List<Customer>)conn.Query<Customer>("SELECT * FROM Customer"); 

이 예에서는 고객 객체는 클래스이며, 고객 목록 고객 객체의 목록입니다. 그런 다음 데이터를 통해 재귀 할 수 있습니다.

다음은 고객 클래스가 포함되어있을 수 있습니다 무엇의 예 :

public class Customer 
    { 
     public int CustomerId; 
     public string Username; 
     public string FirstName; 
     public string LastName; 
    } 

그런 다음 사용하여 JSON에에는 직렬화 수 :

string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(customers); 

희망이 도움이 :)

+0

감사 Delosdos. 하지만 우리는 get과 set을 해당 열에 사용해야 만합니까? Dapper를 응용 프로그램에 사용하는 방법은 무엇입니까? – trx

+1

DB 열 이름이 클래스 속성 이름과 일치하면 Dapper가 자동으로 개체를 채 웁니다. 그래서 "public string DESCR"을 추가 할 것입니다. 및 "공개 문자열 SESSION_NUM;" 예 : – Delosdos

+0

Delosdos에 감사드립니다. 당신은 대단하다. 그러나 선택된 위성 질의 'Round ((TO_DATE (TO_CHAR (STRS_SESSION3.END_DATE,'dd/mm/yyyy hh24 : mi '),'dd/mm/yyyy hh24 : mi '와 같은) - TO_DATE (TO_CHAR (STRS_SESSION3.START_DATE, 'dd/mm/yyyy hh24 : mi'), 'dd/mm/yyyy hh24 : mi')) * 1440) '나도 똑같은 방식으로주고 싶니? – trx