2016-11-16 26 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.