如何在使用Iseries ODBC时定义调用程序?

时间:2012-02-15 17:50:41

标签: odbc db2 ibm-midrange rpg

使用Iseries ODBC驱动程序时,有没有办法定义调用'程序名'?当我使用Iseries Access ODBC驱动程序对AS400运行命令时,as400的调用堆栈中的调用程序将程序名称显示为空白。我想定义一个,因为我们有一个需要知道谁是调用者的触发器。

3 个答案:

答案 0 :(得分:3)

通过QZDASOINIT作业代理ODBC连接。我不相信有一种方法可以识别触发触发器的特定连接(或程序)。

答案 1 :(得分:2)

正如JamesA所指出的,所有ODBC请求都通过QZDASOINIT作业,因此您无法更改调用堆栈以确定调用者。

为了解决这个问题,DB2 for i包含了由ODBC驱动程序自动设置的客户端特殊寄存器(如果您愿意,可以覆盖它们),然后您的触发器可以使用。有关详细信息,请参阅:http://ibmsystemsmag.blogs.com/i_can/2009/10/i-can-use-client-special-registers.html

答案 2 :(得分:0)

这可能已经有一段时间了,仅从我6.1开始暴露。有关示例用法,请在i Nav“运行SQL脚本...”中运行此语句:

select CURRENT CLIENT_APPLNAME, CURRENT CLIENT_PROGRAMID, CURRENT CLIENT_WRKSTNNAME from sysibm.sysdummy1

使用JDBC,OLE DB,CLI或.NET数据提供程序的应用程序开发人员可以获得支持。也可以通过调用特殊的存储过程来设置它们。

例如,使用IBMDASQL,连接字符串可能包括:

conn.Open "Provider=IBMDASQL; Data Source=MyAS400;" & _
"Client User ID=MYWINUSRID; Client WorkStation Name=MYWINPC; " & _
"Client Program ID=somepc.exe; Application Name=Sample for Audit"

SQL Reference讨论了新的“特殊寄存器”。