ОБНОВЛЕНИЕ: приведенный ниже пример кода работает. Я изменил строку подключения. В этом была проблема. Альтернативное (не ADO) решение см. по ссылке Майка Уиллса в комментариях.
У меня есть класс С#, который (если я когда-нибудь заработаю) запускает программу, написанную в коде RPG на AS/400 — JD Edwards. Я почти ничего не знаю об AS/400 и/или JD Edwards.
У меня есть другие классы в моем (внутрисетевом) веб-приложении, которые подключаются к JD Edwards, выполняют SQL-запросы и устанавливают/получают данные. Все они используют dll IBM.Data.DB2.iSeries и прекрасно работают.
Для этого я написал аналогичный класс, используя вышеупомянутую dll, но он не работал. Я даже читал где-то в Интернете, что вы не можете запустить программу, используя эту dll. Я нашел это немного подозрительным, но по предложению моего коллеги JD Edwards я выбросил класс и переписал его, используя adodb dll. Нет необходимости возвращать данные из этого запуска программы. Я просто хочу, чтобы программа работала.
Вот фиктивная версия класса:
private void runJDEProgram() {
ADODB.Connection cn = new ADODB.Connection();
cn.ConnectionString = "Provider=ABABAB;Data Source=111.111.111";
ADODB.Command cmdDetail = new ADODB.Command();
cn.Open(); //has to be open before setting an active connection.
cmdDetail.ActiveConnection=cn;
cmdDetail.CommandType = ADODB.CommandTypeEnum.adCmdText;
cmdDetail.CommandText = "{{CALL BLAH.BLAH(?,?)}}";
cmdDetail.Prepared = true;
cmdDetail.Parameters.Append(cmdDetail.CreateParameter("P1", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 10, "BLAH123"));
cmdDetail.Parameters.Append(cmdDetail.CreateParameter("P2", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 10, "BLAH456"));
object dummy = Type.Missing; //otherwise, we couldn't get past this.
cmdDetail.Execute(out dummy, ref dummy, 0);
cn.Close();
}
Вот ошибка, которую я получаю при запуске:
{"[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"}
Где я лажаю? Спасибо!
РЕДАКТИРОВАТЬ: Строка подключения работает при запросе AS/400 для получения/установки данных. Нужно ли его модифицировать для такой операции или для использования с ADO?