Вызов хранимой процедуры Oracle.Получение исключения «Данные не найдены» - PullRequest
2 голосов
/ 14 февраля 2011

Я пытаюсь вызвать хранимую процедуру Oracle, которая возвращает данные XMLType, но все, что я получаю, это «Исключение не найдено».В таблице есть данные.Я проверил это, а затем дважды проверил.Что-то не так в моем коде, который вызывает хранимую процедуру.Может быть, что-то очевидное, я полностью отсутствует.

using (OracleConnection dbc = new OracleConnection("Data Source=test; User ID=user; Password=pwd"))
{
   dbc.Open();
   using (DbTransaction trans = dbc.BeginTransaction())
   {
      try
      {
         DbCommand comm = dbc.CreateCommand();
         comm.CommandType = CommandType.StoredProcedure;
         comm.CommandText = "TestStoredProcedure";
         comm.Transaction = trans;

         OracleParameter returnParam = new OracleParameter("result", OracleDbType.XmlType);
         returnParam.Direction = ParameterDirection.ReturnValue;
         comm.Parameters.Add(returnParam);

         OracleParameter param1 = new OracleParameter("param1", OracleDbType.Varchar2);
         param1.Direction = ParameterDirection.Input;
         param1.Size = 70;
         param1.Value = "testing";
         comm.Parameters.Add(param1);

         OracleParameter param2 = new OracleParameter("param2", OracleDbType.Varchar2);
         param1.Direction = ParameterDirection.Input;
         param1.Size = 70;
         param1.Value = "testing";
         comm.Parameters.Add(param2);

         OracleParameter param3 = new OracleParameter("param3", OracleDbType.Date);
         param1.Direction = ParameterDirection.Input;
         param1.Value = Convert.ToDateTime("1/18/2011 12:00:00 AM");
         comm.Parameters.Add(param3);

         comm.ExecuteNonQuery(); //exception at this line

         OracleXmlType oracleXml = (OracleXmlType)comm.Parameters["result"].Value;
         XmlDocument xmlDoc = oracleXml.GetXmlDocument();
      }
      catch (Exception ex)
      {
          Console.WriteLine(ex.ToString());
      }
   }
}

Хранимая процедура:

declare
  -- Non-scalar parameters require additional processing 
  result sys.xmltype;
begin
  -- Call the function
  result := mktadmin.test_package.test(param1 => :testval1,
                                       param2 => :testval2,
                                       param3 => :testval3);
end;

РЕДАКТИРОВАТЬ: игнорировать любые расхождения в именах.Я должен был отредактировать их, чтобы опубликовать здесь.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2011

Похоже, вы перезаписываете свойства param1 в назначениях разделов param2 и param3.

3 голосов
/ 14 февраля 2011

Было бы полезно посмотреть хранимую процедуру.Обычно вы получаете ошибку no data found при выполнении операции select into, которая не дает результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...