2016-07-19 6 views
0

.NETテクノロジはまったく新しいです。私は自分の要求をどのように進めるのか混乱しています。私は、サービスが呼び出されたときに実行する必要がある複雑なOracleクエリーを持っています。私はちょうど以下の質問のサンプルを与えています。Oracleクエリーを実行するパラメータを使用してWebサービスを作成します。

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 (?) 

STPR_STUDY.STD_REF IN(?)のWebサービスでパラメータにする必要があるクエリインチ私が試みてきたのは、WEB APIを使用してMVC ASP.NETアプリケーションを作成することです。私が正しく物事をやっている場合、私は解決策にしてDapplerネットistalledいる

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; 
    } 
} 
} 

とコントローラを作成しようとすると、現在のモデルクラス

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; 
    ....... 

を作成し、私は私が持っている、わかりませんフォーラムや記事を見て一緒にしようとしています。また、私はJSON形式でデータを返す必要がありますが、他の質問ではDTOを使用するように提案されました。誰も私にどのように進むことができますか教えてください

答えて

0

あなたは実際にクエリを実行していません。私はあなたが返すようにしようとしているが、DataTableのに選択からデータを取得すると、あなたが操作してみましょうか、.NET

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

おかげほうきでそれを表示するものを得ることはありません、私はインターネットでアプリケーションを実行しようとしましたOracleCommand、OracleDataAdapterおよびDataTableを追加した後に、 http:// localhost:21374/api/ProQueryのように、JSONファイルProQuery.Jsonを開くと、SELECT \ r \ n STCD_PRIO_CATEGORY_DESCR.DESCR、\ r \ n STRS_SESSION3.SESSION_NUM、\ r \ n Trunc( STRS_SESSION3.START_DATE)、\ r \ n .... "'strQueryで指定したクエリだけです。 – trx

+0

エンドポイントの作成に何か不足していますか? – trx

+0

あなたが探しているデータを返す必要があります。私があなたに与えたことは、selectResultsに、selectが生成するデータベースの実際のデータを書き込むことになります。渡すことができる文字列を作成するには、http://stackoverflow.com/questions/17398019/how-to-convert-datatable-to-json-in-c-sharpを参照してください。この文字列は、データを受け取った人がデシリアライズすることができます。 編集:データシートをJsonにシリアル化して返すように回答を編集しました。 – Broom

関連する問題