Изменение предложения where для использования параметра команды Oracle

В настоящее время я создаю веб-API для приема одного входного параметра и использую их в определенном поле в предложении where. Ниже приведен код сервиса

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

Вместо того, чтобы давать их непосредственно в Query, как я могу использовать OracleParameter здесь. Я создал prms для параметра команды, но не уверен, как поступить с этим.

1 ответ

Решение

Вы делаете несколько ошибок в своем коде. Я пишу код для вас, но остальное вы должны исправить.

        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 DB, просто чтобы проверить, дает ли ваш запрос требуемые результаты или нет. Проверьте тип данных jrs а также dateOfBirthВ моем примере я взял в качестве строки. близко Reader в конце концов блок. Мое личное мнение, не использовать SELECT *всегда используйте имена столбцов. потому что это даст вам все столбцы, может быть, вам нужно только 2 или 3.

Другие вопросы по тегам