Interoperabilidad con la plataforma IBM desde .NET

Aqui os pongo mi primer articulo con contenido tecnico.

Este problema se me presento cuando hace aproximadamente 4 meses una empresa me contrato como consultor .NET para hacer un sistema web de explotación de tiendas, centralizandolo todo en su empresa. La aplicación previa a esto, funcionaba localmente en cada tienda, con una base de datos local.

El problema sin meterme en profundidad era resolver conectividad entre .NET y una base de datos DB2 sobre un AS/400.

Para comenzar la primera solución que se me ocurrio fue utilizar Host Integration Server 2006 la solucion de Microsoft para integrar la plataforma .NET con la plataforma IBM.

Este paquete fue desechado, por multiples razones, entre las que estaba el precio (dicha empresa acaba de comprarse varias licencias de Visual Studio 2005 y SQL Server 2005), y otra era mi perspectiva, que se me apetecia una solución mas cercana a mi que me permitiera programar desde .NET a pelo con dicha base de datos (DB2).

La solución cuando menos me la esperaba, llegó desde la propia IBM, una empresa que aboga al menos en este país por buscar soluciones sobre JAVA para su hardware y sus bases de datos. Fue cuando la propia IBM me presentó el Client Access, un provider desarrollado por ellos para poder realizar aplicaciones con .NET y que puedan conectarse con su base de datos.

Por desgracia esta solución, al menos en Asturias, no es conocida y nadie se queria hacer cargo de este proyecto.

La solución era tan simple como instalar en la maquina del desarrollador (y evidentemente luego en el servidor que alojara la aplicación) este programa, permitiendonos usar el provider de acceso a la maquina IBM.

Para una muestra de los objetos ADO.NET que tendremos que usar:

  • iDB2Connection
  • iDB2Command
  • iDB2DataReader
  • iDB2DataAdapter

Previamente hay que agregar la referencia al componente IBM que hemos instalado previamente, dicha referencia .NET es:

  • IBM DB2 UDB for iSeries .NET Provider

Un ejemplo de borrado de datos de tabla CLIPRO de la base de datos es:

   string dataSource = “DataSource=(aqui la ip, o nombre del equipo en el dominio);” + “userid=(nombre del usuario);password=(evidentemente la contraseña del usuario)”;

   iDB2Connection conn = new iDB2Connection(dataSource);

   string query = “DELETE FROM TPVDATOS.CLIPRO”; //donde TPVDATOS.CLIPRO es la instancia y la tabla a la que accedemos separados por “.”

   iDB2Command cmd = new iDB2Command(query, conn);

   conn.Open( );

        cmd.ExecuteNonQuery( );

   conn.Close( );
 

Buenos pos comprendiendo este simple ejemplo, implementar el resto de funcionalidades que queramos realizar serán un calco de esto.

Espero que os resulte interesante todo esto, y si teneis alguna duda o sugerencia no dudeis en contactar conmigo.

Un saludo. Carlos.

 

 

 

11 comentarios en “Interoperabilidad con la plataforma IBM desde .NET”

  1. Hola yo he trabajado durante bastante tiempo contra un AS400, nosoros tuvimos problemas con los consumos de CPU (el de sistemas era un poco pijotero) cuando hay muchos usuarios concurrentes y tuvimos que cambiar el sistema de acceso olvidandonos de ClientAccess.
    Tambien ten cuidado a la hora de armar las Selects ya que es bastante mas delicado que una base de datos normal.

  2. Hola Oskar, la verdad es que escogi este sistema por que el numero de usuarios concurrentes a la base de datos va a ser bastante minimo, como mucho 12 clientes, por eso me decidi a usarlo.

    Y cierto, las Selects dieron problemas inicialmente, pero bueno, tras una lucha mortal contra ellas…ganamos

    Gracias por da tu opinión.

    Un saludo. Carlos.

  3. Hola Carlos,

    te comentare que si, definitivamente este proveedor que felizmente nos lo da el mismo IBM funciona muy bien, actualmente tengo un par de proyectos web usando esta tecnologia Microsoft VB 2005 + DB2 Iseries (AS400), Db2 Store Procedures,y RPGLE ,… luego de varias lunas, pues tengo muchos ejemplos y funciones que tal vez te puedan servir en tu proyecto,

    Asi que si podemos compartir informacion por mi genial, ya que no hay mucha informacion al respecto como quisieramos,

    Saludos

    Ivan

  4. Si llegara a conocer tu blog antes,… no habría tenido que patearme tantas webs… da el caso que nada más empezar el año me he encontrado con este problema 🙂

    En fin, seguiré leyendo regularmente, para que no me pasen estas cosas.

  5. HOLA AMIGO TENGO UN SERVIDOR AS400 Y LO QUE YO REQUIERO HACER ES TENER UNA PC CON WINDOWS Y SQL SERVER, ENTONCES LA INFORMACION ME LLEGARIA A LA PC Y POSTERIORMENTE QUIERO HACER DIGAMOS UN BAKUP EN EL SERVIDOR, DE QUE MANERA SACO LOS DATOS DE SQL SERVER, Y LOS MANDO MEDIANTE DTS PARA EL DB2?, COMO LE HAGO PARA CONECTAR AS400 CON WINDOWS? MAS QUE TODO CON SQL SERVER, MUCHAS GRACIAS POR SU AYUDA.

  6. Bueno yo soy nuevo en la programacion, hace mas o menos unos tres meses empese a trabajar para un banco, el caso es que ellos requieren dos funciones que permite el Client Access las cuales son load y unload de archivos a librerias de un servidor as400, ya he bsucado informacion y les dire no hay mucha que se diga por es necesito su ayuda

    ahias2006@hotmail.com

  7. Hola, en mi caso tenemos una aplicación que se comunica al AS400 mediante WebServices desarrollados en Java… el problema? el tiempo de respuesta me encantaría saber si tienen algunos ejemplos que me permitan sencillamente saltarme los WS y mejorar esos tiempos. Gracias

  8. Saludos en la empresa en la que trabajo se utiliza esta interoperabilidad en este momento estoy depurando una aplicacion en .net 2005 el problema que tengo es al momento de mandar ha llenar un dataset con un fill me devuelve la siguiente excepcion:”El valor iDB2Decimal es demasiado grande para entrar en Decimal. En su lugar, utilice ToString() para recuperar el valor. ” espero que puedas ayudarme

    Muchas gracias

    ajadan@etapa.net.ec

  9. Mi problema es conectandome desde un dispositivo motorola (mc 3100) al la base db2, he tratado de hacerlo con idb2 sin un resultado positivo, cualquier ayude estaria muy agradecido.

  10. hola he creado un servicio web para que consuma data usando el DB2 y me genera el siguiente error a que puede ser.

    agradecere su respuesta inmediata.

    {System.InvalidCastException: The data type returned is currently not supported by the provider.
    at IBM.Data.DB2.iSeries.iDB2DbTypeUtility.MapSQLTypeToDCPCType(DcSqlTypes sqlType, Int32 colccsid, UInt32 length)
    at IBM.Data.DB2.iSeries.iDB2Command.setRowOfParameterData(MpDcData[]& dcDataRow)
    at IBM.Data.DB2.iSeries.iDB2Command.execute()
    at IBM.Data.DB2.iSeries.iDB2Command.ExecuteNonQuery()
    at G1DAL.CambiarValor(String pMoneda, Single pValor, Single& pTipoCambio, Single& pValorCambiado) in d:Adan- NotocarProyectoApp_CodeG1DAL.cs:line 80
    at G1.CambiarValor(String pMoneda, Single pValor) in d:Adan- NotocarProyectoApp_CodeG1.cs:line 57}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *