代码之家  ›  专栏  ›  技术社区  ›  Jörg W Mittag

从.NET与AS400(IBMI)通信时的最佳实践

  •  6
  • Jörg W Mittag  · 技术社区  · 15 年前

    在现有的基于AS400的系统之上构建基于.NET的报告解决方案时,我需要一些关于重要和最佳实践的帮助。

    • 最适合的集成是什么 技术(ODBC、OLE DB、ADO.NET) 这取决于什么版本 我们说的是AS400吗?它是 总是DB2数据库,还是这样 变化到?通常使用什么其他持久性系统?
    • 可以打电话吗 主机中的程序 它们中的逻辑,或者最好在.NET层中复制该逻辑 然后直接调用大型机数据库?
    • 我想一个报告系统应该是在线的,直接调用大型机数据库,或者有其他的方法(例如文件导出等)是首选的吗?
    • 在启动项目(AS400版本等)之前,需要了解哪些技术细节,以消除问题。

    基本上,我对来自.NET/AS400项目的所有信息和经验都感兴趣(并将投票决定)。我以前从来没有这样做过,在项目开始之前我需要知道这些陷阱。

    4 回复  |  直到 9 年前
        1
  •  2
  •   bluish dmajkic    14 年前

    如果您不熟悉OS/400,请准备好 陡峭的 学习曲线。通过征募本地的AS/400向导来尝试减少痛苦,这对于编写奇怪的CL程序、获得授权等是必不可少的。

    就我个人而言,我总是使用提供客户端访问的ODBC驱动程序,但仅限于只读。我不能证明这一点,但是十年的AS/400编程告诉我,试图从AS/400外部更新一个AS/400数据库是一个坏主意。

    确实可以从.NET应用程序调用as/400 cl程序,如果业务逻辑已经在那里编程,那么使用它是有意义的;在.NET中重新发明它是昂贵的,容易出错,而且速度会慢得多。

    相同的报告信息:尽可能使用现有的。

    需要注意的事项(其中一些很可能过时):

    DB2SQL与其他SQL方言有许多细微的区别。许多DBMS将接受

    SELECT X, Y FROM A, B WHERE A.T=B.T
    

    相当于

    SELECT X,Y FROM A INNER JOIN B ON A.T=B.T
    

    DB2可能会看到,也可能不会看到,这取决于表。否则,前者可能会非常缓慢。也就是说,如果您有性能问题,那么有一些非常灵活的工具来分析DB/2查询计划;您需要您的AS/400向导来使用它们,尽管它们有点模糊。

    如果您处于国际环境中,处理代码页需要注意。制作 当然可以 您的AS/400具有相同的系统代码页。

    如果您处于多AS/400设置中,请注意可以透明地访问本地和远程表(通过passthrough)。

    OS/400具有广泛的向后支持历史。一般来说,只要您所说的所有AS/400都在同一个主要版本上,就不必担心版本问题。它也是一个非常稳定的平台;操作系统错误非常罕见,而且很快就被修复。

    如果您可以管理它,可以使用 *ALLOBJ 特权。这将使您能够专注于手头的问题,并在以后处理安全问题。

    高温高压

        2
  •  4
  •   bluish dmajkic    14 年前

    好吧,几年前我曾在.NET上使用和连接AS/400和大型机系统。我可能无法直接回答你的问题,但我可以告诉你什么对我有用,以及我过去做的一些事情。

    这类工作的常用术语是 Enterprise Application Integration (eai)所以你可以从阅读开始。据我所知,在AS/400S上可能不止有DB2数据库。我们有两种方法可以处理绿屏(或传统)应用程序:

    1. 直接访问数据源/存储
    2. 创建一个会话,发送按键,如F10、F4等,传统应用程序使用这些按键在不同的屏幕上导航,并从传统屏幕上的固定点抓取数据(有时称为屏幕抓取)。

    为了部分回答您的第一个问题,为了直接访问数据源,我们使用当时2家公司提供的ODBC驱动程序创建了DSN(数据源名称),即Rumba(由Wall Data制造)和Attachmate(由我认为IBM制造)。要创建一个ODBCDSN,通常需要进入管理工具/数据源并添加一个系统DSN。您需要(旧系统)主机名、用户名和密码来登录。然后,我们在.NET应用程序中使用这些DSN创建到旧应用程序的连接。如果您有一个DSN,那么您可以使用类似于SQL Server DTS/SSIS的东西从源中获取数据并将其保存到某个位置,无论是数据库、csv文件、excel文件等。还很可能有一个报告工具(Crystal/SQL Server Reporting Services)访问直接使用DSN的数据源,以便您可以直接从数据源报告。同样,您也可以在几年前创建不含DSN的连接,我们需要DSN。

    要部分回答您的第二个问题,如果您愿意,可以调用并使用绿色屏幕应用程序上的逻辑。绿色屏幕通常分为若干行和列,我们使用一个称为hllapi的标准,它将按键从Windows系统发送到旧屏幕上的位置。我们使用了伦巴作为OCX控制,我相信Attachmate也是。例如,您可以创建一个带有用户ID和密码文本框的WinForms窗体,然后创建一个到旧应用程序的会话,通常第一个屏幕是登录屏幕。然后使用绿色屏幕上用户名和密码字段的位置,将用户ID和密码发送到这些位置,然后发送一个输入键或登录所需的任何内容。然后,您可以导航到另一个屏幕,例如搜索屏幕,发送数据和按键以执行搜索,然后从绿色屏幕中获取结果数据。另一种方法是创建Win/Web表单,复制绿屏应用程序并直接从数据存储中获取数据。这样做的好处是,您不必知道传统应用程序的按键/导航,对于一个大的绿色屏幕系统来说,这可能会很麻烦。没有对错,这取决于具体情况。我们公司两者兼而有之。

    对于第三个问题,这取决于您想要的报告类型。如果它们需要实时,那么您可以直接连接到数据存储。如果它们不需要实时性,那么您可以每晚从旧系统传输数据,并将数据存储在SQL Server中,然后针对SQL Server数据运行报表。

    第四个问题的一个答案是,你肯定需要找到一个熟悉绿屏应用程序的人。你将花费数小时浏览传统应用程序的屏幕,因此访问了解系统的用户至关重要。此外,您还需要登录ID和密码等。

    最后还有一些第三方公司专门负责将数据从源传输到目的地,其中一个是数据镜像。另一种方法是使用中间层集成产品(如Biztalk或Tibco),这两种产品都从一个或多个源获取数据,并将它们粘贴到一个或多个目标,但这可能会造成过度破坏,具体取决于您的要求。

    希望有帮助,祝你好运:)

        3
  •  2
  •   bluish dmajkic    14 年前

    我使用客户端访问(现在称之为什么)驱动程序连接到我认为基于ADO.NET的服务器。通过我拥有的驱动程序版本(我们在v5r4上),您不能也必须创建存储过程来调用程序(这并不难)。我想我听说了最新版本的你可以执行程序,但我不确定。

    我要看的另一件事是创建一个只有权限的用户,你需要做的就是做你需要做的事情,以防有人持有这个用户名和密码,他们不能做太多。我们设置了只读( *USE )用户和RWX( *CHANGE )用户。

        4
  •  0
  •   lamLam    14 年前

    [抱歉,没有看到这是一个旧的帖子。希望它仍然有用]

    我已经编写了绿屏和.NET应用程序。根据我的经验……

    1。 odbc-有效,但您需要在所有用户PC上设置odbc设置。.NET数据提供程序更好,因为里面有更多的.NET特定的内容,并且不需要在所有客户端上设置odbc设置。在AS400中提供.NET提供程序之前,我主要使用OLEDB。请参阅 http://www-03.ibm.com/systems/i/software/access/windows/dotnet/ 有关详细信息

    2.使用存储过程。存储过程通常比将所有逻辑放入.NET更快。创建SQL或外部存储过程中编写的RPG,CL,COBOL,C++等。我不是在.NET中重新编写所有的RPG旧逻辑,我只是稍微改变一下旧的RPG程序,并将其转换为外部存储过程。

    3.对于报表,再次使用返回结果集的存储过程。它的速度快,清洁,与Crystal Report配合良好。

    4.技术细节。如果您有许多客户机要安装该程序-使用Web服务-您不必在所有PC上安装具有正确版本的客户机访问。

    观看你的OS400版本。 如果使用OS400 v6r1及更高版本,请确保使用的客户端访问是v5r4或更高版本-存储过程在较旧的客户端访问中可能无法正常工作。

    ODBC在旧的客户端访问中工作,但我认为.NET数据提供程序只在v5r3中工作。

    如果使用.NET数据提供程序v6r1编译.NET程序,那么用户客户端访问权限也必须是v6r1。

    尽可能使用存储过程以实现安全性(不需要公开表),并简化程序逻辑(可以重用RPG程序)

    在OS400侧,确保系统值qccsid设置为正确的ccsid,例如37表示英语。ODBC,OLEDB,.NET驱动程序将自动将正确的字符转换/转换为.NET程序。不要将值保留为65535。

    希望这有帮助。

    推荐文章