2016-11-16 54 views
0

我正在創建Web API以接受一個輸入參數並在where子句中的特定字段中使用它們。下面是服務更改where子句以使用Oracle命令參數

 public HttpResponseMessage Getdetails(string JRS_NO,string DOB) 
    { 

     List<OracleParameter> prms = new List<OracleParameter>(); 
     List<string> selectionStrings = new List<string>(); 
     var jrs =""; 
     var dateofBirth=""; 
     string connStr = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString; 
     using (OracleConnection dbconn = new OracleConnection(connStr)) 
     { 
      DataSet userDataset = new DataSet(); 
      var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO =:jrs and DOB=:dateofBirth"; 
      jrs = JRS_NO; 
      dateofBirth = DOB; 
      prms.Add(jrs); 
      prms.Add(dateofBirth); 

,而不是直接在查詢我怎麼可以使用的OracleParameter這兒過得創造的PRM爲命令參數,但不知道如何與繼續給他們的代碼。

+0

可能重複的[C#參數化查詢爲Oracle - 嚴重和危險的bug!](http://stackoverflow.com/questions/3876856/c -sharp-parameterized-queries-for-oracle-serious-dangerous-bug) –

+0

這是你的答案。 [使用參數](http://stackoverflow.com/a/11048965/6527049) –

+0

@viveknuna我試着用代碼編輯我的問題。但是我在prms.Add()中出錯。我沒有使用過之前的命令參數 – trx

回答

2

你在代碼中犯了很多錯誤。我正在爲你寫代碼,但是你必須修復。

 string jrs = ""; 
     string dateofBirth = ""; 
     string connectionString = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString; 
     using (OracleConnection connection = new OracleConnection(connectionString)) 
     { 
      string query = "SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO =:jrs and DOB=:dateofBirth"; 
      OracleCommand command = new OracleCommand(query, connection); 
      command.Parameters.Add(new OracleParameter("jrs", jrs)); 
      command.Parameters.Add(new OracleParameter("dateofBirth", dateofBirth)); 
      command.CommandType = CommandType.Text; 
      connection.Open(); 
      OracleDataReader reader = command.ExecuteReader(); 
      try 
      { 
       while (reader.Read()) 
       { 
        string value = reader["ColumName"].ToString(); 
       } 
      } 
      finally 
      { 
       reader.Close(); 
      } 
     } 

不要在代碼中編寫查詢,編寫存儲過程,然後通過代碼調用它。 您必須使用ExecuteReader才能從SELECT查詢中獲得結果。 用表中的列名替換ColumName。 請勿使用帶參數的@,在它們之前使用:。 檢查連接字符串是否正確。 您可以在Oracle數據庫中單獨運行您的查詢,以測試您的查詢是否提供了所需的結果。 檢查jrsdateOfBirth的數據類型,在我的示例中,我已將字符串作爲字符串。 關閉Reader在finally塊中。我個人認爲,不要用SELECT *,總是用列名。因爲它會給你所有的列,可能你只需要2或3.