Синтаксис вызова ODBC для нескольких возвращаемых значений - PullRequest
1 голос
/ 29 сентября 2011

Итак, во-первых, извините за длину вопроса ...

Так что в основном у меня возникают проблемы с вызовом хранимого процесса из базы данных Informix, где хранимый процесс имеет несколько возвращаемых значений при использовании ODBCв .NET (он же ODBCCommand), и я не видел в интернете ничего такого, где кто-то делал бы это раньше ... так возможно ли это?

Итак, начнем с использования ODBCCommand (или ODBCв общем) для вызова SP, который должен использовать ODBC Call Syntax .

Грубая хранимая процедура:

create procedure informix.proc_ins (
  n_company char(10),
  n_message_body lvarchar(4096),
  n_time int,
  n_time_dt datetime year to second,
  n_processed smallint)

returning
  int,
  int;

begin
  define row_count int;
  define new_serial int;

INSERT into my_table ( company, message_body, time, time_dt, processed, create_user, create_dt, recmod_user, recmod_dt) 
VALUES ( n_company, n_message_body, n_time, n_time_dt, n_processed, USER, CURRENT YEAR TO SECOND, USER, CURRENT YEAR TO SECOND);

let new_serial = DBINFO('sqlca.sqlerrd1');
let row_count = DBINFO('sqlca.sqlerrd2');

return
  new_serial,
  row_count;     

end
end procedure;

Итак, с учетом этого SP синтаксис вызова ODBC будет выглядеть примерно так:

{XXXX = call informix.proc_ins(?,?,?,?,?)}

, где у 'XXXX' почему-то есть 2 '?s ...?

Любая помощь в этом была бы очень признательна.

Также, прежде чем кто-то скажет "использовать драйверы IBM.Data.Informix" (любой из них), это невозможнов этом случае, потому что «старый» не работает с VS2010, а новый нельзя установить на тот же ПК, что и старый, в одно и то же время, но это совершенно другой трюк для другого дня.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2011

Я не верю, что есть «официальный» ответ ODBC. Это до водителя. Ничто не мешает вам использовать SQL_PARAM_RETURN в качестве типа для более чем одного параметра, но относительно того, как вы это называете, ODBC не говорит.

0 голосов
/ 29 сентября 2011

Я бы сделал это в ESQL / C так, чтобы оператор EXECUTE PROCEDURE informix.proc_ins(...) рассматривал его как оператор SELECT, то есть объявлял курсор (возможно, после подготовки оператора), а затем использовал OPEN (шансдля передачи параметров) и FETCH и CLOSE для получения данных.

Я ожидаю использовать ту же технику в ODBC - возможно, в обход общего синтаксиса вызовов ODBC.

Если вам нужнаОфициальный ответ с использованием официальной нотации / метода ODBC, вам придется попросить кого-то еще предоставить ответ.

...