2009-12-15 2 views
1

Nous avons besoin de se connecter à un AS/400 à partir de données .NET (C#) et d'accès (lecture et écriture).La meilleure façon d'accéder aux données stockées dans des fichiers relationnels (pas DB2) sur un AS400, en utilisant .NET?

Le problème est que les données sont stockées dans des fichiers relationnels sur l'ordinateur central, et non dans une base de données DB2.

Quelle est la meilleure façon d'y parvenir? J'aimerais utiliser une solution de type Entity Framework ADO.NET, mais je crois que les fournisseurs de données compatibles ne fonctionnent qu'avec DB2.

+0

des fichiers plats destinés à ressembler à des fichiers texte, c'est-à-dire des fichiers non relationnels? –

+0

Fichiers relationnels. Edité pour clarifier. Merci – Josh

+3

L'AS/400 IS est une base de données DB2. Vous ne pouvez pas l'éviter dans le système de fichiers "natif". –

Répondre

4

Il existe une offre DB2 Lite et je crois qu'elle est offerte sur les plateformes Windows et Linux. L'iSeries (AS/400) ainsi que la série z (mainframe) utilisent la version complète de DB2 car elle est intégrée dans le système d'exploitation. Si j'étais vous, je demanderais aux gars du mainframe s'ils ont le pilote .NET ADO.NET d'IBM et les informations de connexion pour vous.

IBM a fourni un bon redbook on the subject de se connecter à l'AS/400 (i5). Fondamentalement, vous devez vous assurer que vous avez le produit sous licence iSeries Access For Windows (5722-XE1) et vous devez configurer un fournisseur de données sur le Systemi. Le livre rouge traite de la configuration du fournisseur. La ressource pour 5722-XE1 est found on the IBM website.

Si vous souhaitez un exemple plus ancien, il y a un article sur le site four hundred guru.

Espérons que cela aide - n'hésitez pas à publier si vous avez besoin d'informations supplémentaires ou si vos administrateurs ont des questions sur la configuration. Si vous avez besoin d'informations supplémentaires, assurez-vous que vous affichez la version du système d'exploitation (comme V5R4 ou quelque chose comme ça)

+0

J'ai le pilote ADO.NET et les informations de connexion, mais n'a pas pu me connecter en raison d'un produit DB2 Connect manquant. J'essaie toujours de savoir exactement ce qu'il faut faire pour que tout fonctionne. – Josh

+0

Cela semble être la meilleure façon d'y parvenir, nous essayons simplement d'aplanir les rides dans notre implémentation spécifique. – Josh

4

Je suis légèrement dérouté par votre terminologie, mais je vais faire quelques hypothèses et y répondre.

Vous avez mentionné que vous accédez à des "fichiers" à partir de l'AS/400 (alias iSeries, alias IBM i). Un "fichier" est une table. Une bibliothèque est une collection, un enregistrement est une ligne et un champ est une colonne. Ce sont les mêmes choses. ISeries Access est fourni avec un pilote .NET ADO.NET. Vous pouvez l'utiliser et utiliser SQL comme normalement dans une base de données MS SQL. Certaines des fonctions sont différentes, mais vous pouvez utiliser the manual pour comprendre ces bizarreries.

+0

Armé de cette entrée, j'ai pu poser de meilleures questions aux gars du mainframe. Ils me disent qu'il fonctionne sur DB/400, qu'ils ont décrit comme une "saveur allégée" de DB2, similaire à SQL CE vs SQL Server. DB/400 est-il différent de DB2/400, également appelé DB2 pour AS/400? – Josh

+1

Il y a des changements, mais d'après ce que j'ai vu, c'est surtout du côté administrateur (ou côté DBA) et non côté programmeur. Vous devriez être capable d'utiliser SQL pour faire ce que vous devez faire. En tant que programmeur, si vous utilisez un manuel de référence DB2, vous ne devriez pas connaître la différence si vous utilisez DB2 ou iSeries. J'ai lié au manuel d'iSeries dans ma réponse. De là, c'est juste SQL. –

2

Il est important de comprendre que le moteur DB2 est intégré dans le système d'exploitation. Par conséquent, n'importe quelle table de n'importe quel endroit fait partie de la base de données DB2. Il est ABSOLUMENT PAS important comment le fichier est créé (par exemple SQL, RPG, CRTPF, JDBC, COBOL, C). En outre, il est ABSOLUMENT pas important si quelqu'un appelle l'objet un fichier. Tout est vraiment une table de base de données dans le cadre de DB2. Vous pouvez le tester vous-même en utilisant le catalogue système sur l'iSeries (par exemple, SYSTABLES). Notez que vous pouvez trouver votre table à cet endroit. Notez également que vous pouvez utiliser n'importe quel logiciel JDBC ou ODBC pour accéder aux données sur l'iSeries.

Cela étant dit, il existe quelques différences subtiles. Tout d'abord, DB2 for iSeries est une application DB2 100% réelle, mais il manque certaines choses de ses compagnons. Par exemple, MERGE est disponible sur Windows et Unix, mais pas sur l'iSeries. Consultez le centre de documentation IBM pour cela.

Sur l'iSeries, vous disposez d'autres objets pouvant stocker des données. Les plus utilisés sont le DATAAREA et le DTAQ. Ces objets ne font PAS partie de la base de données DB2.Quelque chose comme l'objet FIFO sur unix ne fait pas partie de la base de données

Enfin, vous pouvez utiliser DB2 comme iSeries ou comme DB2. La méthode iSeries est disponible pour les gars qui ont grandi avec l'AS400. Par exemple, vous utilisez CATALOG/TABLE au lieu de CATALOG.TABLE. Normalement, vous utiliseriez la méthode DB2. Chaque outil avec le support iSeries que je connais est également compatible avec DB2. Choisissez cette option et tout fonctionne comme les livres.

+0

Notez qu'une table créée avec une instruction SQL CREATE TABLE n'est pas ** tout à fait la même chose qu'un fichier physique natif créé avec DDS. Par exemple, vous ne pouvez pas exécuter CHGPF MAXMBRS (* NOMAX) avec succès sur une table SQL. D'autres différences existent, bien que pour les activités de base de données communes, les PF DDS et les tables SQL peuvent généralement être traités de la même manière. (Et pour mettre à jour la mention, MERGE est disponible depuis quelques années dans i 7.1.) – user2338816

1

Comment nous l'avons fait sur le mainframe: en utilisant CICS web services, nous avons quelques transactions qui servent des données en utilisant SOAP. Du point de vue du programmeur, il s'agit essentiellement d'écrire dans une file d'attente TS. Ensuite, nous utilisons un outil de génération WSDL fourni par IBM pour construire le WSDL qui décrit le service en conséquence (avec des méthodes, des paramètres d'entrée/sortie, etc.). Ensuite, côté .NET, ajoutez simplement une référence Web au fichier WSDL et vous êtes sur votre chemin. Une mise en garde: nous avons créé une classe qui hérite du service Web et remplace GetWebRequest pour définir KeepAlive sur false. Vous devrez peut-être faire cela aussi. Dans l'autre sens (mainframe agissant en tant que client), c'est fondamentalement la même chose (un TS que écrit), sauf qu'il y a quelques paramètres différents requis (comme l'URL du serveur web à appeler, le nom de la méthode, etc.).

Il y a probablement un meilleur moyen, mais nous n'avons pas pu trouver d'autre moyen. Je crois que nous avons dû prendre la route la plus difficile parce que notre OS n'est pas MVS, mais plutôt VSE, qui est une version moins chère et qui n'a pas beaucoup de fonctionnalités sympas comme MVS. Les échantillons de code initiaux auxquels nous avons fait référence ont été écrits par Richard Smrcina.

+0

Je ne sais pas si cela va aider avec le 400, mais je l'ai posté de toute façon –

Questions connexes