2010-11-14 31 views
5

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

  • 什么是最适合整合 技术(ODBC,OLE DB,ADO.NET) 和不依赖于我们所谈论的是什么版本 AS400的?是否 总是DB2数据库还是那个 变化?通常使用哪些其他持久性系统?
  • 是否有可能在大型机中调用 程序,这些程序中有 逻辑,或者最好是在.NET层 中复制该逻辑,然后直接调用大型机DB?
  • 我想报告系统应该在线并直接调用大型机数据库,或者有其他方式(例如文件导出等),这将是首选?
  • 在开始项目(AS400版本等)以消除问题之前,了解哪些技术细节非常重要。

基本上我对.NET/AS400项目的所有信息和经验感兴趣(并会投票)。我从来没有做过,需要知道项目开始前的陷阱。

回答

2

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

我个人一直使用随客户端访问提供的ODBC驱动程序,但仅用于读取-只要。我无法证明这一点,但十年的AS/400编程告诉我,试图从AS/400之外更新AS/400数据库是个不错的主意。

确实有可能从.NET应用程序调用AS/400 CL程序,并且如果业务逻辑已经在那里编程,那么使用它是有道理的;在.NET中重新创建它很昂贵,容易出错并且速度会更慢。

相同的报告信息:如果可能,请使用现有的信息。

事情看出来的(其中的一些可能已经过时):

DB2 SQL具有其他SQL方言很多细微的差别。许多数据库管理系统将接受

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设置,请注意可以透明地访问本地和远程表(使用直通)。

OS/400拥有悠久的广泛后向支持历史。只要所有与您通话的AS/400都在同一主要版本中,您通常不必担心版本。它也是一个非常稳定的平台;操作系统错误非常罕见并且很快得到修复。

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

HTH

3

好吧我几年前曾经和.NET一起工作和连接到AS/400和大型机系统。我可能无法直接回答你的问题,但我可以让你知道什么对我有用,以及我过去做过的一些事情。

这种类型的工作的一个通用术语是Enterprise Application Integration(EAI),所以你可以从头开始阅读。据我所知,在AS/400上可能不仅仅是DB2数据库。有2种方式,使我们与绿屏(或旧的)应用程序的工作:直接

    1. 访问数据源/存储创建一个会话,发送击键如F10,F4等的遗留应用程序用于浏览不同的屏幕,并从旧屏幕上的固定点抓取数据(有时称为屏幕抓取)。

    要部分地回答你的第一个问题,直接访问数据源,我们创建的DSN,使用ODBC驱动程序是能获得从2家公司在当时(数据源名称),伦巴(由墙数据制作),以及Attachmate公司(由IBM认为)。要创建ODBC DSN,通常要进入管理工具/数据源并添加一个系统DSN。您需要(旧系统)主机名,用户名和密码登录。然后,我们在.NET应用程序中使用这些DSN创建与旧应用程序的连接。如果你有一个DSN,那么你可以使用类似SQL Server DTS/SSIS的东西来从源代码获取数据并将其保存在某个位置,不管是数据库,CSV文件,Excel文件等等。报表工具(Crystal/SQL Server Reporting Services)使用DSN直接访问数据源,因此您可以直接从数据源报告。你也可以创建无DSN的连接,几年前我们需要DSN。

    要部分回答你的第二个问题,可以调用并使用绿屏应用程序的逻辑,如果你想。绿色屏幕通常被划分为一定数量的行和列,我们使用称为HLLAPI的标准将来自Windows系统的击键发送到传统屏幕上的位置。我们使用伦巴这个作为OCX控件可用,我敢肯定Attachmate也是。例如,您可以使用用户标识和密码文本框创建Winforms表单,然后为旧应用创建会话,并且通常第一个屏幕将是登录屏幕。然后使用绿色屏幕上用户名和密码字段的位置将用户ID和密码发送到这些位置,然后发送Enter键或任何需要登录的键。然后您可以导航到另一个屏幕,例如搜索屏幕,发送数据和击键以执行搜索,然后从绿色屏幕抓取结果数据。另一种方法是创建复制绿屏应用并直接从数据存储获取数据的Win/Web表单。这样做的好处是,您不必知道传统应用程序的按键/导航,这对于大型绿色屏幕系统可能会很麻烦。有没有对或错取决于具体情况。我们公司做了两者的混合。

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

    你的第四个问题的一个答案是,你肯定需要把你的手放在知道绿屏应用的人身上。您将花费数小时的时间浏览传统应用程序的屏幕,以便了解知道系统的用户是至关重要的。您还需要登录ID和密码等。

    最后,有一些第三方公司专门从源传输数据到目标,我的头顶上是Data Mirror。另一种方法是使用像BizTalk或Tibco这样的中间层集成产品,它们都从一个或多个来源获取数据,并将其粘贴到一个或多个目的地,但这可能会根据您的要求进行矫正。

    希望帮助和好运:)

  • 2

    我用的是客户端访问(无论它叫现在)驱动程序连接到我相信是基于ADO.NET的服务器。通过我有的驱动版本(我们在V5R4上),你不能也不得不创建存储过程来调用这些程序(这并不难)。我以为我听说你可以执行程序的最新版本,但我不确定。

    我只会看到另一件事是创建一个用户只有当你需要做的事情你需要做的事情以防万一有人拿到用户名和密码,他们不能做太多。我们设置了一个只读(*USE)用户和一个rwx(*CHANGE)用户。

    0

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

    我写了绿屏和.Net应用程序。根据我的经验..

    1. ODBC - 工作,但您需要在所有用户PC上设置ODBC设置。 .NET数据提供程序更好,因为更多.net特定的东西,并不需要在所有客户端设置ODBC设置。在.400提供的.net提供者之前,我主要使用OLEDB。详情请参考http://www-03.ibm.com/systems/i/software/access/windows/dotnet/

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

    3.对于报告,再次使用传回结果集的存储过程。它的速度更快,更干净,并且与Crystal Report配合良好。

    4.技术细节。如果您有许多客户端来安装程序 - 使用Web服务 - 您无需在所有PC上安装正确版本的客户端访问。

    请注意您的OS400版本。 如果使用OS400 V6R1及更高版本,请确保使用的客户端访问权限为V5R4或更高 - 存储过程在旧版客户端访问中可能无法正常工作。

    ODBC工作在较早的客户端访问,但我认为.NET数据提供程序只适用于V5R3。

    如果您使用.NET Data Provider V6R1编译.net程序,那么您的用户客户端访问也必须是V6R1。

    使用存储过程尽可能的安全(不需要暴露的表),并简化程序逻辑(可以重新使用RPG程序)

    在OS400的一面,请确保系统值QCCSID设置适当CCSID例如37英语。 ODBC,OLEDB,.net驱动程序会自动将适当的字符转换/转换为.Net程序。永远不要将该值留作65535.

    希望这有助于。

    +0

    如果没有进行重要的测试,请不要将系统值QCCSID从65535更改。尽管如果联网很重要,不要在65535下运行该系统是一个非常好的主意,但有些系统的应用程序却依赖于它。 – user2338816 2015-03-07 01:36:35