Неверный тип параметра между C # и Oracle - PullRequest
1 голос
/ 25 мая 2011

У меня есть функция в Oracle, которая возвращает порядковый номер. Когда я пытаюсь получить это значение в C # по параметру, он всегда говорит мне, что тип параметра недопустим. Примерным значением этого возвращаемого значения является 115545. Если действительно эта ошибка верна, то каков корреспондент в ODBCType для этого значения? Если это не правильно, то в чем проблема?

Функция Oracle:

FUNCTION Get_Next_Message_Id__ 
RETURN NUMBER IS

  temp_ NUMBER;
  CURSOR get_in_message_id_seq IS
    SELECT in_message_id_seq.NEXTVAL
      FROM dual;

BEGIN

   General_SYS.Init_Method(lu_name_, 'IN_MESSAGE_API', 'Get_Next_Message_Id__', TRUE);

   OPEN get_in_message_id_seq;
   FETCH get_in_message_id_seq INTO temp_;
   CLOSE  get_in_message_id_seq;

   RETURN(temp_);

END Get_Next_Message_Id__;

C # код:

OdbcConnection myConnection = new OdbcConnection(ODBC_CLass.ifsconnectionstring);
OdbcParameter next_id = new OdbcParameter();
next_id.Direction = ParameterDirection.Output;

myConnection.Open();
OdbcCommand command = new OdbcCommand("{? = call ifsapp.in_message_api.Get_Next_Message_Id__}", myConnection);
command.CommandType = CommandType.StoredProcedure;
next_id = command.Parameters.Add("temp_", OdbcType.Int);
int k = command.ExecuteNonQuery();
MessageBox.Show("next_id: " + next_id.Value);

1 Ответ

1 голос
/ 25 мая 2011

Мне кажется, проблема в том, как вы устанавливаете next_id.Сначала вы создаете OdbcParameter и устанавливаете его направление, но затем полностью игнорируете его и переназначаете переменную с помощью метода Add, который по умолчанию создает параметр «in».Попробуйте вместо этого:

OdbcParameter nextId = command.Parameters.Add("temp_", OdbcType.Int);
nextId.Direction = ParameterDirection.Output;

Обратите внимание, что вы также должны использовать операторы using для соединения и команды, чтобы гарантировать, что они очищены в конце кода, что бы ни случилось.

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