我們創建了Web API,它通過接受事件查詢參數數組並返回JSON格式的結果來查詢Oracle數據庫。將多個數組作爲Web API的輸入參數
public class TestQueryController : ApiController
{
public HttpResponseMessage Getdetails([FromUri] string[] id)
{
List<OracleParameter> prms = new List<OracleParameter>();
string connStr = ConfigurationManager.ConnectionStrings["PDataConnection"].ConnectionString;
using (OracleConnection dbconn = new OracleConnection(connStr))
{
var inconditions = id.Distinct().ToArray();
var srtcon = string.Join(",", inconditions);
DataSet userDataset = new DataSet();
var strQuery = @"SELECT STCD_PRIO_CATEGORY_DESCR.DESCR AS CATEGORY,
STCD_PRIO_CATEGORY_DESCR.SESSION_NUM AS SESSION_NUMBER,
Trunc(STCD_PRIO_CATEGORY_DESCR.START_DATE) AS SESSION_START_DATE
from STCD_PRIO_CATEGORY
where STCD_PRIO_CATEGORY_DESCR.STD_REF IN(";
StringBuilder sb = new StringBuilder(strQuery);
for(int x = 0; x < inconditions.Length; x++)
{
sb.Append(":p" + x + ",");
OracleParameter p = new OracleParameter(":p" + x,OracleDbType.NVarchar2);
p.Value = inconditions[x];
prms.Add(p);
}
if(sb.Length > 0) sb.Length--;
strQuery = sb.ToString() + ")";
using (OracleCommand selectCommand = new OracleCommand(strQuery, dbconn))
{
selectCommand.Parameters.AddRange(prms.ToArray());
using (OracleDataAdapter adapter = new OracleDataAdapter(selectCommand))
{
DataTable selectResults = new DataTable();
adapter.Fill(selectResults);
var returnObject = new { data = selectResults };
var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
ContentDispositionHeaderValue contentDisposition = null;
if (ContentDispositionHeaderValue.TryParse("inline; filename=ProvantisStudyData.json", out contentDisposition))
{
response.Content.Headers.ContentDisposition = contentDisposition;
}
return response;
}}}}}}
所以API調用就像https://localhost:4320/api/TestQuery?id=xxx&id=yyy
,結果是{"data":[{"CATEGORY":"Internal Study","SESSION_NUMBER":7,"SESSION_START_DATE":"2015-02-13T00:00:00"}]}
我想補充一個輸入參數,現在到API,這將是列名這是在SELECT語句的陣列,所以API將只返回那些列。該API將爲https://localhost:4320/api/PData?id=xxx&id=yyy&col=CATEGORY&col=SESSION_NUMBER
,僅返回列名CATEGORY和SESSION_NUMBER {"data":[{"CATEGORY":"Internal Study","SESSION_NUMBER":7}]}
。這可以在這裏完成,我不知道我們將如何動態選擇列名稱,因爲我們只是在variable
中給出查詢。任何幫助是極大的讚賞。
你的問題到底是什麼?如何做控制器操作的參數?如何在SQL代碼中做到這一點?如果它能起作用? –
@FrancisLord如何選擇在Controller中傳遞的列名作爲輸入參數 – trx
在SQL代碼中? –