Лучший способ получить доступ к данным, хранящимся в реляционных файлах (не DB2) на AS400, используя .NET? - PullRequest
1 голос
/ 15 декабря 2009

Нам необходимо подключиться к AS / 400 из .NET (C #) и получить доступ к данным (чтение и запись).

Проблема в том, что данные хранятся в реляционных файлах на мэйнфрейме, а не в базе данных DB2.

Каков наилучший способ сделать это? Мне бы хотелось использовать решение типа ADO.NET Entity Framework, но я считаю, что совместимые поставщики данных работают только с DB2.

Ответы [ 5 ]

4 голосов
/ 25 декабря 2009

Существует предложение DB2 lite, и я считаю, что оно предлагается на платформах Windows и Linux. В iSeries (AS / 400) и z-Series (мэйнфрейме) используется «полная версия» DB2, поскольку она интегрирована в операционную систему. На вашем месте я бы спросил парней из мэйнфрейма, есть ли у них драйвер .NET ADO.NET от IBM и информация для вас.

IBM предоставила хороший справочник по теме о подключении к AS / 400 (i5). В основном вам нужно убедиться, что у вас есть лицензионный продукт iSeries Access For Windows (5722-XE1), и вам нужно настроить поставщика данных в Systemi. Красная книга обсуждает настройку провайдера. Ресурс для 5722-XE1 находится на веб-сайте IBM .

Если вам нужен более старый пример, на сайте четыреста гуру есть статья.

Надеюсь, это поможет - не стесняйтесь писать, если вам нужна дополнительная информация или если у ваших администраторов есть вопросы по поводу настройки. Если вам нужна дополнительная информация, обязательно опубликуйте версию ОС (например, V5R4 или что-то в этом роде)

4 голосов
/ 15 декабря 2009

Меня немного смущает ваша терминология, но я собираюсь сделать некоторые предположения и ответить.

Вы упомянули, что обращаетесь к «файлам» из AS / 400 (он же iSeries, он же IBM i). «Файл» - это таблица. Библиотека - это коллекция, запись - это строка, а поле - это столбец. Это одно и то же.

iSeries Access поставляется с драйвером .NET ADO.NET. Вы можете использовать это, а затем использовать SQL, как обычно, в базе данных MS SQL. Некоторые функции отличаются, но вы можете использовать руководство , чтобы выяснить эти причуды.

2 голосов
/ 30 декабря 2009

Важно понимать, что механизм DB2 встроен в операционную систему. Поэтому любая таблица в любом месте является частью базы данных DB2. АБСОЛЮТНО НЕ важно, как создается файл (например, SQL, RPG, CRTPF, JDBC, COBOL, C). Кроме того, АБСОЛЮТНО НЕ важно, если кто-то называет объект файлом. На самом деле все это таблица базы данных, которая входит в сферу применения DB2 Вы можете проверить это самостоятельно, используя системный каталог на iSeries (например, SYSTABLES). Обратите внимание, что вы можете найти свой стол в этом месте. Также обратите внимание, что вы можете использовать любое программное обеспечение JDBC или ODBC для доступа к данным на iSeries.

Сказав, есть некоторые тонкие различия. Прежде всего, DB2 for iSeries - это 100% реальное приложение DB2, но ему не хватает некоторых вещей. Например, MERGE доступен в Windows и Unix, но не в iSeries. Проверьте это в Информационном центре IBM.

В iSeries у вас есть другие объекты, которые могут хранить данные. Наиболее часто используются DATAAREA и DTAQ. Эти объекты НЕ являются частью базы данных DB2. Что-то вроде объекта FIFO в unix не является частью базы данных

Наконец, но не в последнюю очередь, вы можете работать с DB2 способом iSeries или DB2. Способ iSeries доступен для парней, которые выросли на AS400. Например, вы используете CATALOG / TABLE вместо CATALOG.TABLE. Обычно вы используете путь DB2. Каждый инструмент с поддержкой iSeries, который я знаю, также поддерживает способ DB2. Выберите этот вариант, и все работает как книги.

1 голос
/ 30 декабря 2009

Как мы это сделали на мэйнфрейме: используя веб-сервисы CICS , у нас есть некоторые транзакции, которые обслуживают данные с использованием SOAP. С точки зрения программиста, это по сути просто запись в очередь TS. Затем мы используем инструмент генерации WSDL, предоставленный IBM, для создания WSDL, который описывает сервис соответствующим образом (с методами, параметрами ввода / вывода и т. Д.). Затем, на стороне .NET, просто добавьте веб-ссылку на WSDL, и вы уже в пути. Одно предостережение: мы создали класс, который наследует веб-сервис и переопределяет GetWebRequest, чтобы установить для KeepAlive значение false. Возможно, вам придется это сделать.

С другой стороны (мэйнфрейм действует как клиент), это в основном то же самое (запись в временную TS-очередь), за исключением того, что требуется пара различных параметров (таких как URL-адрес вызываемого веб-сервера, имя метод и т. д.).

Возможно, есть лучший способ, но мы не могли найти другого пути. Я считаю, что нам пришлось пойти по более сложному пути, потому что наша ОС - это не MVS, а VSE, которая является более дешевой версией и не имеет очень много приятных функций, таких как MVS. Исходные примеры кода, на которые мы ссылались, были написаны Ричардом Смрчиной.

0 голосов
/ 28 декабря 2009
...