2016-11-16 27 views
0

現在、Webパラメータを入力パラメータとして受け入れ、where句の特定のフィールドで使用するための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); 

の代わりに、私は、コマンドパラメータのPRMSを作成したが、それを続行するかどうかはわからなかったOracleParameterのhere.Iを使用する方法クエリで直接それらを与えるためのコードです。

+0

[C#パラメータ化されたクエリの重複した可能性がありますOracleのための重大で危険なバグ!](http://stackoverflow.com/questions/3876856/c -sharp-parametersized-queries-oracle-serious-dangerous-bug) –

+0

これはあなたの答えです。 [パラメータの使用](0120-338-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を使用する必要があります。 ColumNameをテーブルのカラム名に置き換えてください。 引数に@を使用しないでください。その前に:を使用してください。 接続文字列が正しいかどうかを確認してください。 問合せが必要な結果を提供しているかどうかをテストするために、Oracle DBで個別に問合せを実行できます。 データタイプがjrsdateOfBirthであることを確認してください。私の例では文字列として扱っています。 最後にブロックReaderを閉じます。 私の個人的意見は、SELECT *を使用しないでください。常にカラム名を使用してください。それはあなたにすべての列を与えるので、あなたは2または3だけを必要とするかもしれないかもしれません。