получение скалярного значения из процесса Oracle Stored в .net - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть сохраненный процесс, который возвращает 1 или 0. Мне нужно это значение обратно в функцию .net, которая его вызывает.Я знаю, как получить набор данных обратно из Oracle (используйте refCursor), я знаю, как вводить данные в Oracle, вызывать cmd.ExecuteNonQuery () (при условии, что вы используете хранимый процесс для ввода данных).Но как вы получите хранимую процедуру одного возвращаемого значения?Я не возвращаю набор данных, но 1 или 0. Так что это немного отличается.

Спасибо.

ОБНОВЛЕНИЕ: КОД, чтобы более конкретно показать, где я иду не так?

try
{
      using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ACODBConnectionString3"].ConnectionString))
      {
                using (OracleCommand cmd = new OracleCommand(sProc,conn))
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    OracleParameter inputParm = new OracleParameter("HospitalFinIn", OracleDbType.Varchar2);
                    inputParm.Value = HosFin;
                    //inputParm3.Value = Double.Parse(isActive);
                    OracleParameter outRefParam = new OracleParameter("cur_out", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);
                    //outRefParam.
                    cmd.Parameters.Add(inputParm);
                    cmd.Parameters.Add(outRefParam);
                    outcome = (int)cmd.ExecuteScalar();
                    if (outcome == 1) 
                        FinUniq = false;
                    else if (outcome == 0) 
                        FinUniq = true;
                    else 
                        FinUniq = true;
                    //outcome = cmd.ExecuteNonQuery();
                    //adapter = new OracleDataAdapter(cmd);
                    //adapter.Fill(ds);
                }
            }
        }

Это исключение, которое я получаю при запуске этого

Specified cast is not valid.

Не уверен, что я делаю неправильно.Сохраненный процесс определенно возвращает 0 или 1.

1 Ответ

2 голосов
/ 15 февраля 2012

Возвращаете ли вы скалярное значение через OUT REFCURSOR, используя что-то похожее на OPEN curInt FOR select 42 from dual?

Вы можете получить скалярное значение, просто выполнив хранимую процедуру с помощью OracleCommand.ExecuteScalar ().Не забудьте создать OracleParameter для рефрактора OUT и задать для направления значение «ParameterDirection.Output», а для свойства «OracleDbType» - «OracleDbType.RefCursor»

...