2016-07-19 16 views
0

Ich bin ganz neu in der .NET-Technologie. Ich habe eine Verwirrung, wie ich mit meiner Anforderung fortfahren soll. Ich habe eine komplexe Oracle-Abfrage, die ausgeführt werden muss, wenn die Dienste aufgerufen werden. Ich gebe nur das Beispiel der Abfrage unten.Erstellen Sie einen Web-Service mit dem Parameter, der die Oracle-Abfrage ausführen wird

SELECT 
STCD_PRIO_CATEGORY_DESCR.DESCR AS CATEGORY, 
STRS_SESSION3.SESSION_NUM AS SESSION_NUMBER , 
Trunc(STRS_SESSION3.START_DATE) AS SESSION_START_DATE, 
STRS_SESSION3.START_DATE AS SESSION_START_TIME, 
Trunc(STRS_SESSION3.END_DATE) AS SESSION_END_DATE, 
STRS_SESSION3.END_DATE AS SESSION_END_TIME, 
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)) - (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)), 
Trunc(ILRS_DOSE.RESULT_DATE), 
ILRS_DOSE.RESULT_DATE, 
STPR_STD_ANML.ANML_REF, 
STPR_GRP.LONG_NAME, 
decode(STPR_ANML.SEX,0,'Male',1,'Female',2,'Herm','--'), 
STPR_STUDY.STD_REF, 
STCD_TA_DESCR.COMMON_NAME_1, 
STPR_DOSE_DET.TA_AMOUNT, 
trim(STCD_ADMIN_ROUTE_DESCR.DESCR), 
STCD_UNIT_DESCR.DESCR, 
STCD_VEH_SOLV_DESCR.DESCR, 
decode(sign((DECODE(SIGN((trunc(ILRS_ANML.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))),-1,(trunc(ILRS_ANML.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE)),(trunc(ILRS_ANML.RESULT_DATE)) - (trunc(STPR_STD_ANML.START_DATE))+(STPR_OPTIONS.VALUEN)))),-1,'Y',0,'N','N') 
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, 
STCD_RESRCE_DESCR STCD_RESRCE_DESCR1, 
STCD_RESRCE_DESCR, 
STCD_UNIT, 
STCD_UNIT STCD_UNIT2, 
STCD_UNIT STCD_UNIT10, 
STCD_STUDY_TYPE_DESCR, 
STPR_GRP, 
STCD_RESRCE STCD_RESRCE2, 
STCD_RESRCE STCD_RESRCE1, 
STCD_RESRCE, 
STPR_DOSE_DET, 
STCD_STRAIN_DESCR, 
STCD_STUDY_TYPE, 
STCD_ADMIN_ROUTE_DESCR, 
STCD_VEH_SOLV_DESCR, 
STPR_STUDY, 
STCD_SPECIES_DESCR, 
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 STCD_SPECIES_DESCR.LANG_ID(+) = 1) 
AND (STCD_STRAIN.ID=STCD_STRAIN_DESCR.STRAIN_ID(+) AND STCD_STRAIN_DESCR.LANG_ID(+) = 1) 
AND (STPR_ROOM.STD_ID(+)=STPR_STUDY.ID) 
AND (STCD_RESRCE.ID(+)=STPR_ROOM.RESRCE_ID) 
    AND (STCD_RESRCE.ID=STCD_RESRCE_DESCR.RESRCE_ID(+) AND   STCD_RESRCE_DESCR.LANG_ID(+) = 1 
    ) 
     AND (STPR_STUDY.ID=STPR_KEY_PERS.STD_ID(+)AND STPR_KEY_PERS.STD_DIRECTOR (+) =1) 
    AND (STPR_KEY_PERS.USER_ID=STCD_USER.ID(+)) 
    AND (STPR_STD_ANML.STD_ID=STPR_GRP.STD_ID AND STPR_STD_ANML.GRP_ID = STPR_GRP.ID) 
    AND (STPR_GRP.ID=STPR_DOSE_DET.GRP_ID(+)) 
    AND (STPR_DOSE_DET.TREATMT_ID=STPR_TREATMT.ACT_ID(+)) 
    AND (STPR_TREATMT.ADMIN_ROUTE_UNIT_ID=STCD_UNIT.ID(+)) 
    AND (STCD_UNIT.ID=STCD_UNIT_DESCR.UNIT_ID(+) AND  STCD_UNIT_DESCR.LANG_ID(+) = 1) 
    AND (STPR_TREATMT.VEH_ID=STCD_VEH_SOLV.ID(+)) 

    AND (STPR_TREATMT.ADMIN_ROUTE_ID=STCD_ADMIN_ROUTE.ID(+)) 
    AND (STCD_ACT_DESCR.ACT_ID(+)=STCD_ACT.ID AND 
    STPR_STUDY.STD_REF IN (?) 

Wo STPR_STUDY.STD_REF IN (?) In der Abfrage, die Parameter in dem Web-Dienst sein muss. Was ich versucht habe, ist eine MVC ASP.NET Anwendung mit der WEB API zu erstellen. Der Versuch, einen Controller mit

using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
namespace ProConn.Controllers 
{ 
public class ProQueryController : ApiController 
{ 
    public string Get() 
    { 
     var strQuery = @"The above query"; 
     OracleConnection dbConn = new OracleConnection("DATA SOURCE=ABC;PASSWORD=ABCD;PERSIST SECURITY INFO=True;USER ID=ABCDE"); 

     dbConn.Open(); 

     dbConn.Close(); 

     return strQuery; 
    } 
} 
} 

ich die Dappler .Net haben zu schaffen, in der Lösung istalled und jetzt die Model-Klasse zu schaffen

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ProConn.Models 
{ 
public class ProStudyData 
{ 
    public string CATEGORY; 
    public int SESSION_NUMBER; 
    public DateTime SESSION_START_DATE; 
    public DateTime SESSION_START_TIME; 
    public DateTime SESSION_END_DATE; 
    public DateTime SESSION_END_TIME; 
    ....... 

Ich bin nicht sicher, ob ich die Dinge richtig tue, ich habe auf Foren und Artikel schauen und versuchen, sich zusammenzusetzen. Auch muss ich die Daten im JSON-Format zurückgeben, in der anderen Frage wurde vorgeschlagen, DTO zu verwenden. Kann mir bitte jemand Anleitung, wie kann ich fortfahren

Antwort

0

Sie fehlen die tatsächliche Ausführung der Abfrage. Ich verstehe nicht, was Sie versuchen, zurückzukehren, aber die Daten aus der Auswahl in eine Datatable immer lassen Sie manipulieren oder es in

using Oracle.ManagedDataAccess.Client; 
using System.Data; 
using Newtonsoft.Json; 
    public string Get() 
    { 
     var strQuery = @"The above query"; 

     OracleConnection dbConn = new OracleConnection("DATA SOURCE=ABC;PASSWORD=ABCD;PERSIST SECURITY INFO=True;USER ID=ABCDE"); 

     dbConn.Open(); 

     OracleCommand selectCommand = new OracleCommand(strQuery, dbConn); 
     OracleDataAdapter adapter = new OracleDataAdapter(selectCommand); 
     DataTable selectResults = new DataTable(); 
     adapter.Fill(selectResults); 

     dbConn.Close(); 
     return JsonConvert.SerializeObject(selectResults); 
    } 
+0

Dank Broom .NET anzuzeigen, habe ich versucht, die Anwendung im Internet laufen Explorer nach dem Hinzufügen von OracleCommand, OracleDataAdapter und DataTable. wie http: // localhost: 21374/api/ProQuery öffnet es eine JSON Datei ProQuery.Json es muss nur das unten ‚" SELECT \ r \ n STCD_PRIO_CATEGORY_DESCR.DESCR, \ r \ n STRS_SESSION3.SESSION_NUM, \ r \ n Trunc (STRS_SESSION3.START_DATE), \ r \ n .... '' nur watever query gab ich in der strQuery – trx

+0

Ich vermisse ich etwas bei der Erstellung des Endpunkts ?? – trx

+0

Sie müssen die Daten, die Sie suchen, zurückgeben. Was ich Ihnen gegeben habe, füllt selectResults mit den tatsächlichen Daten aus der Datenbank, die die Auswahl erzeugen würde. Sehen Sie sich http://StackOverflow.com/questions/17398019/how-to-convert-datatable-to-json-in-c-sharp zum Erstellen einer Zeichenfolge an, die übergeben werden kann, die von jedem, der die Daten empfängt, deserialisiert werden kann. Edit: Ich bearbeitet meine Antwort zu Serialisierung der Datentabelle zu Json und die Rückkehr. – Broom