有没有办法从 z/OS 大型机访问 Sql 服务器并在 IBM 3270 终端仿真中得到结果?

StackOverflow https://stackoverflow.com/questions/2220191

有没有什么方法(可能很便宜)从 z/OS 大型机(COBOL 程序)访问 Microsoft Sql Server 并在 3270 终端仿真中获得结果?
我知道 3270 是一个相当古老的系统,但在银行 CED 中仍然很受欢迎。

有帮助吗?

解决方案

这取决于你实际上是试图做。我的你的问题的解读是,你想有一个基于主机进程访问的SQL Server数据库,然后做一些事情的结果,可能涉及3270终端。

如果您可以使用UNIX系统服务,您可以编辑TDS库如 freetds的然后用C程序做你想要的结果是什么。如果你想获得更多的复杂的,你可以通过编译代码与IBM C,SAS C或的 Dignus C / C ++ 。我可以推荐Dignus,我已经用它来构建与其他语言在z / OS交互的代码。的Dignus头和运行时库具有(从存储器)的一些FreeBSD的谱系,其有助于简化移植。

使用这种方法,你可以得到,你可以从你的系统的其他部分调用做的工作负载模块,您可以与系统其他部分的链接代码,或者你可以提交作业,并获得输出

如果你想使用Java,您可以使用像 JTDS 和编写Java代码做什么你需要。我没有使用Java的z / OS上,所以我不能提供具体的建议,但我已经使用在其他平台上JTDS,我一直对结果满意。

更新

可以导出一个C函数为切入点到负载模块,然后调用从Cobol的。的C / C ++实现需要处理的Cobol数据结构;他们是明确的和可预测的,这样是没有问题的。这取决于你如何灵活需要的东西是,你可以编译查询到C代码,只是有它执行预定义的查询,并有一个接口用于检索结果的功能,或者你可以有地方被提供的查询更复杂的东西从COBOL程序。

我已经使用这种方法来提供API函数的Adabas /天然开发者和它的工作很好。所述编译器Dignus具有机构,用于呼叫者提供的句柄运行时库,以便可以管理从调用程序C运行时环境的寿命。

有关一个C / C ++开发者,这应该是相当简单的。如果你的开发人员都Cobol语言的开发人员,事情可能会比较麻烦一些。

在网关的方法是可行的,而且我敢肯定,还有周围的网关产品,但我不能推荐一个。我已经看到了糟糕的那些我不建议,但并不意味着没有一个好地方。

为了完整起见,我将提到实现在Cobol的TDS协议的可能性。听起来像残酷和通常处以,虽然。

其他提示

如果你有3270的终端仿真,您使用什么终端? PC的?

一个有趣的黑客是使用Cisco路由器上飞3270香草TCP转换做,然后写你的SQL服务器程序一个简单的TCP代理

不这样 - 3270个仿真器连接到IBM主机。为了得到从大型机上的SQL Server数据库的数据,你会写上从SQL Server数据库读取数据时,主机上运行的程序。这就需要你有在大型机上运行的驱动程序软件。你也许可以找到一个第三方,使得这种类型的东西,但它很可能是相当昂贵的。

如果您需要从主机系统与外部数据源放在一起的报告什么的合并数据可能更容易下车大型机的数据,并做整合其他地方 - 也许是某种形式的数据集市的

另一种方法是,以提取从SQL Server数据库要THD数据并将其上传到主机作为平面文件用于处理在那里。

下面是成为了可能,如果你正在写的是在CICS运行COBOL程序。

首先,包装你的SQL Server数据库的存储过程与web服务包装。看为一个例子devx.com文章28577。

在此之后,调用使用CICS Web服务调用新的SQL Server托管的Web服务。

最后使用标准CICS BMS命令到数据呈现给用户。

Appliation开发CICS Web服务

刚刚得到的JDBC驱动程序来访问MS-SQL服务器。然后,您可以继承它,在你的COBOL程序使用和访问数据库,就像如果你使用它与Java。

一旦你得到你的结果,你可以通过常规BMS功能呈现出来。

没有肮脏的黑客或需要花哨的技巧联网。随着IBM的Cobol企业,你真的可以只创建一个Java类,并使用它,你会在Java领域。

你也许可以做我过去做过的事情。我已经编写了 DB2 到 MS-SQL COBOL 程序/函数,使 MS-SQL 表/视图仅 SELECT 到 DB2。它涉及在网络服务器上创建一个正在运行的服务,该服务仅接受来自大型机的 TCP/IP 连接,并使用作为用于访问 MS-SQL 表的用户 ID/PW 传递的凭据。然后,它将针对表/视图发出选择,并首先将字段名称列表和行总数传回。然后,它将每一行作为制表符分隔的字段传递回主机。COBOL 程序会将字段名称保存在表中,用于确定使用哪个例程将每个 MS-SQL 字段转换为 DB2。从 DB2 的角度来看,它看起来像一个返回字段的函数。我们大约有 30 个正在运行。我必须创建一个 MS-SQL 描述过程来帮助创建 COBOL 程序的字段转换的初始定义。还必须创建一个 COBOL 程序来读取描述数据并创建链接和过程划分命令。每个 MS-SQL 表/视图都有一个 COBOL 程序。这是一个示例函数定义。创建函数
TCL.BALANCING_RECON(VARCHAR(4000))
退货
桌子(
公司字符(6),
PNOTENO VARCHAR(14),
普尼特查尔(3),
滞纳金 12 月(11,2),
FASB_4110 DEC(11,2),
FASB_4111 DEC(11,2),
用户数量1 DEC(11,2),
用户数量2 DEC(11,2),
用户字段1 VARCHAR(14)
)
语言 COBOL
失败后继续
不确定性
读取 SQL 数据
外部名称 DB2TCL02
碰撞 DB2TCL02
参数样式 SQL
空输入时调用
无需外部行动
禁止并行
暂存器 8000
阿斯泰限制 100
居留居民 是
程序类型 SUB
WLM 环境 DB2TWLM
安全 DB2
数据库信息
;犯罪;
将函数 TCL.BALANCING_RECON 上的执行授予 PUBLIC;

调用该函数:选择*从
表(TCL.BALANCE_RECON(''
)) AS X;

您可以将任何 MS-SQL 过滤器命令放在引号之间。

我还没有被要求更新任何 MS-SQL 数据,所以我还没有跨越这个障碍。DB2 中还有一个数据库,用于跟踪 ID/PW 和已启动任务正在运行的服务器。这样,如果服务器过载,可以将不同的选择推送到不同的服务器。即使对于大桌子,响应也很快。超时时间与 60 死锁超时时间相同。传输主要基于IP。DB2 只是将数据视为外部表引用。

由于脏的黑客去,你有没有想过建立一个简单的HTTP或TCP服务器返回你所需要的表数据为.csv?

这意味着你的客户端只需要一个简单的HTTP / TCP客户端来访问数据,而不是一个数据库客户机库。

在我的公司,我们使用Java连接到SQL Server。

和一个CL呼叫此Java程序:)

很简单......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top