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

问题描述:

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

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

+2

要添加到詹姆斯的回答,任何时候有一个服务器/客户端界面,这是故意的,每一方没有其他的知识进行操作。想象一下在Windows上运行的Java程序。它可能是com.mycompany.orderEntry.inventory.GetQuantity;它使用ODBC/JDBC来访问DB2 for i。 IBM i如何调用堆栈知道启动更新的Java程序的确切名称? ODBC驱动程序不会将启动程序的名称传递给服务器。 – 2012-02-15 18:11:05

+0

另一个想法。根据您如何设置连接,如果您为每个应用程序使用不同的通用用户,则可以通过使用'WRKACTJOB'上的选项2来查看登录用户的内容。 – 2012-02-15 18:15:55

由于JamesA指出,所有的ODBC请求经过QZDASOINIT工作,所以你不能改变调用堆栈,以确定呼叫者。

为了解决这个问题,DB2为我包括由ODBC驱动程序(它如果你愿意,你可以忽略),然后你的触发器可以使用自动设置客户端特殊寄存器。欲了解更多信息,请参阅:http://ibmsystemsmag.blogs.com/i_can/2009/10/i-can-use-client-special-registers.html

这是可能的一段时间,只有从6.1暴露。举一个例子使用,请在我的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中讨论了新的 “特殊寄存器”。