Хорошо, я полагаю, вы не знаете общий формат команд IBM i. Вот что:
COMMAND KEYWORD(VALUE) KEYWORD(VALUE) ...
Конструкция KEYWORD(VALUE)
подобна параметру, но я не хочу его так называть, потому что в команде вызова есть ключевое слово PARM
для параметров. Команда CALL
выглядит следующим образом:
CALL PGM(program name) PARM(parameter list)
Иногда вы можете опустить KEYWORD
и просто передать некоторые параметры позиционно. Некоторые из KEYWORD
должны быть набраны с использованием полного синтаксиса KEYWORD(VALUE)
. В случае команды CALL
KEYWORD
s можно опустить, но поскольку значение PARM
является списком, оно должно быть заключено в круглые скобки ()
, например:
CALL program (parameter list)
В вашем примере:
As400CMD = "CALL DEVLSLIB/EBANK_REVS";
sql = "CALL QSYS.QCMDEXC('" + As400CMD + "',00000000" +
As400CMD.Length.ToString() + ".00000)";
пытается вызвать программу EBANK_REVS в библиотеке DEVLSLIB без параметров. Кстати, "',00000000" + As400CMD.Length.ToString() + ".00000)"
можно заменить на "', " + As400CMD.Length.ToString())"
. Вам не нужны все эти нули.
Вы не сообщаете нам, какое имя CL вы указали, но если это действительно EBANK_REVS в библиотеке DEVLSLIB, то это все, что вам нужно сделать. Если только вы не сказали нам ничего.